def test_min_volatility_cvxpy_vs_scipy():
    # cvxpy
    ef = setup_efficient_frontier()
    ef.min_volatility()
    w1 = ef.weights

    # scipy
    args = (ef.cov_matrix, )
    initial_guess = np.array([1 / ef.n_assets] * ef.n_assets)
    result = sco.minimize(
        objective_functions.portfolio_variance,
        x0=initial_guess,
        args=args,
        method="SLSQP",
        bounds=[(0, 1)] * 20,
        constraints=[{
            "type": "eq",
            "fun": lambda x: np.sum(x) - 1
        }],
    )
    w2 = result["x"]

    cvxpy_var = objective_functions.portfolio_variance(w1, ef.cov_matrix)
    scipy_var = objective_functions.portfolio_variance(w2, ef.cov_matrix)
    assert cvxpy_var <= scipy_var
def test_efficient_return_short():
    ef = EfficientFrontier(*setup_efficient_frontier(data_only=True),
                           weight_bounds=(None, None))
    target_return = 0.25
    weights_sum = 1.0  # Not market neutral, weights must sum to 1.
    w = ef.efficient_return(target_return)
    assert isinstance(w, dict)
    assert set(w.keys()) == set(ef.tickers)
    np.testing.assert_almost_equal(ef.weights.sum(), weights_sum)
    w_expected = simple_ef_weights(ef.expected_returns, ef.cov_matrix,
                                   target_return, weights_sum)
    np.testing.assert_almost_equal(ef.weights, w_expected)
    vol_expected = np.sqrt(
        objective_functions.portfolio_variance(w_expected, ef.cov_matrix))
    sharpe_expected = objective_functions.sharpe_ratio(w_expected,
                                                       ef.expected_returns,
                                                       ef.cov_matrix,
                                                       negative=False)
    np.testing.assert_allclose(ef.portfolio_performance(),
                               (target_return, vol_expected, sharpe_expected))
    sharpe = ef.portfolio_performance()[2]

    ef_long_only = setup_efficient_frontier()
    ef_long_only.efficient_return(target_return)
    long_only_sharpe = ef_long_only.portfolio_performance()[2]

    assert sharpe > long_only_sharpe
Exemple #3
0
def test_quadratic_utility():
    df = get_data()
    e_rets = mean_historical_return(df)
    S = sample_cov(df)
    w = np.array([1 / len(e_rets)] * len(e_rets))
    utility = objective_functions.quadratic_utility(w,
                                                    e_rets,
                                                    S,
                                                    risk_aversion=3)
    assert isinstance(utility, float)
    assert utility < 0

    mu = objective_functions.portfolio_return(w, e_rets, negative=False)
    variance = objective_functions.portfolio_variance(w, S)
    np.testing.assert_almost_equal(-utility + 3 / 2 * variance, mu)
Exemple #4
0
def test_volatility_dummy():
    w = np.array([0.4, 0.4, 0.2])
    data = np.diag([0.5, 0.8, 0.9])
    test_var = objective_functions.portfolio_variance(w, data)
    np.testing.assert_almost_equal(test_var, 0.244)
Exemple #5
0
def test_volatility():
    df = get_data()
    S = sample_cov(df)
    w = np.array([1 / df.shape[1]] * df.shape[1])
    var = objective_functions.portfolio_variance(w, S)
    np.testing.assert_almost_equal(var, 0.04498224489292057)