You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:24:05