from datetime import datetime
import backtrader as bt

# Create a subclass of Strategy to define the indicators and logic

class SmaCross(bt.Strategy):
    # list of parameters which are configurable for the strategy
    params = dict(
        pfast=5,  # period for the fast moving average
        pslow=10   # 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

    def next(self):
        if not self.position:  # not in the market
            if self.crossover > 0:  # if fast crosses slow to the upside
                print('self.crossover ', self.crossover[0])
                self.buy()  # enter long

        elif self.crossover < 0:  # in the market & cross to the downside
            print('self.crossover ', self.crossover[0])
            self.sell()  # close long position


cerebro = bt.Cerebro()  # create a "Cerebro" engine instance

# Create a data feed
data = bt.feeds.GenericCSVData(
        dataname='./600000qfq.csv',
        datetime=2,
        open=3,
        high=4,
        low=5,
        close=6,
        volume=10,
        #dtformat=('%Y%m%d'),
        dtformat=('%Y%m%d'),
        fromdate=datetime(2019, 1, 1),
        todate=datetime(2020, 7, 8)
    )
cerebro.adddata(data)  # Add the data feed

cerebro.addstrategy(SmaCross)  # Add the trading strategy
cerebro.run()  # run it all
cerebro.plot()  # and plot it with a single command
from datetime import datetime
import backtrader as bt

# Create a subclass of Strategy to define the indicators and logic

class SmaCross(bt.Strategy):
    # list of parameters which are configurable for the strategy
    params = dict(
        pfast=5,  # period for the fast moving average
        pslow=10   # 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

    def next(self):
        if not self.position:  # not in the market
            if self.crossover > 0:  # if fast crosses slow to the upside
                print('self.crossover ', self.crossover[0])
                self.buy()  # enter long

        elif self.crossover < 0:  # in the market & cross to the downside
            print('self.crossover ', self.crossover[0])
            self.sell()  # close long position


cerebro = bt.Cerebro()  # create a "Cerebro" engine instance

# Create a data feed
data = bt.feeds.GenericCSVData(
        dataname='./600000qfq.csv',
        datetime=2,
        open=3,
        high=4,
        low=5,
        close=6,
        volume=10,
        #dtformat=('%Y%m%d'),
        dtformat=('%Y%m%d'),
        fromdate=datetime(2019, 1, 1),
        todate=datetime(2020, 7, 8)
    )
cerebro.adddata(data)  # Add the data feed

cerebro.addstrategy(SmaCross)  # Add the trading strategy
cerebro.run()  # run it all
cerebro.plot()  # and plot it with a single command
# Create a subclass of Strategy to define the indicators and logic # list of parameters which are configurable for the strategy # period for the fast moving average # period for the slow moving average # fast moving average # slow moving average # crossover signal # not in the market # if fast crosses slow to the upside # enter long # in the market & cross to the downside # close long position # create a "Cerebro" engine instance # Create a data feed #dtformat=('%Y%m%d'), # Add the data feed # Add the trading strategy # run it all # and plot it with a single command