aboutsummaryrefslogtreecommitdiffstats
path: root/python/exploration
diff options
context:
space:
mode:
Diffstat (limited to 'python/exploration')
-rw-r--r--python/exploration/VaR.py49
1 files changed, 28 insertions, 21 deletions
diff --git a/python/exploration/VaR.py b/python/exploration/VaR.py
index 50d637f7..f79b81af 100644
--- a/python/exploration/VaR.py
+++ b/python/exploration/VaR.py
@@ -6,33 +6,40 @@ import pandas as pd
import math
import datetime
-dawndb = dbengine('dawndb')
-serenitasdb = dbengine('serenitasdb')
+dawndb = dbengine("dawndb")
+serenitasdb = dbengine("serenitasdb")
-def hist_var(portf, index_type='IG', quantile=.05, years=5):
- df = index_returns(index=index_type, years=years,
- tenor=['3yr', '5yr', '7yr', '10yr'])
- df = (df.reset_index(['index'], drop=True).
- reorder_levels(['date', 'series', 'tenor']))
- returns = df.spread_return.dropna().reset_index('series')
- returns['dist_on_the_run'] = (returns.
- groupby('date')['series'].
- transform(lambda x: x.max() - x))
- del returns['series']
- returns = returns.set_index('dist_on_the_run', append=True).unstack('tenor')
+
+def hist_var(portf, index_type="IG", quantile=0.05, years=5):
+ df = index_returns(
+ index=index_type, years=years, tenor=["3yr", "5yr", "7yr", "10yr"]
+ )
+ df = df.reset_index(["index"], drop=True).reorder_levels(
+ ["date", "series", "tenor"]
+ )
+ returns = df.spread_return.dropna().reset_index("series")
+ returns["dist_on_the_run"] = returns.groupby("date")["series"].transform(
+ lambda x: x.max() - x
+ )
+ del returns["series"]
+ returns = returns.set_index("dist_on_the_run", append=True).unstack("tenor")
returns.columns = returns.columns.droplevel(0)
portf.reset_pv()
otr = on_the_run(index_type)
- spreads = pd.DataFrame({'spread': portf.spread,
- 'tenor': [ind.tenor for ind in portf.indices],
- 'dist_on_the_run': [otr - ind.series for ind in portf.indices]})
- spreads = spreads.set_index(['dist_on_the_run', 'tenor'])
+ spreads = pd.DataFrame(
+ {
+ "spread": portf.spread,
+ "tenor": [ind.tenor for ind in portf.indices],
+ "dist_on_the_run": [otr - ind.series for ind in portf.indices],
+ }
+ )
+ spreads = spreads.set_index(["dist_on_the_run", "tenor"])
r = []
- for k, g in returns.groupby(level='date', as_index=False):
- shocks = g.reset_index('date', drop=True).stack('tenor')
- shocks.name = 'shocks'
+ for k, g in returns.groupby(level="date", as_index=False):
+ shocks = g.reset_index("date", drop=True).stack("tenor")
+ shocks.name = "shocks"
portf.spread = spreads.spread * (1 + spreads.join(shocks).shocks)
r.append((k, portf.pnl))
- pnl = pd.DataFrame.from_records(r, columns=['date', 'pnl'], index=['date'])
+ pnl = pd.DataFrame.from_records(r, columns=["date", "pnl"], index=["date"])
return pnl.quantile(quantile) * math.sqrt(20)