def get_performance_list(self, average_position_signal_array_norm): # average_position_signal_array_norm = self.get_average_position_signal_array(self.position_signal_array_list) indi_obj = Indicator(self, average_position_signal_array_norm) ret = indi_obj.get_total_return() mean_tvr = indi_obj.get_mean_turnover() dd, dd_start, dd_end = indi_obj.get_max_drawdown() sharp = indi_obj.get_sharp() ret2dd = indi_obj.get_return_divide_dd() mg_bp = indi_obj.get_margin_bp() indi_list = [ 'average', self.window_period, self.std_num, self.start_time[:-4], self.end_time[:-4], ret, mean_tvr, sharp, ret2dd, dd, dd_start, dd_end, mg_bp ] return indi_list
def roll_test(self, ): self.set_directory(self.start_time, self.end_time, self.strategy_name) [ self.price_focused_list, self.volume_focused, self.instrument_focused, self.datetime_focused ] = self.get_focused_info() results_single_return_bp = np.zeros( (len(self.window_period_list), len(self.std_num_list))) results_return2dd = np.zeros( (len(self.window_period_list), len(self.std_num_list))) results_turnover = np.zeros( (len(self.window_period_list), len(self.std_num_list))) for i in range(len(self.window_period_list)): for j in range(len(self.std_num_list)): self.window_period = self.window_period_list[i] self.std_num = self.std_num_list[j] position_signal_focused = self.generate_position_signal() if hasattr(self, 'loss_threshold'): position_signal_focused = self.stop_loss_win( position_signal_focused) self.position_signal_array = self.map_signal_focused_to_array( position_signal_focused) self.position_signal_array_list.append( self.position_signal_array) indi_obj = Indicator(self, self.position_signal_array) self.buysell_signal_array = indi_obj.get_buysell_signal() # self.compound_return_array = indi_obj.get_compound_return() self.single_return_array = indi_obj.get_single_return() self.buysell_info = self.get_buysell_info() seq = [ self.coinType1 + '-' + self.coinType2, self.two_contract[0], self.two_contract[1], self.strategy_name, str(self.window_period), str(self.std_num) ] self.write_buysell_info_to_file(self.buysell_dir, seq, self.buysell_info) seq.append('day-return') ret_unitTime_list, endtime_list = indi_obj.get_return_for_unitTime( ) ret_unit_df = pd.DataFrame({ 'endtime': endtime_list, 'return': ret_unitTime_list }) self.write_buysell_info_to_file(self.buysell_dir, seq, ret_unit_df) del seq[-1] ret = indi_obj.get_total_return() mean_tvr = indi_obj.get_mean_turnover() dd, dd_start, dd_end = indi_obj.get_max_drawdown() sharp = indi_obj.get_sharp() ret2dd = indi_obj.get_return_divide_dd() mg_bp = indi_obj.get_margin_bp() results_return2dd[i][j] = ret2dd results_turnover[i][j] = mean_tvr results_single_return_bp[i][j] = mg_bp indi_list = [ self.coinType1 + '-' + self.coinType2, self.window_period, self.std_num, self.start_time[:-4], self.end_time[:-4], ret, mean_tvr, sharp, ret2dd, dd, dd_start, dd_end, mg_bp ] self.indi_list_list.append(indi_list) seq = [ self.coinType1 + '-' + self.coinType2, self.two_contract[0], self.two_contract[1], self.strategy_name ] results_list = [ results_single_return_bp, results_return2dd, results_turnover ] self.results_tag_list = ['mg-bp', 'ret2dd', 'turnover'] self.get_average_result_list(self.results_tag_list) for i in range(len(results_list)): # record the data results for each coin type, it's used for calculating the average results self.average_result_list[i].append(results_list[i]) seq.append(self.results_tag_list[i]) self.write_result_to_file(self.result_dir, seq, results_list[i], self.window_period_list, self.std_num_list) del seq[-1]