diff options
Diffstat (limited to 'python/option_trades.py')
| -rw-r--r-- | python/option_trades.py | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/python/option_trades.py b/python/option_trades.py index 0b1c76dd..b05c1833 100644 --- a/python/option_trades.py +++ b/python/option_trades.py @@ -39,19 +39,39 @@ def daily_spreads(index, series, tenor): return df.spread.pct_change().dropna() def index_returns(date=None, years=3, index="IG", tenor="5yr"): - """computes on the run returns""" + """computes on the run spread returns""" if date is None: date = (pd.Timestamp.now() - pd.DateOffset(years=years)).date() - sql_str = "SELECT date, series, closespread AS spread FROM index_quotes " \ + sql_str = "SELECT date, series, version, closespread AS spread FROM index_quotes " \ "WHERE index=%s and date>=%s and tenor = %s" - df = pd.read_sql_query(sql_str, serenitasdb, parse_dates=['date'], index_col=['date', 'series'], + df = pd.read_sql_query(sql_str, serenitasdb, parse_dates=['date'], + index_col=['date', 'series', 'version'], params=(index.upper(), date, tenor)) df.sort_index(inplace=True) - return (df.groupby(level='series'). + return (df.groupby(level=['series', 'version']). transform(lambda x: x.pct_change()). groupby(level='date'). last()) + +def index_price_returns(date=None, years=3, index="IG", tenor="5yr"): + """computes on the run price returns taking coupons into account""" + if date is None: + date = (pd.Timestamp.now() - pd.DateOffset(years=years)).date() + sql_str = "SELECT date, series, version, closeprice AS price FROM index_quotes " \ + "WHERE index=%s and date>=%s and tenor = %s" + df = pd.read_sql_query(sql_str, serenitasdb, parse_dates=['date'], + index_col=['date', 'series', 'version'], + params=(index.upper(), date, tenor)) + df.sort_index(inplace=True) + def returns(df, coupon=1): + df['returns'] = df.price.pct_change() + \ + coupon * df.index.levels[0].to_series().diff().dt.days/360/df.price + return df + return (df.groupby(level=['series', 'version']). + apply(returns, (1 if index=='IG' else 5,)). + groupby(level='date')['returns'].last()) + def realized_vol(index, series, tenor, date=None, years=None): """computes the realized spread volatility""" if date is None: |
