Exemple #1
0
    def run(self):
        filenames = self.gen_find()

        if self._data_mode == 'Insample':
            start_time = '2016-7-1 09:00:00.0'
            end_time = '2016-10-1 09:00:00.0'
        else:
            start_time = '2016-10-1 09:00:00.0'
            end_time = '2016-12-31 23:59:59.0'

        for filename in filenames:
            data = pd.read_csv(self._data_dir + '/' + filename, index_col=0)
            data = data[(pd.to_datetime(data.index) >= start_time)
                        & (pd.to_datetime(data.index) < end_time)]
            if len(data) == 0:
                continue
            else:
                signals = [
                    SLMStrategy(data, self._slm, m).generatingsignal()
                    for m in np.arange(1, self._max_order + 1)
                ]
                tcas = [self._tca for m in np.arange(1, self._max_order + 1)]
                opts = [self._opt for m in np.arange(1, self._max_order + 1)]
                validator_ensemble = ensembler(vectorizedbacktest, signals,
                                               tcas, opts)
                validator_ensemble.build()
                validator_ensemble.run()
                performance = validator_ensemble.calperformance()
                performance.to_csv(self._valid_dir + '/performance_' +
                                   filename)
                validator_ensemble.plot()
                plt.savefig(self._valid_dir + '/performance_' +
                            re.sub('.csv', '.png', filename))
                plt.close()
Exemple #2
0
    def build(self,
              model_order=8,
              freq='5min',
              start='20161001',
              end='20161221',
              offset=0,
              tca=None,
              fixed_cost=0.0002):
        """
        Read in Data and the probability table

        Args:
            model_order: int or list. Number of model orders
        """
        self.test_data = self.test_data[(self.test_data.index >= start)
                                        & (self.test_data.index < end)]
        self.signals = self.compile_signal(self.test_data,
                                           self.prob_table,
                                           model_orders=model_order)
        self.ensemble = ensembler(vectorizedbacktest,
                                  self.signals,
                                  price=self.test_price,
                                  tcas=[tca] * (model_order - 1),
                                  fixed_cost=fixed_cost)
        self.ensemble.build()
Exemple #3
0
 def build(self,
           commodity,
           exp_date,
           model_order=7,
           freq='5min',
           offset=0,
           start='20160701',
           end='20161031',
           tca=None):
     self.test_data = self.compile_data(commodity,
                                        exp_date,
                                        start=start,
                                        end=end)
     self.signals = self.compile_signal(self.test_data,
                                        self.prob_table,
                                        max_order=model_order)
     self.ensemble = ensembler(vectorizedbacktest, self.signals, tcas=tca)
     self.ensemble.build()
Exemple #4
0
 def build(self,
           commodity,
           exp_date,
           model_order=4,
           freq=['{}min' for i in range(1, 5)],
           offset=0,
           start='20160701',
           end='20161031',
           tca=None):
     self.test_data = self.compile_data(commodity,
                                        exp_date,
                                        freq=freq,
                                        start=start,
                                        end=end)
     self.signals = self.compile_signal(self.test_data, self.prob_table,
                                        model_order)
     self.ensemble = ensembler(vectorizedbacktest,
                               self.signals,
                               tcas=tca,
                               labels=freq)
     self.ensemble.build()
Exemple #5
0
    def build(self,
              model_order=7,
              freq='5min',
              start='20161001',
              end='20161221',
              offset=0):
        """
        Read in Data and the probability table

        Args:
            model_order: int or list. Number of model orders
        """
        self.test_data = self.test_data[(self.test_data.index >= start)
                                        & (self.test_data.index < end)]
        self.signals = self.compile_signal(self.test_data,
                                           self.prob_table,
                                           model_orders=model_order)
        self.ensemble = ensembler(vectorizedbacktest,
                                  self.signals,
                                  tcas=self._tca,
                                  window=self._rollback_window)
        self.ensemble.build()
Exemple #6
0
    def build(self,
              model_order=7,
              freq='5min',
              start='20161001',
              end='20161221',
              offset=0,
              tca=None,
              labels=None):
        """
        Read in Data and the probability table

        Args:
            model_order: int or list. Number of model orders
        """
        self.test_data = self.test_data[(self.test_data.index >= start)
                                        & (self.test_data.index < end)]
        self.signals = self.compile_signal(self.test_data,
                                           self.prob_table,
                                           price=self.price,
                                           model_orders=model_order)

        all_signals = pd.concat(
            [df[['signal', 'max_pct']] for df in self.signals],
            axis=0,
            keys=range(1, model_order + 1))
        all_signals = all_signals.fillna(0)
        all_signals = all_signals.unstack(level=0)

        max_pct_signal = self.signals[0].copy()
        max_pct_signal['signal'] = all_signals.apply(
            lambda x: x.signal[x.max_pct.idxmax(axis=1)], axis=1)
        self.signals.append(max_pct_signal)

        self.ensemble = ensembler(vectorizedbacktest,
                                  self.signals,
                                  tcas=tca,
                                  labels=labels,
                                  price=self.price)
        self.ensemble.build()
Exemple #7
0
    def run(self):
        filenames = self.gen_find()
        for filename in filenames:
            data = pd.read_csv(self._data_dir + '/' + filename, index_col=0)
            data = data[(pd.to_datetime(data.index) >= '2016-7-1 09:00:00.0') &
                        (pd.to_datetime(data.index) < '2016-10-1 09:00:00.0')]
            if len(data) == 0:
                continue
            else:
                signals = [
                    SLMStrategy(data, self._slm, m).generatingsignal()
                    for m in np.arange(1, self._max_order + 1)
                ]
                validator_ensemble = ensembler(vectorizedbacktest, signals)
                validator_ensemble.build()
                validator_ensemble.run()

                performance = validator_ensemble.calperformance()
                performance.to_csv(self._valid_dir + '/performance_' +
                                   filename)
                validator_ensemble.plot()
                plt.savefig(self._valid_dir + '/performance_' +
                            re.sub('.csv', '.png', filename))
                plt.close()
                # validator_ensemble.plot(target_col="benchmark")
                # plt.savefig(self._valid_dir + '/benchmark_' + re.sub('.csv', '.png', filename))
                # plt.close()
                fig = plt.figure()
                #benchmark = validator_ensemble.results[0]['return'].cumsum() + 1
                benchmark = validator_ensemble.results[0]['benchmark']
                #print(len(benchmark.index))
                #initial_value = benchmark[0]
                #benchmark = benchmark/initial_value
                benchmark.plot()
                plt.title('Benchmark')
                fig.savefig(self._valid_dir + '/benchmark_' +
                            re.sub('.csv', '.png', filename))
                plt.close()

                if self._offsets_average:
                    if not self._average_return:
                        self._average_return = [
                            df['strategy'] for df in validator_ensemble.results
                        ]
                        average_performance = performance
                        average_benchmark = validator_ensemble.results[0][
                            'LastPrice']
                    else:
                        self._average_return = [
                            df1.add(df2['strategy'], fill_value=0)
                            for (df1, df2) in zip(self._average_return,
                                                  validator_ensemble.results)
                        ]
                        average_performance = average_performance.add(
                            performance, fill_value=0)
                        average_benchmark = average_benchmark.add(
                            validator_ensemble.results[0]['LastPrice'],
                            fill_value=0)
        '''
        average return of all offsets
        '''
        if self._offsets_average and (self._average_return is not None):
            self._average_return = [(1 + df.divide(self._n_offsets)).cumprod()
                                    for df in self._average_return]
            average_benchmark = average_benchmark / average_benchmark[0]
            average_benchmark = average_benchmark.to_frame()
            average_benchmark['Date'] = pd.to_datetime(average_benchmark.index)
            #print(average_benchmark)
            fig = plt.figure()
            plt.plot(average_benchmark.Date,
                     average_benchmark.LastPrice,
                     label='benchmark')
            for avg_return, label in zip(
                    self._average_return,
                    np.arange(2, 2 + len(self._average_return))):
                #avg_return.plot(label=label)
                df = avg_return.to_frame()
                df['Date'] = pd.to_datetime(df.index)
                plt.plot(df.Date, df.strategy, label=label)
            fig.autofmt_xdate()
            plt.legend(loc='upper left')
            plt.title('Equity Curve')
            plt.show()
            fig.savefig(self._valid_dir + '/performance_' + self._symbol +
                        '.png')
            plt.close()

            average_performance = average_performance.divide(self._n_offsets)
            print(average_performance)
            average_performance.to_csv(self._valid_dir + '/performance_' +
                                       self._symbol + '.csv')