backtrater教学视频第二章最后一节关于indicator的编写的代码问题

       为什么我按照你的教学视频讲解的代码,原原本本地在本地运行,出来的图没有显示任何交易信号?
       望能指点赐教,谢谢!

img

import datetime
import backtrader as bt
import pandas as pd
class threebars(bt.Indicator):
    lines=("up","down")
    def __init__(self):
        self.addminperiod(4)
        self.plotinfo.plotmaster=self.data
    def nex(self):
        self.up[0]=max(max(self.data.close.get(ago=-1,size=3)),max(self.data.open.get(ago=-1,size=3)))
        self.down[0]=min(min(self.data.close.get(ago=-1,size=3)),min(self.data.open.get(ago=-1,size=3)))

class TestStrategy(bt.Strategy):
    def __init__(self):
        print("init")
        #self.mav=bt.indicators.MovingAverageSimple(self.data,period=60)
        self.updown=threebars(self.data)
        #self.buy_sell_sinal=bt.indicators.CrossOver(self.data.close,self.mav)
        self.buy_sinal=bt.indicators.CrossOver(self.data.close,self.updown.up)
        self.sell_sinal=bt.indicators.CrossDown(self.data.close,self.updown.down)
    def start(self):
        print("The world call me!")
    def prenext(self):
        print("Not mature")
    def nextstart(self):
        print("Rites of passage")
    def next(self):
        print("A new bar")
        #mav=sum([self.data.close[-n] for n in range(30)])/30
        """mav=self.mav[0]
        pre_mav=self.mav[-1]"""
        """if self.data.close[0]>mav and self.data.close[-1]<pre_mav:
            print("buy",self.data.datetime.date())
            self.order=self.buy()
        if self.data.close[0]<mav and self.data.close[-1]>pre_mav:    
            print("sell",self.data.datetime.date())
            self.order=self.sell()"""
        if not self.position and self.buy_sinal[0]==1:
            self.order=self.buy()
        if self.getposition().size<0 and self.buy_sinal[0]==1:
            self.order=self.close()
            self.order=self.buy()
        if not self.position and self.sell_sinal[0]==1:
            self.order=self.sell()
        if self.getposition().size>0 and self.sell_sinal[0]==1:
            self.order=self.close()
            self.order=self.sell()
    def stop(self):
        print("leave")
#1.Create a cerebro
cerebro=bt.Cerebro()
#2.Add data feed
#2.1 Creat a data feed
df=pd.read_csv("C:\\Users\\Administrator\\Desktop\\000333.csv")
df["date"]=pd.to_datetime(df["date"])
df.set_index("date",inplace=True)
df["openinterest"]=0
print(df)
datafeed=bt.feeds.PandasData(dataname=df, fromdate=datetime.datetime(2015,1,5),todate=datetime.datetime(2021,8,3))
#2.2Add the Data Feed to Cerebro
cerebro.adddata(datafeed)
cerebro.broker.setcash(100000000.0)
cerebro.broker.setcommission(commission=0.0001)
cerebro.broker.set_slippage_perc(perc=0.0001)
#3.Add strategy
cerebro.addstrategy(TestStrategy)
#4.Run
cerebro.run()
#5.Plot result
#print(cerebro.broker.getvalue())
cerebro.plot(style="candle",barup="#ff9896",bardown="#98df8a",volup="#ff9896",voldown="#98df8a")