def test_swap_rate(): replace = Replacer() mock_usd = Currency('MA890', 'USD') xrefs = replace('gs_quant.timeseries.measures.GsAssetApi.get_asset_xrefs', Mock()) xrefs.return_value = [ GsTemporalXRef(dt.date(2019, 1, 1), dt.date(2952, 12, 31), XRef(bbid='USD', )) ] identifiers = replace( 'gs_quant.timeseries.measures.GsAssetApi.map_identifiers', Mock()) identifiers.return_value = {'USD-3m': 'MA123'} replace('gs_quant.timeseries.measures.GsDataApi.get_market_data', mock_curr) actual = tm.swap_rate(mock_usd, '1y') assert_series_equal( pd.Series([1, 2, 3], index=_index * 3, name='swapRate'), actual) identifiers = replace( 'gs_quant.timeseries.measures.GsAssetApi.map_identifiers', Mock()) identifiers.return_value = {'USD OIS': 'MA123'} actual = tm.swap_rate(mock_usd, '1y', BenchmarkType.OIS) assert_series_equal( pd.Series([1, 2, 3], index=_index * 3, name='swapRate'), actual) mock_eur = Currency('MA890', 'EUR') xrefs = replace('gs_quant.timeseries.measures.GsAssetApi.get_asset_xrefs', Mock()) xrefs.return_value = [ GsTemporalXRef(dt.date(2019, 1, 1), dt.date(2952, 12, 31), XRef(bbid='EUR', )) ] identifiers = replace( 'gs_quant.timeseries.measures.GsAssetApi.map_identifiers', Mock()) identifiers.return_value = {'EUR-6m': 'MA123'} actual = tm.swap_rate(mock_eur, '1y') assert_series_equal( pd.Series([1, 2, 3], index=_index * 3, name='swapRate'), actual) mock_sek = Currency('MA890', 'SEK') xrefs = replace('gs_quant.timeseries.measures.GsAssetApi.get_asset_xrefs', Mock()) xrefs.return_value = [ GsTemporalXRef(dt.date(2019, 1, 1), dt.date(2952, 12, 31), XRef(bbid='SEK', )) ] identifiers = replace( 'gs_quant.timeseries.measures.GsAssetApi.map_identifiers', Mock()) identifiers.return_value = {'SEK-6m': 'MA123'} actual = tm.swap_rate(mock_sek, '1y') assert_series_equal( pd.Series([1, 2, 3], index=_index * 3, name='swapRate'), actual) with pytest.raises(NotImplementedError): tm.swap_rate(..., '1y', real_time=True) replace.restore()
def test_get_asset_xrefs(mocker): marquee_id = 'MQA1234567890' mock_response = { 'xrefs': ({ 'startDate': '1952-01-01', 'endDate': '2018-12-31', 'identifiers': { 'ric': '.GSTHHOLD', 'bbid': 'GSTHHOLD', 'cusip': '9EQ24FOLD', 'ticker': 'GSTHHOLD' } }, { 'startDate': '2019-01-01', 'endDate': '2952-12-31', 'identifiers': { 'ric': '.GSTHHVIP', 'bbid': 'GSTHHVIP', 'cusip': '9EQ24FPE5', 'ticker': 'GSTHHVIP', } }) } expected_response = (GsTemporalXRef( dt.date(1952, 1, 1), dt.date(2018, 12, 31), XRef( ric='.GSTHHOLD', bbid='GSTHHOLD', cusip='9EQ24FOLD', ticker='GSTHHOLD', )), GsTemporalXRef( dt.date(2019, 1, 1), dt.date(2952, 12, 31), XRef( ric='.GSTHHVIP', bbid='GSTHHVIP', cusip='9EQ24FPE5', ticker='GSTHHVIP', ))) # mock GsSession mocker.patch.object(GsSession.__class__, 'current', return_value=GsSession.get(Environment.QA, 'client_id', 'secret')) mocker.patch.object(GsSession.current, '_get', return_value=mock_response) # run test response = GsAssetApi.get_asset_xrefs(marquee_id) GsSession.current._get.assert_called_with( '/assets/{id}/xrefs'.format(id=marquee_id)) testfixtures.compare(response, expected_response)
def test_thematic_beta(): replace = Replacer() # mock getting PTA report mock = replace('gs_quant.markets.report.ThematicReport.get', Mock()) mock.return_value = ThematicReport(id='report_id') # mock getting thematic exposure mock = replace('gs_quant.markets.report.ThematicReport.get_thematic_betas', Mock()) mock.return_value = pd.DataFrame(thematic_data) # mock getting asset mock = Stock('MAA0NE9QX2ABETG6', 'Test Asset') xrefs = replace('gs_quant.timeseries.measures.GsAssetApi.get_asset_xrefs', Mock()) xrefs.return_value = [ GsTemporalXRef(datetime.date(2019, 1, 1), datetime.date(2952, 12, 31), XRef(ticker='basket_ticker', )) ] replace('gs_quant.markets.securities.SecurityMaster.get_asset', Mock()).return_value = mock with DataContext(datetime.date(2020, 7, 12), datetime.date(2020, 7, 15)): actual = mr.thematic_beta('report_id', 'basket_ticker') assert all(actual.values == [1, 1, 1, 1]) replace.restore()
def test_swaption_vol(): replace = Replacer() mock_usd = Currency('MA890', 'USD') xrefs = replace('gs_quant.timeseries.measures.GsAssetApi.get_asset_xrefs', Mock()) xrefs.return_value = [ GsTemporalXRef(dt.date(2019, 1, 1), dt.date(2952, 12, 31), XRef(bbid='USD', )) ] identifiers = replace( 'gs_quant.timeseries.measures.GsAssetApi.map_identifiers', Mock()) identifiers.return_value = {'USD-LIBOR-BBA': 'MA123'} replace('gs_quant.timeseries.measures.GsDataApi.get_market_data', mock_curr) actual = tm.swaption_vol(mock_usd, '3m', '1y', 0) assert_series_equal( pd.Series([1, 2, 3], index=_index * 3, name='swaptionVol'), actual) actual = tm.swaption_vol(mock_usd, '3m', '1y', 50) assert_series_equal( pd.Series([1, 2, 3], index=_index * 3, name='swaptionVol'), actual) actual = tm.swaption_vol(mock_usd, '3m', '1y', -50) assert_series_equal( pd.Series([1, 2, 3], index=_index * 3, name='swaptionVol'), actual) with pytest.raises(NotImplementedError): tm.swaption_vol(..., '3m', '1y', 50, real_time=True) replace.restore()
def test_vol_fx(): replace = Replacer() mock = Cross('MAA0NE9QX2ABETG6', 'USD/EUR') xrefs = replace('gs_quant.timeseries.measures.GsAssetApi.get_asset_xrefs', Mock()) xrefs.return_value = [GsTemporalXRef(dt.date(2019, 1, 1), dt.date(2952, 12, 31), XRef(bbid='EURUSD', ))] replace('gs_quant.markets.securities.SecurityMaster.get_asset', mock) # for different delta strikes replace('gs_quant.timeseries.measures.GsDataApi.get_market_data', mock_fx) actual = tm.implied_volatility(mock, '1m', tm.VolReference.DELTA_CALL, 25) assert_series_equal(pd.Series([5, 1, 2], index=_index * 3, name='impliedVolatility'), actual) actual = tm.implied_volatility(mock, '1m', tm.VolReference.DELTA_PUT, 25) assert_series_equal(pd.Series([5, 1, 2], index=_index * 3, name='impliedVolatility'), actual) actual = tm.implied_volatility(mock, '1m', tm.VolReference.DELTA_NEUTRAL) assert_series_equal(pd.Series([5, 1, 2], index=_index * 3, name='impliedVolatility'), actual) actual = tm.implied_volatility(mock, '1m', tm.VolReference.FORWARD, 100) assert_series_equal(pd.Series([5, 1, 2], index=_index * 3, name='impliedVolatility'), actual) actual = tm.implied_volatility(mock, '1m', tm.VolReference.SPOT, 100) assert_series_equal(pd.Series([5, 1, 2], index=_index * 3, name='impliedVolatility'), actual) # NORMALIZED not supported with pytest.raises(MqError): tm.implied_volatility(mock, '1m', tm.VolReference.DELTA_CALL) with pytest.raises(MqError): tm.implied_volatility(mock, '1m', tm.VolReference.NORMALIZED, 25) with pytest.raises(MqError): tm.implied_volatility(mock, '1m', tm.VolReference.SPOT, 25) with pytest.raises(MqError): tm.implied_volatility(mock, '1m', tm.VolReference.FORWARD, 25) replace.restore()
def query_data(cls, query: Union[DataQuery, MDAPIDataQuery], dataset_id: str = None, asset_id_type: Union[GsIdType, str] = None) \ -> Union[MDAPIDataBatchResponse, DataQueryResponse, tuple]: if isinstance(query, MDAPIDataQuery) and query.market_data_coordinates: # Don't use MDAPIDataBatchResponse for now - it doesn't handle quoting style correctly results: Union[MDAPIDataBatchResponse, dict] = GsSession.current._post( '/data/coordinates/query', payload=query) if isinstance(results, dict): return results.get('responses', ()) else: return results.responses if results.responses is not None else () elif isinstance(query, DataQuery) and query.where: where = query.where.as_dict() if isinstance(query.where, FieldFilterMap) else query.where xref_keys = set(where.keys()).intersection(XRef.properties()) if xref_keys: # Check that assetId is a symbol dimension of this data set. If not, we need to do a separate query # to resolve xref pip install dtaidistance--> assetId if len(xref_keys) > 1: raise MqValueError('Cannot not specify more than one type of asset identifier') definition = cls.get_definition(dataset_id) sd = definition.dimensions.symbolDimensions if definition.parameters.symbolStrategy == 'MDAPI' or ('assetId' not in sd and 'gsid' not in sd): xref_type = min(xref_keys) if asset_id_type is None: asset_id_type = xref_type xref_values = where[asset_id_type] xref_values = (xref_values,) if isinstance(xref_values, str) else xref_values asset_id_map = GsAssetApi.map_identifiers(xref_type, GsIdType.id, xref_values) if len(asset_id_map) != len(xref_values): raise MqValueError('Not all {} were resolved to asset Ids'.format(asset_id_type)) setattr(query.where, xref_type, None) query.where.assetId = [asset_id_map[x] for x in xref_values] results: Union[DataQueryResponse, dict] = GsSession.current._post('/data/{}/query'.format(dataset_id), payload=query) if isinstance(results, dict): results = results.get('data', ()) else: results = results.data if results.data is not None else () if asset_id_type not in {GsIdType.id, None}: asset_ids = tuple(set(filter(None, (r.get('assetId') for r in results)))) if asset_ids: xref_map = GsAssetApi.map_identifiers(GsIdType.id, asset_id_type, asset_ids) if len(xref_map) != len(asset_ids): raise MqValueError('Not all asset Ids were resolved to {}'.format(asset_id_type)) for result in results: result[asset_id_type] = xref_map[result['assetId']] return results
def test_skew_fx(): replace = Replacer() mock = Cross('MAA0NE9QX2ABETG6', 'USD/EUR') xrefs = replace('gs_quant.timeseries.measures.GsAssetApi.get_asset_xrefs', Mock()) xrefs.return_value = [GsTemporalXRef(dt.date(2019, 1, 1), dt.date(2952, 12, 31), XRef(bbid='EURUSD', ))] replace('gs_quant.markets.securities.SecurityMaster.get_asset', mock) replace('gs_quant.timeseries.measures.GsDataApi.get_market_data', mock_fx) actual = tm.skew(Cross('MAA0NE9QX2ABETG6', 'USD/EUR'), '1m', None, 25) assert_series_equal(pd.Series([2.0], index=_index, name='impliedVolatility'), actual) replace.restore()
def test_basis(): replace = Replacer() mock_jpyusd = Cross('MA890', 'USD/JPY') xrefs = replace('gs_quant.timeseries.measures.GsAssetApi.get_asset_xrefs', Mock()) xrefs.return_value = [GsTemporalXRef(dt.date(2019, 1, 1), dt.date(2952, 12, 31), XRef(bbid='JPYUSD', ))] identifiers = replace('gs_quant.timeseries.measures.GsAssetApi.map_identifiers', Mock()) identifiers.return_value = {'USD-3m/JPY-3m': 'MA123'} replace('gs_quant.timeseries.measures.GsDataApi.get_market_data', mock_cross) actual = tm.basis(mock_jpyusd, '1y') assert_series_equal(pd.Series([1, 2, 3], index=_index * 3, name='basis'), actual) with pytest.raises(NotImplementedError): tm.basis(..., '1y', real_time=True) replace.restore()
def test_zc_inflation_swap_rate(): replace = Replacer() mock_gbp = Currency('MA890', 'GBP') xrefs = replace('gs_quant.timeseries.measures.GsAssetApi.get_asset_xrefs', Mock()) xrefs.return_value = [GsTemporalXRef(dt.date(2019, 1, 1), dt.date(2952, 12, 31), XRef(bbid='GBP', ))] identifiers = replace('gs_quant.timeseries.measures.GsAssetApi.map_identifiers', Mock()) identifiers.return_value = {'CPI-UKRPI': 'MA123'} replace('gs_quant.timeseries.measures.GsDataApi.get_market_data', mock_curr) actual = tm.zc_inflation_swap_rate(mock_gbp, '1y') assert_series_equal(pd.Series([1, 2, 3], index=_index * 3, name='inflationSwapRate'), actual) with pytest.raises(NotImplementedError): tm.zc_inflation_swap_rate(..., '1y', real_time=True) replace.restore()
def test_vol_forecast(): replace = Replacer() mock = Cross('MAA0NE9QX2ABETG6', 'USD/EUR') xrefs = replace('gs_quant.timeseries.measures.GsAssetApi.get_asset_xrefs', Mock()) xrefs.return_value = [GsTemporalXRef(dt.date(2019, 1, 1), dt.date(2952, 12, 31), XRef(bbid='EURUSD', ))] replace('gs_quant.markets.securities.SecurityMaster.get_asset', mock) replace('gs_quant.timeseries.measures.GsDataApi.get_market_data', mock_fx) actual = tm.forecast(mock, '1y') assert_series_equal(pd.Series([1.1, 1.1, 1.1], index=_index * 3, name='forecast'), actual) actual = tm.forecast(mock, '3m') assert_series_equal(pd.Series([1.1, 1.1, 1.1], index=_index * 3, name='forecast'), actual) with pytest.raises(NotImplementedError): tm.forecast(mock, '1y', real_time=True) replace.restore()
# Helper mock value constants asset_1 = {'name': 'asset 1', 'id': 'id1', 'bbid': 'bbid1'} asset_2 = {'name': 'asset 2', 'id': 'id2', 'bbid': 'bbid2'} assets_data = [asset_1, asset_2] base_user = { 'name': 'First Last', 'email': '*****@*****.**', 'company': 'Company A' } cb_response = CustomBasketsResponse('done', 'R1234567890', 'MA1234567890') gs_asset = GsAsset(asset_class=AssetClass.Equity, type_=AssetType.Custom_Basket, name='Test Basket', id_='MA1234567890', entitlements=TargetEntitlements(admin=['guid:user_abc']), xref=XRef(ticker='GSMBXXXX')) initial_price = {'price': 100} mqid = 'MA1234567890' name = 'Test Basket' positions = [ Position('bbid1', asset_id='id1', quantity=100), Position('bbid2', asset_id='id2', quantity=200) ] positions_weighted = positions = [ Position('bbid1', asset_id='id1', weight=0.4), Position('bbid2', asset_id='id2', weight=0.6) ] position_set = PositionSet(positions, divisor=1000) report = Report(mqid, 'asset', 'Basket Create',