cerebro running without stop for long time and wihtout getting result
-
here is my code :
class PairStrategy(bt.Strategy):
def init(self):
self.line = btind.OLS_TransformationN(self.data0.Close,self.data1.Close, period = len(self.data1.close))
self.spread = self.line.spreaddef zscore_spread(self):
self.spread_mavg = self.self.spread
self.spread_mavg60 = self.self.spread.rolling(window=60, center=False).mean()
self.spread_std_60 = self.self.spread.rolling(window=60, center=False).std()
self.zscore_60 = (self.spread_mavg - self.spread_mavg60)/self.spread_std_60
return self.zscore_60def get_thresholds(self):
print('inside next function ')
self.std_dev = np.std(self.zscore_spread())
self.threshold_upper = np.mean(self.zscore_spread()) + 1.7self.std_dev
self.threshold_lower = np.mean(self.zscore_spread()) - 1.7self.std_devreturn self.threshold_upper, self.threshold_lower
def next(self):
print('inside next function ')
self.spread_data = self.zscore_spread()
self.threshold_upper, self.threshold_lower = self.get_thresholds()if (self.spread_data[0] > self.threshold_upper) and (self.data0.close[0] > self.data0.close[-1]): self.sell(data=self.data0, exectype=Order.StopLimit, price=0.8*self.data0.close[0], plimit=1.05*self.data0.close[0], size=0.1) elif (self.spread_data[0] < self.threshold_lower) and (self.data0.close[0] < self.data0.close[-1]): self.buy(data=self.data0, exectype=Order.StopLimit, price=1.2*self.data0.close[0], plimit=0.95*self.data0.close[0], size=0.1) if (self.spread_data[0] < self.threshold_lower) and (self.data1.close[0] > self.data1.close[-1]): self.sell(data=self.data1, exectype=Order.StopLimit, price=0.8*self.data1.close[0], plimit=1.05*self.data1.close[0], size=0.1) elif (self.spread_data[0] > self.threshold_upper) and (self.data1.close[0] < self.data1.close[-1]): self.buy(data=self.data1, exectype=Order.StopLimit, price=1.2*self.data1.close[0], plimit=0.95*self.data1.close[0], size=0.1)
df0 = yf.Ticker('HG=F').history(period = '2y',
interval = '1d',
actions = True,
auto_adjust = True)
df0.index = pd.to_datetime(df0.index,format="%Y-%m-%d",utc=True)
df0 = df0.loc[test_data.index[0]:]df1 = yf.Ticker('CL=F').history(period = '2y',
interval = '1d',
actions = True,
auto_adjust = True)df1.index = pd.to_datetime(df1.index,format="%Y-%m-%d",utc=True)
df1 = df1.loc[test_data.index[0]:]common= df1.index.intersection(df0.index)
feed1 = df1.loc[common]
feed0 = df0.loc[common]
if name == 'main':
cerebro = bt.Cerebro()cerebro.addstrategy(PairStrategy) # add strategy
data0 = bt.feeds.PandasData(dataname=feed0)
data1 = bt.feeds.PandasData(dataname=feed1)cerebro.adddata(data0, name='data0') # Add data0 as the first pair's data feed
cerebro.adddata(data1, name='data1')
cerebro.broker.setcash(10000.0)
cerebro.broker.setcommission(commission=0.01)
print('starting portfolio: %.2f' % cerebro.broker.getvalue())
cerebro.run()
cerebro.plot()