diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/exploration/curve_trades.py | 41 |
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) |
