from datetime import datetimeimport backtrader as bt # Create a subclass of Strategy to define the indicators and logic classSmaCross(bt.Strategy):# list of parameters which are configurable for the strategy params = dict( pfast=10, # period for the fast moving average pslow=30# period for the slow moving average ) def__init__(self): sma1 = bt.ind.SMA(period=self.p.pfast) # fast moving average sma2 = bt.ind.SMA(period=self.p.pslow) # slow moving average self.crossover = bt.ind.CrossOver(sma1, sma2) # crossover signal defnext(self):ifnot self.position: # not in the marketif self.crossover > 0: # if fast crosses slow to the upside self.buy() # enter long elif self.crossover 0: # in the market & cross to the downside self.close() # close long position cerebro = bt.Cerebro() # create a "Cerebro" engine instance # Create a data feeddata = bt.feeds.YahooFinanceData(dataname='MSFT', fromdate=datetime(2011, 1, 1), todate=datetime(2012, 12, 31)) cerebro.adddata(data) # Add the data feed cerebro.addstrategy(SmaCross) # Add the trading strategycerebro.run() # run it allcerebro.plot() # and plot it with a single command