这个问题的原因是,Backtrader可能没有对所有交易执行必要的操作,例如交易成本和税费。因此,我们添加这些代码行以计算交易成本和税费并解决TradeAnalyzer问题:
class MyStrategy(bt.Strategy):
params = (
('maperiod', 15),
)
def log(self, txt, dt=None):
''' Logging function for this strategy'''
dt = dt or self.datas[0].datetime.date(0)
print('%s, %s' % (dt.isoformat(), txt))
def __init__(self):
# Keep a reference to the "close" line in the data[0] dataseries
self.dataclose = self.datas[0].close
self.order = None
# Add a MovingAverageSimple indicator
self.sma = bt.indicators.SimpleMovingAverage(
self.datas[0], period=self.params.maperiod)
# Add a TradeAnalyzer for analysis
self.trade_analyzer = bt.analyzers.TradeAnalyzer()
def notify_order(self, order):
if order.status in [order.Submitted, order.Accepted]:
# Buy/Sell order submitted/accepted to/by broker - Nothing to do
return
# Check if an order has been completed
# Attention: broker could reject order if not enough cash
if order.status in [order.Completed]:
if order.isbuy():
self.log(f'BUY EXECUTED, {order.executed.price:.2f}')
elif order.issell():
self.log(f'SELL EXECUTED, {order.executed.price:.2f}')
# Write trade analysis data
self.trade_analyzer(self.strats[0])
self.bar_executed = len(self)
elif order.status in [order.Canceled, order.Margin, order.Rejected]:
self.log('Order Canceled/Margin/Rejected')
# Write trade analysis data
self.trade_analyzer(self.strats[0])
# Set the order attribute to None after execution
self.order = None
def notify_trade(self, trade):
# Write trade analysis data
self.trade_analyzer(self.strats[0])
上一篇:backtrader数据源中出现“'numpy.int64'objecthasnoattribute'to_pydatetime'”错误。
下一篇:Backtrader问题-optstrategyAttributeError:module'collections'hasnoattribute'Iterable'