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()
def compile_signal(data, slm, max_order=8): slm = slm[['prior', 'max']] slm = slm.rename(columns={'max': 'signal'}) signals = [ SLMStrategy(data, slm, m).generatingsignal() for m in np.arange(1, max_order + 1) ] return signals
def compile_signal(self, data, slm, model_order=4): """ Generate signals for different orders """ signals = [ SLMStrategy(instrument, slm, model_order).generatingsignal() for instrument in data ] return signals
def compile_signal(self, data, slm, max_order=8): """ Generate signals for different orders """ signals = [ SLMStrategy(data, slm, m).generatingsignal() for m in np.arange(1, max_order + 1) ] return signals
def compile_signal(self, data, slm, model_orders): """ Generate signals for different orders """ signals = [ SLMStrategy(data, slm, m, px_th=self._price_threshold).generatingsignal() for m in range(1, model_orders + 1) ] return signals
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')