如何在Python Backtrader回测中获取订单买入价格并实现1%止盈
问题修复方案
报错根因
- 你的
notify_order方法无差别将self.order赋值为None,持仓阶段self.order已是空值,无法参与数值运算 - 初始化预留的
self.buyprice变量未被使用,没有存储买入成交价格的逻辑
修复代码
修改1:调整notify_order回调,记录成交价格
def notify_order(self, order): # 跳过订单提交、受理中的中间状态 if order.status in [order.Submitted, order.Accepted]: return # 订单成交时记录价格 if order.status == order.Completed: if order.isbuy(): self.buyprice = order.executed.price self.buycomm = order.executed.comm self.log(f'买入成交,价格:{self.buyprice:.2f},手续费:{self.buycomm:.2f}') else: self.log(f'卖出成交,价格:{order.executed.price:.2f},手续费:{order.executed.comm:.2f}') # 卖出后清空买入价记录,避免下一轮开仓复用旧数据 self.buyprice = None # 异常订单提示 elif order.status in [order.Canceled, order.Margin, order.Rejected]: self.log('订单已取消/保证金不足/被拒绝') # 重置订单标记 self.order = None
修改2:替换止盈判断逻辑的取值来源
把原来报错的行替换为使用self.buyprice计算的逻辑:
else: if not buy: # 确认已存储买入价后再做止盈判断,避免空值报错 if self.buyprice and self.dataclose[0] >= self.buyprice * 1.01: self.log('TAKE PROFIT, %.2f' % self.dataclose[0]) self.order = self.sell()
内容的提问来源于stack exchange,提问作者YanRemes
相关产品推荐
相关产品推荐

