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

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

关注参考了很多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 状态卡住,可能需要检查市场数据在提交订单的次日是否存在。