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)
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)