def generate_futures_butterfly_formatted_output(**kwargs): if 'report_date' in kwargs.keys(): report_date = kwargs['report_date'] else: report_date = exp.doubledate_shift_bus_days() output_dir = ts.create_strategy_output_dir( strategy_class='futures_butterfly', report_date=report_date) butterfly_output = fb.generate_futures_butterfly_sheet_4date( date_to=report_date) butterflies = butterfly_output['butterflies'] filter_out = ff.get_futures_butterfly_filters( data_frame_input=butterflies, filter_list=['long7', 'short7']) good_butterflies = filter_out['selected_frame'] good_butterflies = good_butterflies[ (good_butterflies['second_spread_weight_1'] <= 2.5) & (good_butterflies['second_spread_weight_1'] >= 0.4)] butterflies_w_selected_columns = butterflies[[ 'ticker1', 'ticker2', 'ticker3', 'tickerHead', 'trDte1', 'trDte2', 'trDte3', 'Q', 'QF', 'z1', 'z2', 'z3', 'z4', 'theo_pnl', 'r1', 'r2', 'bf_price', 'RC', 'seasonality', 'second_spread_weight_1', 'upside', 'downside', 'recent_vol_ratio', 'recent_5day_pnl', 'bf_sell_limit', 'bf_buy_limit' ]] good_butterflies_w_selected_columns = good_butterflies[[ 'ticker1', 'ticker2', 'ticker3', 'tickerHead', 'trDte1', 'trDte2', 'trDte3', 'Q', 'QF', 'z1', 'z2', 'z3', 'z4', 'theo_pnl', 'r1', 'r2', 'bf_price', 'RC', 'seasonality', 'second_spread_weight_1', 'upside', 'downside', 'recent_vol_ratio', 'recent_5day_pnl', 'bf_sell_limit', 'bf_buy_limit' ]] writer = pd.ExcelWriter( output_dir + '/' + futil.xls_file_names['futures_butterfly'] + '.xlsx', engine='xlsxwriter') butterflies_w_selected_columns.to_excel(writer, sheet_name='all') good_butterflies_w_selected_columns.to_excel(writer, sheet_name='good') worksheet_good = writer.sheets['good'] worksheet_all = writer.sheets['all'] worksheet_good.freeze_panes(1, 0) worksheet_all.freeze_panes(1, 0) worksheet_good.autofilter(0, 0, len(good_butterflies_w_selected_columns.index), len(good_butterflies_w_selected_columns.columns)) worksheet_all.autofilter(0, 0, len(butterflies_w_selected_columns.index), len(butterflies_w_selected_columns.columns)) writer.save()
def construct_futures_butterfly_portfolio(**kwargs): rule_no = kwargs['rule_no'] backtest_output = kwargs['backtest_output'] pnl_field = kwargs['pnl_field'] if rule_no in [1, 3, 4, 5, 6, 7, 8, 9]: stop_loss = -100000000000 elif rule_no == 2: stop_loss = -1000 backtest_results_folder = dn.get_directory_name(ext='backtest_results') if os.path.isfile(backtest_results_folder + '/futures_butterfly/portfolio' + str(rule_no) + '.pkl'): return pd.read_pickle(backtest_results_folder + '/futures_butterfly/portfolio' + str(rule_no) + '.pkl') elif not os.path.exists(backtest_results_folder + '/futures_butterfly'): os.makedirs(backtest_results_folder + '/futures_butterfly') date_list = kwargs['date_list'] ticker_head_list = cmi.futures_butterfly_strategy_tickerhead_list total_pnl_frame = pd.DataFrame({'report_date': date_list}) total_pnl_frame['portfolio'] = 0 for i in range(len(ticker_head_list)): total_pnl_frame[ticker_head_list[i]] = 0 for i in range(len(date_list)): pnl_tickerhead_frame = pd.DataFrame({'ticker_head': ticker_head_list}) pnl_tickerhead_frame['buy_mean_pnl'] = 0 pnl_tickerhead_frame['sell_mean_pnl'] = 0 pnl_tickerhead_frame['total_pnl'] = 0 daily_sheet = backtest_output[i] for j in range(len(ticker_head_list)): ticker_head_results = daily_sheet[daily_sheet['tickerHead'] == ticker_head_list[j]] filter_output_long = sf.get_futures_butterfly_filters( data_frame_input=ticker_head_results, filter_list=['long' + str(rule_no)]) filter_output_short = sf.get_futures_butterfly_filters( data_frame_input=ticker_head_results, filter_list=['short' + str(rule_no)]) selected_short_trades = ticker_head_results[ filter_output_short['selection_indx'] & (np.isfinite(ticker_head_results[pnl_field]))] selected_long_trades = ticker_head_results[ filter_output_long['selection_indx'] & (np.isfinite(ticker_head_results[pnl_field]))] if len(selected_short_trades.index) > 0: selected_short_trades.loc[selected_short_trades['hold_pnl1short'] < stop_loss, pnl_field]= \ selected_short_trades.loc[selected_short_trades['hold_pnl1short'] < stop_loss, 'hold_pnl2short'] pnl_tickerhead_frame['sell_mean_pnl'][ j] = selected_short_trades[pnl_field].mean() if len(selected_long_trades.index) > 0: selected_long_trades.loc[selected_long_trades['hold_pnl1long'] <stop_loss, pnl_field] = \ selected_long_trades.loc[selected_long_trades['hold_pnl1long'] <stop_loss, 'hold_pnl2long'] pnl_tickerhead_frame['buy_mean_pnl'][j] = selected_long_trades[ pnl_field].mean() pnl_tickerhead_frame['total_pnl'][j] = pnl_tickerhead_frame[ 'buy_mean_pnl'][j] + pnl_tickerhead_frame['sell_mean_pnl'][j] total_pnl_frame[ ticker_head_list[j]][i] = pnl_tickerhead_frame['total_pnl'][j] total_pnl_frame['portfolio'][i] = pnl_tickerhead_frame[ 'total_pnl'].sum() total_pnl_frame.to_pickle(backtest_results_folder + '/futures_butterfly/portfolio' + str(rule_no) + '.pkl') return total_pnl_frame
def construct_futures_butterfly_portfolio(**kwargs): rule_no = kwargs['rule_no'] backtest_output = kwargs['backtest_output'] pnl_field = kwargs['pnl_field'] if rule_no in [1, 3, 4, 5, 6]: stop_loss = -100000000000 elif rule_no == 2: stop_loss = -1000 backtest_results_folder = dn.get_directory_name(ext='backtest_results') if os.path.isfile(backtest_results_folder + '/futures_butterfly/portfolio' + str(rule_no) + '.pkl'): return pd.read_pickle(backtest_results_folder + '/futures_butterfly/portfolio' + str(rule_no) + '.pkl') elif not os.path.exists(backtest_results_folder + '/futures_butterfly'): os.makedirs(backtest_results_folder + '/futures_butterfly') date_list = kwargs['date_list'] ticker_head_list = cmi.futures_butterfly_strategy_tickerhead_list total_pnl_frame = pd.DataFrame({'report_date': date_list}) total_pnl_frame['portfolio'] = 0 for i in range(len(ticker_head_list)): total_pnl_frame[ticker_head_list[i]] = 0 for i in range(len(date_list)): pnl_tickerhead_frame = pd.DataFrame({'ticker_head': ticker_head_list}) pnl_tickerhead_frame['buy_mean_pnl'] = 0 pnl_tickerhead_frame['sell_mean_pnl'] = 0 pnl_tickerhead_frame['total_pnl'] = 0 daily_sheet = backtest_output[i] for j in range(len(ticker_head_list)): ticker_head_results = daily_sheet[daily_sheet['tickerHead'] == ticker_head_list[j]] filter_output_long = sf.get_futures_butterfly_filters(data_frame_input=ticker_head_results, filter_list=['long'+str(rule_no)]) filter_output_short = sf.get_futures_butterfly_filters(data_frame_input=ticker_head_results, filter_list=['short'+str(rule_no)]) selected_short_trades = ticker_head_results[filter_output_short['selection_indx'] & (np.isfinite(ticker_head_results[pnl_field]))] selected_long_trades = ticker_head_results[filter_output_long['selection_indx'] & (np.isfinite(ticker_head_results[pnl_field]))] if len(selected_short_trades.index) > 0: selected_short_trades.loc[selected_short_trades['hold_pnl1short'] < stop_loss, pnl_field]= \ selected_short_trades.loc[selected_short_trades['hold_pnl1short'] < stop_loss, 'hold_pnl2short'] pnl_tickerhead_frame['sell_mean_pnl'][j] = selected_short_trades[pnl_field].mean() if len(selected_long_trades.index) > 0: selected_long_trades.loc[selected_long_trades['hold_pnl1long'] <stop_loss, pnl_field] = \ selected_long_trades.loc[selected_long_trades['hold_pnl1long'] <stop_loss, 'hold_pnl2long'] pnl_tickerhead_frame['buy_mean_pnl'][j] = selected_long_trades[pnl_field].mean() pnl_tickerhead_frame['total_pnl'][j] = pnl_tickerhead_frame['buy_mean_pnl'][j] + pnl_tickerhead_frame['sell_mean_pnl'][j] total_pnl_frame[ticker_head_list[j]][i] = pnl_tickerhead_frame['total_pnl'][j] total_pnl_frame['portfolio'][i] = pnl_tickerhead_frame['total_pnl'].sum() total_pnl_frame.to_pickle(backtest_results_folder + '/futures_butterfly/portfolio' + str(rule_no) + '.pkl') return total_pnl_frame
def generate_futures_butterfly_formatted_output(**kwargs): if "report_date" in kwargs.keys(): report_date = kwargs["report_date"] else: report_date = exp.doubledate_shift_bus_days() output_dir = ts.create_strategy_output_dir(strategy_class="futures_butterfly", report_date=report_date) butterfly_output = fb.generate_futures_butterfly_sheet_4date(date_to=report_date) butterflies = butterfly_output["butterflies"] filter_out = ff.get_futures_butterfly_filters(data_frame_input=butterflies, filter_list=["long1", "short1"]) good_butterflies = filter_out["selected_frame"] butterflies_w_selected_columns = butterflies[ [ "ticker1", "ticker2", "ticker3", "tickerHead", "trDte1", "trDte2", "trDte3", "Q", "QF", "z1", "z2", "z3", "z4", "theo_pnl", "r1", "r2", "bf_price", "RC", "seasonality", "second_spread_weight_1", "upside", "downside", "recent_vol_ratio", "recent_5day_pnl", "bf_sell_limit", "bf_buy_limit", ] ] good_butterflies_w_selected_columns = good_butterflies[ [ "ticker1", "ticker2", "ticker3", "tickerHead", "trDte1", "trDte2", "trDte3", "Q", "QF", "z1", "z2", "z3", "z4", "theo_pnl", "r1", "r2", "bf_price", "RC", "seasonality", "second_spread_weight_1", "upside", "downside", "recent_vol_ratio", "recent_5day_pnl", "bf_sell_limit", "bf_buy_limit", ] ] writer = pd.ExcelWriter(output_dir + "/" + futil.xls_file_names["futures_butterfly"] + ".xlsx", engine="xlsxwriter") butterflies_w_selected_columns.to_excel(writer, sheet_name="all") good_butterflies_w_selected_columns.to_excel(writer, sheet_name="good") worksheet_good = writer.sheets["good"] worksheet_all = writer.sheets["all"] worksheet_good.freeze_panes(1, 0) worksheet_all.freeze_panes(1, 0) worksheet_good.autofilter( 0, 0, len(good_butterflies_w_selected_columns.index), len(good_butterflies_w_selected_columns.columns) ) worksheet_all.autofilter( 0, 0, len(butterflies_w_selected_columns.index), len(butterflies_w_selected_columns.columns) )