aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/option_trades.py28
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: