I am trying to run the following strategy on Nippon NIFTY BEES and while trying to run the main program getting the following error. I am running the code on VScode platform.Any help is highly appreciated.
class smacross(bt.SignalStrategy):
#params = (('fast',100),('slow',200))
def __init__(self):
self.adjclose = int(float(self.data[0].Adjclose))
self.sma100 = bt.ind.SimpleMovingAverage(self.adjclose,period=100)
self.sma200 = bt.ind.SimpleMovingAverage(self.adjclose,period=200)
#Checking to see if the 'adjclose' is greater than sma100 and sma200
up_over_sma = self.adjclose > self.sma100
up_over_ema = self.adjclose > self.sma200
down_over_sma = self.adjclose < self.sma100
down_over_ema = self.adjclose < self.sma200
# Objective is to check if sma100 is greater than sma200
sma_ema_diff = self.adjclose - self.sma200
#self.crossover = bt.ind.CrossOver(sma1,sma2)
#Buy signal is given if adjclose > sma100 & adjclose >sma200 and sm100-sma200 >0
#Sell signal is given is adjclose < sma200 and adjclose-sma200 < 0
self.buy_signal = bt.And(up_over_sma,up_over_ema,sma_ema_diff > 0)
self.sell_signal = bt.And(down_over_ema,sma_ema_diff < 0)
self.signal_add(bt.SIGNAL_LONG,self.buy_signal)
self.signal_add(bt.SIGNAL_SHORT,self.sell_signal)
cerebro = bt.cerebro()
cerebro.optstrategy(smacross,period=(100,200))
cerebro.broker.setcash(200000.0)
cerebro.addsizer(bt.sizers.percents_sizer,percent=25)
data = bt.feeds.YahooFinanceCSVData(dataname='NIFTYBEES.csv')
cerebro.adddata(data)
#if name == 'main':
start_portfolio_value = cerebro.broker.getvalue()
print('Starting portfolio value is Rs %s' % start_portfolio_value)
cerebro.addanalyzer(bt.analyzers.SharpeRatio,_name = "Sharpe")
cerebro.addanalyzer(bt.analyzers.AnnualReturn,_name = "Annual Return")
cerebro.addanalyzer(bt.analyzers.DrawDown,_name = "Drawdown")
#cerebro.addanalyzer(bt.analyzers.standarddev,_name= "StdDev")
cerebro.addanalyzer(bt.analyzers.TimeDrawDown,_name = "Drawdown Time")
bktest = cerebro.run()
end_portfolio_value = cerebro.broker.getvalue()
pnl = end_portfolio_value - start_portfolio_value
print('Ending portfolio value is Rs %s' % end_portfolio_value )
print("PnL is Rs %s" % pnl)
Error shown:
TypeError Traceback (most recent call last)
<ipython-input-14-fee156ded6a0> in <module>
----> 1 cerebro = bt.cerebro()
2 cerebro.optstrategy(smacross,period=(100,200))
3 cerebro.broker.setcash(200000.0)
4 cerebro.addsizer(bt.sizers.percents_sizer,percent=25)
5
TypeError: 'module' object is not callable