Welcome to the GS Quant Index tutorial! This tutorial will walk you through using the Index class functionality in GS Quant with a focus on STS Indices.
Marquee Systematic Trading Strategy (STS) offering provides a variety of information for STS Indices including prices, compositions and PnL attribution. GS Quant makes accessing this data via API intuitive and fast.
In this tutorial, you will fetch an STS Index and learn how to:
Please ensure that you have followed the setup instructions for GS Quant mentioned here.
To use below functionality on STS Indices, your application needs to have access to the following datasets:
You can request access by going to the Dataset Catalog Page linked above.
Note - If you're using GS Quant as an internal user, you need to raise the above for yourself.
First you will import the necessary modules and add your client id and client secret. To checke your app's authentication, follow our Getting Started guide.
from gs_quant.markets.index import Index
from gs_quant.markets.indices_utils import *
from gs_quant.data.fields import DataMeasure
from gs_quant.session import Environment, GsSession
import datetime as dt
# external users should substitute their client id and secret; please skip this step if using internal jupyterhub
GsSession.use(Environment.PROD, client_id=None, client_secret=None, scopes=('read_product_data',))
Next you will fetch the index you'd like to work with, by passing in any of its identifiers such as Bloomberg Id, Ticker, etc. In this tutorial, we're using some sample STS indices:
To access any STS Index, your app should have access to view that index. Please note that apps do not automatically inherit the access of their owners. This means that your apps need to be separately granted access to the required STS Indices.
To request access to the above samples, please send an email to our team mentioning your app's id.
If you app already has access to some other STS indices, you can use them as well. Just replace the ticker below with the ticker of your index.
ma_index = Index.get('GSMBMA5S') # Substitute input with the identifier for an Index
sstk_index = Index.get('GSISM37E')
# Retrieves the url of the product page of the index on Marquee
ma_index.get_url()
start_date = dt.date(2022, 3, 1)
end_date = dt.date(2022, 4, 1)
In general, all Indices support official close prices but for STS Indices, official and indicatvive strategy values are supported.
The strategy values of an STS Index can be obtained by using the get_close_prices
function. You may choose one of the following price types:
Official Strategy Values: PriceType.OFFICIAL_PRICE
Indicative Strategy Values: PriceType.INDICATIVE_CLOSE_PRICE - Currently available for STS indices only.
# Returns strategy values between start and end date. When no price_type is passed, it defaults to official strategy values
ma_index.get_close_prices(start=start_date,
end=end_date)
# Returns official strategy values between start and end date
sstk_index.get_close_prices(start=start_date,
end=end_date,
price_type=[PriceType.OFFICIAL_CLOSE_PRICE])
# Returns indicative strategy values between start and end date
ma_index.get_close_prices(start=start_date,
end=end_date,
price_type=[PriceType.INDICATIVE_CLOSE_PRICE])
# Returns official and indicative strategy values between start and end date for the STS index
ma_index.get_close_prices(start=start_date,
end=end_date,
price_type=[PriceType.OFFICIAL_CLOSE_PRICE, PriceType.INDICATIVE_CLOSE_PRICE])
The composition of an STS Index can be understood as a tree structure - the index is the topmost node, and it has some child nodes. These child nodes can either be bottom level assets or have child nodes of their own. The intermediate child nodes (i.e. those which have their own children) are called underliers. While the bottom level assets are called constituents.
The constituents of an Index are the bottom level assets. Fetch the constituents of the index using the get_constituents
method.
You can also get convert the constituents of an index into Instrument objects.
# Returns constituents of the index as a pandas DataFrame object
sstk_index.get_constituents_for_date(date=start_date)
# Returns constituents of the index as a list of instrument class objects
sstk_instruments = sstk_index.get_constituent_instruments_for_date(date=start_date)
You can fetch the underlier tree of an index using the get_underlier_tree
method. This method returns the composition tree alongwith the weights and attributions of the nodes.
# Returns the top node of the tree structure formed by the index
ma_index.get_underlier_tree()
# Returns the tree structure formed by the index as a pandas dataframe
ma_index.get_underlier_tree().to_frame()
We proVisualisation functions require installing the treelib
package, so let's go ahead and install it.
Note: This is part of GS Quant's notebook
dependencies. You can run pip install gs-quant[notebook]
to install all of them.
!pip install treelib
# Prints the tree structure formed by the Index for easy visualisation
ma_index.visualise_tree(visualise_by='name')
# If data is missing for any field, then assetId will be used instead
ma_index.visualise_tree(visualise_by='bbid')
ma_index.visualise_tree(visualise_by='id')
The underliers of an Index are the intermediate nodes in the composition tree.
You can fetch the weights and attribution of the underliers one level down using get_underlier_weights
and get_underlier_attribution
methods.
# Returns immediate underlier weights (one level down) as a pandas dataframe
ma_index.get_underlier_weights()
# Returns immediate underlier attribution (one level down) as a pandas dataframe
ma_index.get_underlier_attribution()
Single Stock STS Indices offer Fundamental Metrics data via API, which can be obtained using the get_fundamentals
function.
You may choose one of the following periods:
You may choose one of the following period directions:
You may choose any combination of the following metrics:
# Returns fundamentals data between start and end date for the STS index
sstk_index.get_fundamentals(start=start_date, end=end_date)
# Returns fundamentals data between start and end date for the STS index for one year period with trailing direction and Price to Cash metric
sstk_index.get_fundamentals(start=start_date,
end=end_date,
period=DataMeasure.ONE_YEAR,
direction=DataMeasure.TRAILING,
metrics=[DataMeasure.PRICE_TO_CASH, DataMeasure.SALES_PER_SHARE])
Have any other questions? Reach out to the Marquee STS team!