diff options
Diffstat (limited to 'python/mark_backtest_underpar.py')
| -rw-r--r-- | python/mark_backtest_underpar.py | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/python/mark_backtest_underpar.py b/python/mark_backtest_underpar.py index a125f15a..da65b5df 100644 --- a/python/mark_backtest_underpar.py +++ b/python/mark_backtest_underpar.py @@ -7,7 +7,7 @@ import statsmodels.api as sm from statsmodels.formula.api import gls import seaborn as sb -def calc_mark_diff(asset_class = 'Subprime'): +def get_mark_df(asset_class = 'Subprime'): #Filter marks > 1000 where the marks are weird... df_external_marks = pd.read_sql_query("select * from external_marks_mapped where mark < 1000" , dbengine('dawndb')) @@ -19,9 +19,10 @@ def calc_mark_diff(asset_class = 'Subprime'): df_temp['date'] = date df_trades = df_trades.append(df_temp) df = df_trades.merge(df_external_marks).dropna() - df = df.set_index(['date','identifier']) + return df.set_index(['date','identifier']) - #All Sources - average, manager mark only, median, closest +def calc_mark_diff(df): + #All Sources (including manager...?!) - average, manager mark only, median, closest g = df.groupby(level = ['date','identifier']) avg_mark = g.mean() avg_mark = avg_mark.join(df[df.source == 'MANAGER']['mark'], rsuffix = '_manager') @@ -40,7 +41,8 @@ def calc_mark_diff(asset_class = 'Subprime'): avg_mark = avg_mark.join(temp) #Filtered Sources - choose PRICESERVE,PRICINGDIRECT,MARKIT,BVAL - sources = ['PRICESERVE', 'PRICINGDIRECT','BVAL','MARKIT','BROKER'] + #Filtered Sources - now really it is everything + sources = ['PRICESERVE', 'PRICINGDIRECT','BVAL','MARKIT','BROKER', 'REUTERS', 'S&P', 'PB', 'IDC'] df_filtered = df[df.source.isin(sources)] g1 = df_filtered.groupby(level = ['date','identifier']) @@ -61,10 +63,25 @@ def calc_mark_diff(asset_class = 'Subprime'): avg_mark1 = avg_mark.multiply(avg_mark.curr_ntl/100, axis = 'index') del avg_mark1['curr_ntl'] diff = avg_mark1.apply(lambda x: (x-x.mark_manager), axis = 1) + + #diff = difference to copy to performance number sheet diff = diff.groupby(level = 'date').sum() - diff.to_clipboard() + #count of each source + g2 = df.set_index('source', append=True).groupby(level = ['date','source']) + count = g2['mark'].count().unstack(-1) + + #diff_by_source: now calculate the pricing by source + dftemp = df.drop('description', 1) + dftemp = dftemp.set_index(['source'], append=True).apply(lambda x: x.curr_ntl * x.mark/100, axis = 1) + dftemp = dftemp.groupby(level =['date','identifier','source']).mean() + dftemp = dftemp.unstack(-1).apply(lambda x: (x-x.MANAGER), axis = 1) + diff_by_source = dftemp.groupby(level = 'date').sum() + + #Diff by MV per source. + diff_by_month = dftemp.groupby(level = 1).diff() + return(diff, diff_by_source, count) def back_test(): @@ -118,6 +135,7 @@ def back_test(): df_long = df_long[df_long.identifier.str.len() == 9] df_long = df_long[df_long.price < sell_price_threshold] df_long = df_long[(df_long['trade_date'] > begindate) & (df_long['trade_date'] < enddate)] + df_long.loc[df_long.source == 'MANAGER','source'] = 'LMCG' #pretty plot #df_long['dotsize'] = df_long['level_0'].apply(lambda x: 400 if x == 'MANAGER' else 20) @@ -127,18 +145,19 @@ def back_test(): sb.set_context("notebook") #plt.switch_backend('Qt4Agg') - order = ['MANAGER','BROKER','BVAL','IDC','MARKIT','PB','PRICESERVE','PRICINGDIRECT','REUTERS','S&P'] + order = ['LMCG','BROKER','BVAL','IDC','MARKIT','PB','PRICESERVE','PRICINGDIRECT','REUTERS','S&P'] sb.set_palette(sb.hls_palette(10, l=.4, s=.8)) g_sell = sb.FacetGrid(df_long[df_long.dir == 'sell'], hue='source', hue_kws={'s':[50] + [20]*9, 'marker': ["o"]+["s"]*9, 'alpha': [1]+[.4]*9}, legend_out=True, aspect = 2.1, size = 4, hue_order = order) g_sell.set(ylim=(0, 105), xlim=(0, 105)) ax_sell = g_sell.map(plt.scatter, 'mark', 'price').add_legend() + ax_sell.set_axis_labels('Mark','Sale Price') + ax_sell.fig.savefig("/home/serenitas/edwin/backtest_sales.png") g_buy = sb.FacetGrid(df_long[df_long.dir == 'buy'], hue='source', hue_kws={'s':[50] + [20]*9, 'marker': ["o"]+["s"]*9, 'alpha': [1]+[.4]*9}, legend_out=True, aspect = 2.1, size = 4, hue_order = order) g_buy.set(ylim=(0, 105), xlim=(0, 105)) ax_buy = g_buy.map(plt.scatter, 'mark', 'price').add_legend() - ax_sell.fig.savefig("/home/serenitas/edwin/backtest_sales.png") ax_buy.fig.savefig("/home/serenitas/edwin/backtest_buys.png") params = {} |
