def test_vol_term(): with DataContext('2018-01-01', '2019-01-01'): _vol_term_typical(tm.SkewReference.SPOT, 100) _vol_term_typical(tm.SkewReference.NORMALIZED, 4) _vol_term_empty() with DataContext('2018-01-16', '2018-12-31'): out = _vol_term_typical(tm.SkewReference.SPOT, 100) assert out.empty with pytest.raises(NotImplementedError): tm.vol_term(..., tm.SkewReference.SPOT, 100, real_time=True)
def _vol_term_typical(reference, value): from gs_quant.target.common import FieldFilterMap assert DataContext.current_is_set data = { 'tenor': ['1w', '2w', '1y', '2y'], 'impliedVolatility': [1, 2, 3, 4] } out = pd.DataFrame(data=data, index=pd.DatetimeIndex(['2018-01-01'] * 4)) replace = Replacer() market_mock = replace('gs_quant.timeseries.measures.GsDataApi.get_market_data', Mock()) market_mock.return_value = out ffm_mock = replace('gs_quant.timeseries.measures.FieldFilterMap', Mock(spec=FieldFilterMap)) actual = tm.vol_term(Index('MA123', AssetClass.Equity, '123'), reference, value) idx = pd.DatetimeIndex(['2018-01-08', '2018-01-15', '2019-01-01', '2020-01-01'], name='expirationDate') expected = pd.Series([1, 2, 3, 4], name='impliedVolatility', index=idx) expected = expected.loc[DataContext.current.start_date: DataContext.current.end_date] if expected.empty: assert actual.empty else: assert_series_equal(expected, actual) market_mock.assert_called_once() ffm_mock.assert_called_once_with(relativeStrike=value if reference == tm.SkewReference.NORMALIZED else value / 100, strikeReference=unittest.mock.ANY) replace.restore() return actual
def _vol_term_empty(): replace = Replacer() market_mock = replace('gs_quant.timeseries.measures.GsDataApi.get_market_data', Mock()) market_mock.return_value = pd.DataFrame() actual = tm.vol_term(Index('MAXYZ', AssetClass.Equity, 'XYZ'), tm.SkewReference.DELTA, 777) assert actual.empty market_mock.assert_called_once() replace.restore()