回测中股票下单量为0该怎么解决

用户头像登龙空了这不队
2026-03-31 发布

如题,在为期三年回测的过程中经常出现

WARN‘股票名’下单量为0的问题(已经确认股票没退市),在对代码进行检查后怀疑是已经发出购买指令但是购买失败

在删除了真实成交量这一预设之后结果有改善但影响不大,仍然存在大量“WARN‘股票名’下单量为0”的现象

虽然感觉某些股票当日成交量为0的事不会这么频繁,但仍怀疑是当日不存在成交量导致的下单失败

因此提出两个需求

1.如何通过代码在回测内部查看购入指令?

2.是否能无视股票当日成交量为0,在回测中仍然进行买入?

评论

用户头像
2026-03-31 21:20:24

根据您描述的问题和需求,以下是针对两个需求的解答:

1. 如何通过代码在回测内部查看购入指令?

在回测中,可以通过 on_order 回调函数来查看购入指令。on_order 函数会在每次下单后被调用,可以用来检查订单的状态和详情。以下是一个示例代码,展示如何在 on_order 函数中打印订单信息:

def on_order(context, odr):
    # 打印订单信息
    log.info(f"订单状态: {odr.status}, 订单编号: {odr.order_id}, 股票代码: {odr.order_book_id}, 下单数量: {odr.amount}, 下单价格: {odr.price}")

2. 是否能无视股票当日成交量为0,在回测中仍然进行买入?

在回测环境中,下单时会受到成交量的限制,如果当日成交量为0,则下单数量会受到限制,导致下单失败。为了无视成交量限制,可以在下单前检查账户可用资金,并手动计算可以下单的最大数量。以下是一个示例代码,展示如何在下单前检查可用资金并进行买入:

def handle_bar(context, bar_dict):
    # 获取平安银行的股票代码
    stock_code = '000001.SZ'
    
    # 获取当前账户可用资金
    available_cash = context.portfolio.cash
    
    # 获取平安银行的最新价格
    price = bar_dict[stock_code].close
    
    # 计算可以买入的最大数量
    max_amount = int(available_cash / price)
    
    # 下单买入最大数量
    order(stock_code, max_amount)

通过上述代码,可以在回测中无视当日成交量为0的情况,根据账户可用资金进行买入操作。请注意,这仅适用于回测环境,实际交易中仍需遵守成交量限制。

评论