def test_cla_max_sharpe(self): """ Test the calculation of maximum sharpe ratio weights """ cla = CLA(weight_bounds=(0, 1), calculate_returns="mean") cla.allocate(asset_prices=self.data, solution='max_sharpe') weights = cla.weights.values[0] assert (weights >= 0).all() assert len(weights) == self.data.shape[1] np.testing.assert_almost_equal(np.sum(weights), 1)
def test_cla_with_mean_returns(self): """ Test the calculation of CLA turning points using mean returns. """ self.data.iloc[1:10, :] = 40 self.data.iloc[11:20, :] = 50 self.data.iloc[21, :] = 100 cla = CLA(weight_bounds=(0, 1), calculate_expected_returns="mean") cla.allocate(asset_prices=self.data, asset_names=self.data.columns) weights = cla.weights.values weights[weights <= 1e-15] = 0 # Convert very very small numbers to 0 for turning_point in weights: assert (turning_point >= 0).all() assert len(turning_point) == self.data.shape[1] np.testing.assert_almost_equal(np.sum(turning_point), 1)
def test_lambda_for_no_bounded_weights(self): # pylint: disable=protected-access,invalid-name """ Test the computation of lambda when there are no bounded weights """ cla = CLA(weight_bounds=(0, 1), calculate_returns="mean") cla.allocate(asset_prices=self.data, solution='min_volatility') data = self.data.cov() data = data.values x, y = cla._compute_lambda(covar_f_inv=data, covar_fb=data, mean_f=cla.expected_returns, w_b=None, asset_index=1, b_i=[[0], [1]]) assert isinstance(x, float) assert isinstance(y, int)