Пример #1
0
def test_portfolio_return_dummy():
    w = np.array([0.3, 0.1, 0.2, 0.25, 0.15])
    e_rets = pd.Series([0.19, 0.08, 0.09, 0.23, 0.17])

    mu = objective_functions.portfolio_return(w, e_rets, negative=False)
    assert isinstance(mu, float)
    assert mu > 0
    np.testing.assert_almost_equal(mu, w.dot(e_rets))
    np.testing.assert_almost_equal(mu, (w * e_rets).sum())
Пример #2
0
def test_portfolio_return_real():
    df = get_data()
    e_rets = mean_historical_return(df)
    w = np.array([1 / len(e_rets)] * len(e_rets))
    negative_mu = objective_functions.portfolio_return(w, e_rets)
    assert isinstance(negative_mu, float)
    assert negative_mu < 0
    np.testing.assert_almost_equal(negative_mu, -w.dot(e_rets))
    np.testing.assert_almost_equal(negative_mu, -(w * e_rets).sum())
    np.testing.assert_almost_equal(-e_rets.sum() / len(e_rets), negative_mu)
Пример #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)
Пример #4
0
def test_sharpe_ratio():
    df = get_data()
    e_rets = mean_historical_return(df)
    S = sample_cov(df)
    w = np.array([1 / len(e_rets)] * len(e_rets))

    sharpe = objective_functions.sharpe_ratio(w, e_rets, S)
    assert isinstance(sharpe, float)
    assert sharpe < 0

    sigma = np.sqrt(np.dot(w, np.dot(S, w.T)))
    negative_mu = objective_functions.portfolio_return(w, e_rets)
    np.testing.assert_almost_equal(sharpe * sigma - 0.02, negative_mu)

    # Risk free rate increasing should lead to negative Sharpe increasing.
    assert sharpe < objective_functions.sharpe_ratio(
        w, e_rets, S, risk_free_rate=0.1)