Esempio n. 1
0
def test_sharpe_ratio():
    file = os.path.join(os.path.dirname(__file__), '..', 'resources',
                        'MIDASER_SPX_USD.csv')
    price_df = pd.read_csv(file)
    price_df.index = pd.to_datetime(price_df['Date'])

    file = os.path.join(os.path.dirname(__file__), '..', 'resources',
                        'Sharpe_SPX_0175.csv')
    er_df = pd.read_csv(file)
    er_df.index = pd.to_datetime(er_df['Date'])

    replace = Replacer()
    er = replace('gs_quant.timeseries.econometrics.excess_returns', Mock())
    er.return_value = er_df['ER']
    actual = _get_ratio(price_df['SPX'],
                        0.0175,
                        0,
                        day_count_convention=DayCountConvention.ACTUAL_360)
    numpy.testing.assert_almost_equal(actual.values,
                                      er_df['SR'].values,
                                      decimal=5)
    actual = sharpe_ratio(price_df['SPX'], RiskFreeRateCurrency.USD)
    numpy.testing.assert_almost_equal(actual.values,
                                      er_df['SR'].values,
                                      decimal=5)
    actual = sharpe_ratio(price_df['SPX'][:], RiskFreeRateCurrency.USD, '1m')
    expected = pd.Series([np.nan, np.nan, np.nan, 8.266434, 6.731811],
                         index=pd.date_range(datetime.date(2019, 2, 4),
                                             periods=5))
    numpy.testing.assert_almost_equal(actual[:5].values,
                                      expected.values,
                                      decimal=5)
    with pytest.raises(MqValueError):
        actual = sharpe_ratio(price_df['SPX'][:],
                              RiskFreeRateCurrency.USD,
                              22,
                              method=Interpolate.INTERSECT)

    replace.restore()

    actual = _get_ratio(price_df['SPX'],
                        0.0175,
                        10,
                        day_count_convention=DayCountConvention.ACTUAL_360)
    numpy.testing.assert_almost_equal(actual.values,
                                      er_df['SR10'].values[10:],
                                      decimal=5)

    actual = _get_ratio(er_df['ER'],
                        0.0175,
                        0,
                        day_count_convention=DayCountConvention.ACTUAL_360,
                        curve_type=CurveType.EXCESS_RETURNS)
    numpy.testing.assert_almost_equal(actual.values,
                                      er_df['SR'].values,
                                      decimal=5)
Esempio n. 2
0
def test_sharpe_ratio():
    file = os.path.join(os.path.dirname(__file__), '..', 'resources',
                        'MIDASER_SPX_USD.csv')
    price_df = pd.read_csv(file)
    price_df.index = pd.to_datetime(price_df['Date'])

    file = os.path.join(os.path.dirname(__file__), '..', 'resources',
                        'Sharpe_SPX_0175.csv')
    er_df = pd.read_csv(file)
    er_df.index = pd.to_datetime(er_df['Date'])

    replace = Replacer()
    er = replace('gs_quant.timeseries.econometrics.excess_returns', Mock())
    er.return_value = er_df['ER']
    actual = _get_ratio(price_df['SPX'],
                        0.0175,
                        0,
                        day_count_convention=DayCountConvention.ACTUAL_360)
    numpy.testing.assert_almost_equal(actual.values,
                                      er_df['SR'].values,
                                      decimal=5)
    actual = sharpe_ratio(price_df['SPX'], RiskFreeRateCurrency.USD)
    numpy.testing.assert_almost_equal(actual.values,
                                      er_df['SR'].values,
                                      decimal=5)
    replace.restore()

    actual = _get_ratio(price_df['SPX'],
                        0.0175,
                        10,
                        day_count_convention=DayCountConvention.ACTUAL_360)
    numpy.testing.assert_almost_equal(actual.values,
                                      er_df['SR10'].values[10:],
                                      decimal=5)

    actual = _get_ratio(er_df['ER'],
                        0.0175,
                        0,
                        day_count_convention=DayCountConvention.ACTUAL_360,
                        curve_type=CurveType.EXCESS_RETURNS)
    numpy.testing.assert_almost_equal(actual.values,
                                      er_df['SR'].values,
                                      decimal=5)