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]