def mock_curr(_cls, _q): d = { 'swapRate': [1, 2, 3], } df = MarketDataResponseFrame(data=d, index=_index * 3) df.dataset_ids = _test_datasets return df
def mock_curr(_cls, _q): d = { 'impliedVolatility': [1, 2, 3], } df = MarketDataResponseFrame(data=d, index=_index * 3) df.dataset_ids = _test_datasets return df
def test_custom_aum(): data = { 'aum': [ 101, 102, 103 ], 'date': [ '2020-01-01', '2020-01-02', '2020-01-03' ] } idx = pd.date_range('2020-01-01', freq='D', periods=3) df = MarketDataResponseFrame(data=data, index=idx) df.dataset_ids = ('AUM',) replace = Replacer() # mock GsPortfolioApi.get_reports() mock = replace('gs_quant.api.gs.portfolios.GsPortfolioApi.get_custom_aum', Mock()) mock.return_value = df with DataContext(datetime.date(2020, 1, 1), datetime.date(2019, 1, 3)): actual = mp.aum('MP1') assert actual.index.equals(idx) assert all(actual.values == data['aum']) replace.restore()
def test_financial_conditions_index(): data = { 'pnl': [ 101, 102, 103 ], 'date': [ '2020-01-01', '2020-01-02', '2020-01-03' ] } idx = pd.date_range('2020-01-01', freq='D', periods=3) df = MarketDataResponseFrame(data=data, index=idx) df.dataset_ids = ('PNL',) replace = Replacer() # mock PerformanceReport.get_pnl() mock = replace('gs_quant.markets.report.PerformanceReport.get_pnl', Mock()) mock.return_value = df # mock GsPortfolioApi.get_reports() mock = replace('gs_quant.api.gs.portfolios.GsPortfolioApi.get_reports', Mock()) mock.return_value = [Report.from_dict({'id': 'RP1', 'positionSourceType': 'Portfolio', 'positionSourceId': 'MP1', 'type': 'Portfolio Performance Analytics', 'parameters': {'transactionCostModel': 'FIXED'}})] with DataContext(datetime.date(2020, 1, 1), datetime.date(2019, 1, 3)): actual = mp.pnl('MP1') assert actual.index.equals(idx) assert all(actual.values == data['pnl']) replace.restore()
def mock_df(): d = { 'strikeVol': [5, 1, 2], } df = MarketDataResponseFrame(data=d, index=_index * 3) df.dataset_ids = "FX_VOLATILITY_SWAP" return df
def test_fci(): with pytest.raises(NotImplementedError): mc.fci('IN', real_time=True) data = { 'fci': [101, 102, 103], 'realFCI': [100, 99, 98], 'realTWIContribution': [100, 100, 98] } idx = pd.date_range('2020-01-01', freq='D', periods=3) df = MarketDataResponseFrame(data=data, index=idx) df.dataset_ids = ('FCI', ) replace = Replacer() mock = replace('gs_quant.timeseries.measures.GsDataApi.get_market_data', Mock()) mock.return_value = df with DataContext(datetime.date(2020, 1, 1), datetime.date(2019, 1, 3)): actual = mc.fci('IN') assert actual.index.equals(idx) assert all(actual.values == data['fci']) mock = replace('gs_quant.timeseries.measures.Dataset.get_data', Mock()) mock.return_value = df with DataContext(datetime.date(2020, 1, 1), datetime.date(2019, 1, 3)): actual = mc.fci('IN', mc._FCI_MEASURE.REAL_FCI) assert actual.index.equals(idx) assert all(actual.values == data['realFCI']) with DataContext(datetime.date(2020, 1, 1), datetime.date(2019, 1, 3)): actual = mc.fci('IN', mc._FCI_MEASURE.REAL_TWI_CONTRIBUTION) assert actual.index.equals(idx) assert all(actual.values == data['realTWIContribution']) replace.restore()
def test_normalized_performance_no_custom_aum(): with DataContext(datetime.date(2020, 1, 1), datetime.date(2019, 1, 3)): df = MarketDataResponseFrame(data=ppa_data, dtype="float64") replace = Replacer() # mock GsPortfolioApi.get_reports() mock = replace('gs_quant.api.gs.portfolios.GsPortfolioApi.get_reports', Mock()) mock.return_value = [ Report.from_dict({ 'id': 'RP1', 'positionSourceType': 'Portfolio', 'positionSourceId': 'MP1', 'type': 'Portfolio Performance Analytics', 'parameters': { 'transactionCostModel': 'FIXED' } }) ] # mock PerformanceReport.get_many_measures() mock = replace( 'gs_quant.markets.report.PerformanceReport.get_many_measures', Mock()) mock.return_value = df # mock PerformanceReport.get_portfolio_constituents() mock = replace( 'gs_quant.markets.report.PerformanceReport.get_portfolio_constituents', Mock()) mock.return_value = MarketDataResponseFrame(data=constituents_data, dtype="float64") # mock PerformanceReport.get_custom_aum() mock = replace( 'gs_quant.api.gs.portfolios.GsPortfolioApi.get_custom_aum', Mock()) mock.return_value = pd.DataFrame({}) # mock PerformanceReport.get() mock = replace('gs_quant.markets.report.PerformanceReport.get', Mock()) mock.return_value = PerformanceReport( report_id='RP1', position_source_type='Portfolio', position_source_id='MP1', report_type='Portfolio Performance Analytics', parameters=ReportParameters(transaction_cost_model='FIXED')) with pytest.raises(MqError): mr.normalized_performance('MP1', 'Custom AUM') replace.restore()
def test_normalized_performance_short(): idx = pd.date_range('2020-01-02', freq='D', periods=3) replace = Replacer() expected = {"Short": pd.Series(data=[1, 1 / 2, 1 / 3], index=idx, name='normalizedPerformance', dtype='float64'), "Long": pd.Series(data=[1, 2, 3], index=idx, name='normalizedPerformance', dtype='float64'), None: pd.Series(data=[1, (2 + 1 / 2) / 2, (3 + 1 / 3) / 2], index=idx, name='normalizedPerformance', dtype='float64')} mock = replace('gs_quant.api.gs.portfolios.GsPortfolioApi.get_reports', Mock()) mock.return_value = [ Report.from_dict({'id': 'RP1', 'positionSourceType': 'Portfolio', 'positionSourceId': 'MP1', 'type': 'Portfolio Performance Analytics', 'parameters': {'transactionCostModel': 'FIXED'}})] # mock PerformanceReport.get_portfolio_constituents() mock = replace('gs_quant.markets.report.PerformanceReport.get_portfolio_constituents', Mock()) mock.return_value = MarketDataResponseFrame(data=constituents_data_l_s, dtype="float64") # mock PerformanceReport.get() mock = replace('gs_quant.markets.report.PerformanceReport.get', Mock()) mock.return_value = PerformanceReport(report_id='RP1', position_source_type='Portfolio', position_source_id='MP1', report_type='Portfolio Performance Analytics', parameters=ReportParameters(transaction_cost_model='FIXED')) for k, v in expected.items(): with DataContext(datetime.date(2020, 1, 1), datetime.date(2019, 1, 3)): actual = mr.normalized_performance('MP1', k) assert all((actual.values - v.values) < 0.01) replace.restore()
def test_midcurve_vol_return_data(): replace = Replacer() test_data = dict(midcurveVol=[1, 2, 3]) df = MarketDataResponseFrame( data=test_data, index=[dt.date(2019, 1, 1), dt.date(2019, 1, 2), dt.date(2019, 1, 3)]) replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock()).return_value = "GBP" replace('gs_quant.timeseries.measures_rates._get_tdapi_rates_assets', Mock(), Mock()).return_value = ["MADWG3WHCKNE1DJA", "MAH6JK3TZJJGFQ65"] replace('gs_quant.timeseries.measures_rates._range_from_pricing_date', Mock(), Mock()).return_value = [dt.date(2019, 1, 2), dt.date(2019, 1, 5)] replace('gs_quant.timeseries.measures_rates._market_data_timed', Mock()).return_value = df actual = tm_rates.midcurve_vol(Currency("GBP", name="GBP"), "1y", "1y", "1y", 0) assert_series_equal(tm._extract_series_from_df(df, QueryType.MIDCURVE_VOL), actual) replace.restore()
def test_swaption_atmFwdRate_return_data(): replace = Replacer() test_data = dict(atmFwdRate=[1, 2, 3]) df = MarketDataResponseFrame( data=test_data, index=[dt.date(2019, 1, 1), dt.date(2019, 1, 2), dt.date(2019, 1, 3)]) replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock()).return_value = "GBP" replace('gs_quant.timeseries.measures_rates._get_tdapi_rates_assets', Mock(), Mock()).return_value = ["MADWG3WHCKNE1DJA", "MAH6JK3TZJJGFQ65"] replace('gs_quant.timeseries.measures_rates._range_from_pricing_date', Mock(), Mock()).return_value = [dt.date(2019, 1, 2), dt.date(2019, 1, 5)] replace('gs_quant.timeseries.measures_rates._market_data_timed', Mock()).return_value = df actual = tm_rates.swaption_atm_fwd_rate(Currency("GBP", name="GBP")) assert_series_equal(tm._extract_series_from_df(df, QueryType.ATM_FWD_RATE), actual) replace.restore()
def mock_natgas_forward_price(_cls, _q): d = { 'forwardPrice': [ 2.880, 2.844, 2.726, ], 'contract': [ "F21", "G21", "H21", ] } df = MarketDataResponseFrame(data=d, index=pd.to_datetime( [datetime.date(2019, 1, 2)] * 3)) df.dataset_ids = _test_datasets return df
def test_normalized_performance_default_aum(): idx = pd.date_range('2020-01-02', freq='D', periods=3) expected = pd.Series(data=[1, 1 / 0.8, 1 / 0.6], index=idx, name='normalizedPerformance', dtype='float64') with DataContext(datetime.date(2020, 1, 1), datetime.date(2019, 1, 3)): df = MarketDataResponseFrame(data=ppa_data, dtype="float64") replace = Replacer() # mock GsPortfolioApi.get_reports() mock = replace('gs_quant.api.gs.portfolios.GsPortfolioApi.get_reports', Mock()) mock.return_value = [ Report.from_dict({ 'id': 'RP1', 'positionSourceType': 'Portfolio', 'positionSourceId': 'MP1', 'type': 'Portfolio Performance Analytics', 'parameters': { 'transactionCostModel': 'FIXED' } }) ] # mock PerformanceReport.get_many_measures() mock = replace( 'gs_quant.markets.report.PerformanceReport.get_many_measures', Mock()) mock.return_value = df # mock PerformanceReport.get_custom_aum() mock = replace( 'gs_quant.api.gs.portfolios.GsPortfolioApi.get_custom_aum', Mock()) mock.return_value = aum # mock PerformanceReport.get() mock = replace('gs_quant.markets.report.PerformanceReport.get', Mock()) mock.return_value = PerformanceReport( report_id='RP1', position_source_type='Portfolio', position_source_id='MP1', report_type='Portfolio Performance Analytics', parameters=ReportParameters(transaction_cost_model='FIXED')) mock = replace( 'gs_quant.api.gs.portfolios.GsPortfolioApi.get_portfolio', Mock()) mock.return_value = Portfolio('USD', 'P1', id_='MP1') actual = mr.normalized_performance('MP1', None) assert all(actual.values == expected.values) replace.restore()
def test_swaption_premium_return_data(): replace = Replacer() test_data = dict(swaptionPremium=[1, 2, 3]) df = MarketDataResponseFrame(data=test_data, index=[dt.date(2019, 1, 1), dt.date(2019, 1, 2), dt.date(2019, 1, 3)]) replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock()).return_value = "GBP" replace('gs_quant.timeseries.measures_rates._get_tdapi_rates_assets', Mock(), Mock()).return_value = "MADWG3WHCKNE1DJA" replace('gs_quant.timeseries.measures_rates._range_from_pricing_date', Mock(), Mock()).return_value = [ dt.date(2019, 1, 2), dt.date(2019, 1, 5)] replace('gs_quant.timeseries.measures_rates._market_data_timed', Mock()).return_value = df actual = tm_rates.swaption_premium(Currency("GBP", name="GBP")) assert_series_equal(tm._extract_series_from_df(df, QueryType.SWAPTION_PREMIUM), actual) replace.restore()
def test_swaption_vol_smile2_returns_data(): replace = Replacer() test_data = dict(strikeRelative=["ATM", "ATM+50", "ATM+100"], swaptionVol=[1, 2, 3]) df = MarketDataResponseFrame(data=test_data, index=_index * 3) replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock()).return_value = "GBP" replace('gs_quant.timeseries.measures_rates._get_tdapi_rates_assets', Mock(), Mock()).return_value = [ "MADWG3WHCKNE1DJA", "MAH6JK3TZJJGFQ65"] replace('gs_quant.timeseries.measures_rates._range_from_pricing_date', Mock(), Mock()).return_value = [ dt.date(2020, 1, 2), dt.date(2020, 1, 2)] replace('gs_quant.timeseries.measures_rates._market_data_timed', Mock()).return_value = df with DataContext('2019-01-01', '2025-01-01'): actual = tm_rates.swaption_vol_smile(Currency("GBP", name="GBP"), '3m', '10y') assert_series_equal(pd.Series([1, 2, 3], index=[0.0, 50.0, 100.0]), pd.Series(actual)) replace.restore()
def test_get_short_pnl(): idx = pd.date_range('2020-01-02', freq='D', periods=3) replace = Replacer() expected = pd.Series(data=[0, -2, -2], index=idx, name='shortPnl', dtype='float64') mock = replace('gs_quant.api.gs.portfolios.GsPortfolioApi.get_reports', Mock()) mock.return_value = [ Report.from_dict({ 'id': 'RP1', 'positionSourceType': 'Portfolio', 'positionSourceId': 'MP1', 'type': 'Portfolio Performance Analytics', 'parameters': { 'transactionCostModel': 'FIXED' } }) ] # mock PerformanceReport.get_portfolio_constituents() mock = replace( 'gs_quant.markets.report.PerformanceReport.get_portfolio_constituents', Mock()) mock.return_value = MarketDataResponseFrame(data=pnl_data_l_s) # mock PerformanceReport.get() mock = replace('gs_quant.markets.report.PerformanceReport.get', Mock()) mock.return_value = PerformanceReport( report_id='RP1', position_source_type='Portfolio', position_source_id='MP1', report_type='Portfolio Performance Analytics', parameters=ReportParameters(transaction_cost_model='FIXED')) with DataContext(datetime.date(2020, 1, 1), datetime.date(2019, 1, 3)): actual = mr.short_pnl('MP1') assert all(actual.values == expected.values) replace.restore()
def test_swaption_swaption_vol_term2_returns_data(): replace = Replacer() df = MarketDataResponseFrame( data=dict(expirationTenor=['1m', '6m', '1y'], terminationTenor=['1y', '2y', '3y'], swaptionVol=[1, 2, 3]), index=_index * 3) replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock()).return_value = "GBP" replace('gs_quant.timeseries.measures_rates._get_tdapi_rates_assets', Mock(), Mock()).return_value = [ "MADWG3WHCKNE1DJA", "MAH6JK3TZJJGFQ65"] replace('gs_quant.timeseries.measures_rates._range_from_pricing_date', Mock(), Mock()).return_value = [ dt.date(2020, 1, 2), dt.date(2020, 1, 2)] replace('gs_quant.timeseries.measures_rates._market_data_timed', Mock()).return_value = df with DataContext('2019-01-01', '2025-01-01'): actual = tm_rates.swaption_vol_term(Currency("GBP", name="GBP"), tm.SwaptionTenorType.SWAP_MATURITY, '5y', 0) expected = pd.Series([1, 2, 3], index=pd.to_datetime(['2019-02-01', '2019-07-01', '2020-01-01'])) assert_series_equal(expected, pd.Series(actual), check_names=False) with DataContext('2019-01-01', '2025-01-01'): actual = tm_rates.swaption_vol_term(Currency("GBP", name="GBP"), tm.SwaptionTenorType.OPTION_EXPIRY, '5y', 0) expected = pd.Series([1, 2, 3], index=pd.to_datetime(['2020-01-01', '2021-01-01', '2021-12-31'])) assert_series_equal(expected, pd.Series(actual), check_names=False) replace.restore()
def test_get_long_pnl_empty(): replace = Replacer() expected = pd.Series(dtype=float) mock = replace('gs_quant.api.gs.portfolios.GsPortfolioApi.get_reports', Mock()) mock.return_value = [ Report.from_dict({ 'id': 'RP1', 'positionSourceType': 'Portfolio', 'positionSourceId': 'MP1', 'type': 'Portfolio Performance Analytics', 'parameters': { 'transactionCostModel': 'FIXED' } }) ] # mock PerformanceReport.get_portfolio_constituents() mock = replace( 'gs_quant.markets.report.PerformanceReport.get_portfolio_constituents', Mock()) mock.return_value = MarketDataResponseFrame(data=constituents_data_s) # mock PerformanceReport.get() mock = replace('gs_quant.markets.report.PerformanceReport.get', Mock()) mock.return_value = PerformanceReport( report_id='RP1', position_source_type='Portfolio', position_source_id='MP1', report_type='Portfolio Performance Analytics', parameters=ReportParameters(transaction_cost_model='FIXED')) with DataContext(datetime.date(2020, 1, 1), datetime.date(2019, 1, 3)): actual = mr.long_pnl('MP1') assert all(actual.values == expected.values) replace.restore()
def test_ois_fxfwd_xcswap_measures(mocker): replace = Replacer() dict_fns = { "oisXccy": { "fn": tm_rates.ois_xccy, "queryType": QueryType.OIS_XCCY }, "oisXccyExSpike": { "fn": tm_rates.ois_xccy_ex_spike, "queryType": QueryType.OIS_XCCY_EX_SPIKE }, "usdOis": { "fn": tm_rates.usd_ois, "queryType": QueryType.USD_OIS }, "nonUsdOis": { "fn": tm_rates.non_usd_ois, "queryType": QueryType.NON_USD_OIS }, } args = dict(tenor='3y', real_time=False) for key in dict_fns: fn = dict_fns[key]["fn"] mock_jpy = Cross('MAYJPCVVF2RWXCES', 'USD/JPY') xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock()) xrefs.return_value = 'JPYUSD' args['asset'] = mock_jpy with pytest.raises(NotImplementedError): fn(**args) mock_eur = Cross('MAA0NE9QX2ABETG6', 'EUR/USD') args['asset'] = mock_eur xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock()) xrefs.return_value = 'EURUSD' with pytest.raises(NotImplementedError): fn(..., real_time=True) args['tenor'] = '5yr' with pytest.raises(MqValueError): fn(**args) args['tenor'] = '3y' test_data = {key: [1, 2, 3]} df = MarketDataResponseFrame(data=test_data, index=[ dt.date(2019, 1, 1), dt.date(2019, 1, 2), dt.date(2019, 1, 3) ]) identifiers = replace( 'gs_quant.timeseries.measures_rates._get_tdapi_rates_assets', Mock()) identifiers.return_value = {'MAA9MVX15AJNQCVG'} # Test on EURUSD only replace('gs_quant.timeseries.measures_rates._range_from_pricing_date', Mock(), Mock()).return_value = [ dt.date(2019, 1, 2), dt.date(2019, 1, 5) ] replace('gs_quant.timeseries.measures_rates._market_data_timed', Mock()).return_value = df expected = tm_rates._extract_series_from_df(df, dict_fns[key]["queryType"]) actual = fn(**args) assert_series_equal(expected, actual) replace.restore()
def test_normalized_performance(): idx = pd.date_range('2020-01-02', freq='D', periods=3) expected = { RiskAumSource.Net: pd.Series(data=[1, 1 + 2 / 4, 1 + 6 / 6], index=idx, name='normalizedPerformance', dtype='float64'), RiskAumSource.Gross: pd.Series(data=[1, 1 + 2 / 1.2, 1 + 6 / 1.3], index=idx, name='normalizedPerformance', dtype='float64'), RiskAumSource.Long: pd.Series(data=[1, 1 + 2 / 1.2, 1 + 6 / 1.3], index=idx, name='normalizedPerformance', dtype='float64'), RiskAumSource.Short: pd.Series(data=[1, 1 + 2 / 1.2, 1 + 6 / 1.3], index=idx, name='normalizedPerformance', dtype='float64'), RiskAumSource.Custom_AUM: pd.Series(data=[1, 1 + 2 / 2.2, 1 + 6 / 2.4], index=idx, name='normalizedPerformance', dtype='float64') } with DataContext(datetime.date(2020, 1, 1), datetime.date(2019, 1, 3)): for k, v in expected.items(): df = MarketDataResponseFrame(data=ppa_data, dtype="float64") replace = Replacer() # mock GsPortfolioApi.get_reports() mock = replace( 'gs_quant.api.gs.portfolios.GsPortfolioApi.get_reports', Mock()) mock.return_value = [ Report.from_dict({ 'id': 'RP1', 'positionSourceType': 'Portfolio', 'positionSourceId': 'MP1', 'type': 'Portfolio Performance Analytics', 'parameters': { 'transactionCostModel': 'FIXED' } }) ] # mock PerformanceReport.get_portfolio_constituents() mock = replace( 'gs_quant.markets.report.PerformanceReport.get_portfolio_constituents', Mock()) mock.return_value = MarketDataResponseFrame(data=constituents_data, dtype="float64") # mock PerformanceReport.get_many_measures() mock = replace( 'gs_quant.markets.report.PerformanceReport.get_many_measures', Mock()) mock.return_value = df # mock PerformanceReport.get_custom_aum() mock = replace( 'gs_quant.api.gs.portfolios.GsPortfolioApi.get_custom_aum', Mock()) mock.return_value = aum # mock PerformanceReport.get() mock = replace('gs_quant.markets.report.PerformanceReport.get', Mock()) mock.return_value = PerformanceReport( report_id='RP1', position_source_type='Portfolio', position_source_id='MP1', report_type='Portfolio Performance Analytics', parameters=ReportParameters(transaction_cost_model='FIXED')) actual = mr.normalized_performance('MP1', k.value) assert all(actual.values == v.values) replace.restore()