aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/mark_backtest_underpar.py33
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 = {}