aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/option_trades.py31
1 files changed, 30 insertions, 1 deletions
diff --git a/python/option_trades.py b/python/option_trades.py
index c3f9cb77..7aae31ba 100644
--- a/python/option_trades.py
+++ b/python/option_trades.py
@@ -9,7 +9,7 @@ from arch import arch_model
from db import dbengine, dbconn
from scipy.interpolate import interp1d
from analytics import Index
-
+from dates import bond_cal
serenitasdb = dbengine('serenitasdb')
def get_daily_pnl(index, series, tenor, coupon=1):
@@ -38,6 +38,29 @@ def daily_spreads(index, series, tenor):
df.sort_index(inplace=True)
return df.spread.pct_change().dropna()
+def insert_quotes():
+ # backpopulate some version i+1 quotes one day before they start trading so that
+ # we get continuous time series in the returns
+ dates = pd.DatetimeIndex(['2014-05-21', '2015-02-19', '2015-03-05','2015-06-23'])
+ df = pd.read_sql_query("SELECT DISTINCT ON (date) * FROM index_quotes " \
+ "WHERE index='HY' AND tenor='5yr' " \
+ "ORDER BY date, series DESC, version DESC",
+ serenitasdb, parse_dates=['date'], index_col=['date'])
+ df = df.loc[dates]
+ for tup in df.itertuples():
+ result = serenitasdb.execute("SELECT indexfactor, cumulativeloss FROM index_version " \
+ "WHERE index = 'HY' AND series=%s AND version in (%s, %s)" \
+ "ORDER BY version",
+ (tup.series, tup.version, tup.version+1))
+ factor1, cumloss1 = result.fetchone()
+ factor2, cumloss2 = result.fetchone()
+ recovery = 1-(cumloss2-cumloss1)
+ version2_price = (factor1 * tup.closeprice - 100*recovery)/factor2
+ print(version2_price)
+ serenitasdb.execute("INSERT INTO index_quotes(date, index, series, version, tenor, closeprice)" \
+ "VALUES(%s, %s, %s, %s, %s, %s)",
+ (tup.Index, 'HY', tup.series, tup.version+1, tup.tenor, version2_price))
+
def index_returns(date=None, years=3, index="IG", tenor="5yr"):
"""computes on the run spread returns"""
if date is None:
@@ -50,6 +73,7 @@ def index_returns(date=None, years=3, index="IG", tenor="5yr"):
df.sort_index(inplace=True)
return (df.groupby(level=['series', 'version']).
transform(lambda x: x.pct_change()).
+ dropna().
groupby(level='date').
last())
@@ -64,6 +88,11 @@ def index_price_returns(date=None, years=3, index="IG", tenor="5yr"):
index_col=['date', 'series', 'version'],
params=(index.upper(), date, tenor))
df.sort_index(inplace=True)
+ ## get rid of holidays
+ dates = df.index.levels[0]
+ holidays = bond_cal().holidays(start=dates[0], end=dates[-1])
+ df = df.loc(axis=0)[dates.difference(holidays),:,:]
+
def returns(df, coupon=1):
df['returns'] = df.price.pct_change() + \
coupon * df.index.levels[0].to_series().diff().dt.days/360/df.price