Assign Weights/Prepare
Currently this section only applies to FRTBDataSet. In the future python
users will be able to define their own, custom prepare
functions too.
Prepare is a fixed calculation which happens with every request for scans/db DataSources. For InMemory it happens only when you call .prepare()
.
from_config()
call .prepare()
depending on source_type
.
A good usecase for that is to assign weights column to your data, as per FRTB regulation for example. Make sure you assign weights before doing any computations:
# TODO scan here to demonstrate prepare
import polars as pl
import ultibi as ul
# Note: sometimes Polars needs abit of help to determine the correct datatype for your
# columns. This is because Polars scans first N rows to determine correct dtype
exposures = pl.read_csv("./data/frtb/Delta.csv", dtypes={"SensitivitySpot": pl.Float64})
# Feel free to join other attributes such as Hierarchy here ...
ds = ul.FRTBDataSet.from_frame(exposures)
original = ds.frame() # keep the old value for comparison
ds.prepare()
prepared = ds.frame()
# Let's see what happened
def diff(df1: pl.DataFrame, df2: pl.DataFrame) -> pl.DataFrame:
"""Columns in df1 which are not in df2
Args:
df1 (pl.DataFrame): First to compare
df2 (pl.DataFrame): Second to compare
Returns:
pl.DataFrame: _description_
"""
return df1.select([c for c in df1 if c.name not in df2])
diff_frame = diff(prepared, original)
print(diff_frame.columns)
You will get an error if you try to assign twice. Now, let's see what happened. We will need a little helper function:
At the time of writing this returns 6 new columns(names of the columns might change slightly but the meaning will always be the same):
Column Name | Explanation |
---|---|
SensWeights | List of weights, one for each tenor. Eg [1,1,1,1,1] for any Vega risk. |
CurvatureRiskWeight | Simply max of SensWeights if PnL Up or Down was provided, otherwise NULL. This is how we identify Curvature eligible trades. |
SensWeightsCRR2 | Same as SensWeights but under CRR2 rules. |
CurvatureRiskWeightCRR2 | Same logic as BCBS |
ScaleFactor | DRC scailing: yearfrac between COB and MaturityDate |
SeniorityRank | Mapping used internaly for DRC offsetting |