aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/exploration/option_trades.py21
1 files changed, 9 insertions, 12 deletions
diff --git a/python/exploration/option_trades.py b/python/exploration/option_trades.py
index bfa0171e..3e19d185 100644
--- a/python/exploration/option_trades.py
+++ b/python/exploration/option_trades.py
@@ -6,23 +6,20 @@ import pandas as pd
from pandas.tseries.offsets import BDay
from arch import arch_model
-from db import dbengine, dbconn
+from utils.db import dbengine, dbconn
from scipy.interpolate import interp1d
-from analytics import Index, ForwardIndex
+from analytics import CreditIndex, ForwardIndex
from analytics.index_data import index_returns
serenitasdb = dbengine('serenitasdb')
-def realized_vol(index, series, tenor='5yr', date=None, years=None, return_type='spread'):
+def realized_vol(index, series=None, tenor='5yr', from_date=None, years=3, return_type='spread'):
"""computes the realized spread volatility"""
- if date is None:
- if years is None:
- raise ValueError("need to provide at least one of date or years")
- date = (pd.Timestamp.now() - pd.DateOffset(years=years)).date()
- returns = index_returns(index=index, series=series, tenor=tenor, years=None).dropna()
+ returns = index_returns(None, index, series, tenor, from_date, years)
+ returns = returns.groupby(level='date').nth(-1).dropna()
# GARCH(1,1) volatility process with constant mean, scale to help with fitting
scale = 10
- am = arch_model(scale * returns[return_type+'_return'])
+ am = arch_model(scale * returns[f"{return_type}_return"])
res = am.fit(update_freq=0, disp='off')
return (res.conditional_volatility * math.sqrt(252)/scale, res)
@@ -44,10 +41,10 @@ def atm_vol_calc(df, index_type, moneyness):
i = 0
index_keys = []
for s, g1 in df.groupby(level='series'):
- index = Index.from_name(index_type, s, '5yr')
+ index = CreditIndex(index_type, s, '5yr')
for date, g2 in g1.groupby(pd.Grouper(level='quotedate', freq='D')):
if not g2.empty:
- index.trade_date = date.date()
+ index.value_date = date.date()
for (ref, expiry), g3 in g2.reset_index('expiry').groupby(['ref', 'expiry']):
index.ref = ref
atm_val = forward_spread = ForwardIndex(index, expiry, False).forward_spread
@@ -79,7 +76,7 @@ def atm_vol(index, date, series=None, moneyness=0.2):
extra_filter = ' AND series=%s'
params = params + (series,)
sql_str = "SELECT * from swaption_ref_quotes JOIN swaption_quotes " \
- "USING (quotedate, index, series, expiry) WHERE index=%s " \
+ "USING (ref_id) WHERE index=%s " \
f"and quotedate>=%s {extra_filter} ORDER BY quotedate ASC"
df = pd.read_sql_query(sql_str, serenitasdb, params=params)