aboutsummaryrefslogtreecommitdiffstats
path: root/python/exploration
diff options
context:
space:
mode:
Diffstat (limited to 'python/exploration')
-rw-r--r--python/exploration/curve_trades.py41
1 files changed, 18 insertions, 23 deletions
diff --git a/python/exploration/curve_trades.py b/python/exploration/curve_trades.py
index ce134b6f..3dd5043f 100644
--- a/python/exploration/curve_trades.py
+++ b/python/exploration/curve_trades.py
@@ -20,13 +20,10 @@ def curve_spread_diff(index='IG', rolling=6):
df = get_index_quotes(index, list(range(otr - rolling, otr + 1)),
tenor=['3yr', '5yr', '7yr', '10yr'])
spreads = df.groupby(level=['date', 'tenor']).nth(-1)['closespread'].unstack(-1)
- # remove 'yr'
- spreads.columns = [int(col[:-2]) for col in spreads.columns]
- spreads = spreads.sort_index(1)
spreads_diff = spreads.diff(axis=1)
- spreads_diff = spreads_diff.filter([5, 7, 10])
- spreads_diff['5-10'] = spreads_diff[7] + spreads_diff[10]
- spreads_diff.columns = ['3-5', '5-7', '7-10', '5-10']
+ del spreads_diff['3yr']
+ spreads_diff.columns = ['3-5', '5-7', '7-10']
+ spreads_diff['5-10'] = spreads_diff['5-7'] + spreads_diff['7-10']
return spreads_diff
def spreads_diff_table(spreads_diff):
@@ -63,16 +60,15 @@ def curve_3_5_10(df):
----------
df: duration ratio within series"""
#buy 3y, sell 5y, buy 10y
- df['3_5_10'] = - df.theta2['3yr'] / df.duration_ratio_to_5yr['3yr'] \
- + 2 * df.theta2['5yr'] \
- - df.theta2['10yr'] / df.duration_ratio_to_5yr['10yr']
- df1['3_5_10'].dropna().unstack(-1).plot()
+ s = - df.theta2['3yr'] / df.duration_ratio_to_5yr['3yr'] \
+ + 2 * df.theta2['5yr'] \
+ - df.theta2['10yr'] / df.duration_ratio_to_5yr['10yr']
+ s.dropna().unstack(-1).plot()
def curve_5_10(df):
#buy sell 5y, buy 10y
- df1 = pd.DataFrame()
- df1['5_10'] = df.theta2['5yr'] - df.theta2['10yr'] / df.duration_ratio_to_5yr['10yr']
- df1['5_10'].dropna().unstack(-1).plot()
+ s = df.theta2['5yr'] - df.theta2['10yr'] / df.duration_ratio_to_5yr['10yr']
+ s.dropna().unstack(-1).plot()
def on_the_run_theta(index='IG', rolling=6):
otr = on_the_run(index)
@@ -156,20 +152,20 @@ def curve_model(tenor_1='5yr', tenor_2='10yr'):
#OLS model
df = ratio_within_series(param='closespread')
df = df.groupby(level='date').last()
- df = pd.concat([df.duration[tenor_1],df.closespread[tenor_1], df.closespread_ratio_to_5yr[tenor_2]], axis = 1, keys=['duration', 'closespread', 'ratio'])
+ df = pd.concat([df.duration[tenor_1], df.closespread[tenor_1],
+ df.closespread_ratio_to_5yr[tenor_2]], axis=1,
+ keys=['duration', 'closespread', 'ratio'])
ols_model = smf.ols('np.log(ratio) ~ np.log(duration) + np.log(closespread)', data=df).fit()
df['predicted'] = np.exp(results.predict())
return df, ols_model
def curve_model_results(df, model):
-
prstd_ols, df['down_2_stdev'], df['up_2_stdev'] = wls_prediction_std(model)
#dr/dspread = exp(k) + spread_coeff * duration ^ dur_coeff * spread ^ (spread_coeff-1)
df['down_2_stdev'] = np.exp(df['down_2_stdev'])
df['up_2_stdev'] = np.exp(df['up_2_stdev'])
df['predicted'] = np.exp(model.predict())
- df['dr_dspread'] = np.exp(model.params[0]) * model.params[2] * df.duration ** model.params[1] * df.closespread ** (model.params[2] -1)
-
+ df['dr_dspread'] = np.exp(model.params[0]) * model.params[2] * df.duration ** model.params[1] * df.closespread ** (model.params[2] - 1)
return df
def curve_var():
@@ -190,15 +186,14 @@ def curve_var():
def spread_fin_crisis(index='IG'):
on_the_run = on_the_run(index)
## look at spreads
- df = get_index_quotes(index, list(range(8,on_the_run+1)), tenor=['3yr', '5yr', '7yr', '10yr'], years = 20)
+ df = get_index_quotes(index, list(range(8, on_the_run + 1)),
+ tenor=['3yr', '5yr', '7yr', '10yr'], years=20)
spreads = df.groupby(level=['date', 'tenor']).nth(-1)['closespread'].unstack(-1)
- spreads.columns = [int(col[:-2]) for col in spreads.columns]
- spreads = spreads.sort_index(1)
spreads_diff = spreads.diff(axis=1)
to_plot = pd.DataFrame()
- to_plot['spread'] = spreads[5]
- to_plot['3 - 5 diff'] = spreads_diff[5]
- to_plot['5 - 10 diff'] = spreads_diff[7] + spreads_diff[10]
+ to_plot['spread'] = spreads['5yr']
+ to_plot['3 - 5 diff'] = spreads_diff['5yr']
+ to_plot['5 - 10 diff'] = spreads_diff['7yr'] + spreads_diff['10yr']
fig = plt.figure()
ax = fig.add_subplot(111)