m0_46606126 2024-01-04 16:38 采纳率: 11.1%
浏览 56
已结题

使用backtrader多股票回测部分卖出订单无法成交

使用backtrader进行多股票回测是发现了部分股票提交卖出订单没有成交的情况,数据没有问题,notify_order显示有Submitted但不Accepted,求解惑

img

  • 写回答

15条回答 默认 最新

  • 叫兽-郭老师 新星创作者: Java技术领域 2024-01-04 16:40
    关注

    参考了很多AI,然后结合出来的回答

    在backtrader中,未成交订单可能有以下原因:

    股票没有足够的流动性:在某些情况下,一只股票在某一天可能没有足够的交易量来满足你的卖出订单,特别是如果你的订单数量较大,或者该股票的流通股本较少。在这种情况下,你可以确定你的订单大小是否适合当前的市场环境。
    未能满足卖出订单条件:例如,你可能试图在市价卖出,但是当前市场订单的买入价格低于你的卖出价格。或者,在你提交卖出订单的那一天,股市可能已经闭市。在这种情况下,你需要确保你的策略正确地处理了时间和价格。
    样本外数据影响:如果你在测试中使用了未来数据,则可能会导致未能成交订单。

    你可以尝试调试你的策略,检查上述因素。此外,Backtrader 的日志消息和返回值可能会帮助你确定问题所在。例如,你可以打印出订单状态和订单信息,例如:

    def notify_order(self, order):
        print(order.getstatusname(order.status))
        if order.status == order.Submitted:
            print('Order Submitted ', order.data._name, self.data.datetime.date())
        if order.status == order.Accepted:
            print('Order Accepted ', order.data._name, self.data.datetime.date())
        elif order.status in [order.Expired, order.Canceled, order.Margin, order.Rejected]:
            print('Order Failed ', order.data._name, self.data.datetime.date())
        elif order.status == order.Completed:
            print('Order Completed ', order.data._name, self.data.datetime.date())
    
    

    例如,如果订单被 Rejected,则可能是由于你账户余额不足,你可以检查是否正确地处理了所有的交易和费用。如果订单被 Cancelled 或 Expired,可能是因为你设置了订单的有效期。如果订单在 Submitted 状态卡住,可能需要检查市场数据在提交订单的次日是否存在。

    评论 编辑记录
    1人已打赏

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月5日
  • 创建了问题 1月4日