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

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")