3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
根据聚宽(JoinQuant)的交易引擎机制,在非交易时段(如开盘前或收盘后)下单,订单不会立即失败,而是会生成一个订单对象并进入**挂单(Pending)**状态,等待下一个交易时间窗口进行撮合。
具体处理逻辑取决于您下单的具体时间点:
open),等待 09:30 开盘。这是最需要注意的情况:
before_trading_start (09:00) 或 handle_data (09:30) 中下单。| 下单时间 | 订单状态 | 处理结果 |
|---|---|---|
| 09:00 - 09:30 | 挂单 (Open) | 等待 09:30 开盘撮合 |
| 11:30 - 13:00 | 挂单 (Open) | 等待 13:00 开盘撮合 |
| 15:00 - 16:00 | 挂单 (Open) | 无法成交,并在当日结算时被系统自动撤单 |
如果您希望在非交易时间下单并立即以收盘价成交(仅用于特定研究目的,不符合真实交易规则),可以在 initialize 中开启实验性选项:
# 总是撮合市价单,支持在非交易时间下市价单,按照最新的数据立即撮合
set_option("always_match_market_order", True)
注意:这属于未来函数的一种形式,实盘中无法实现,不建议在严谨的策略中使用。
Q: 如果我想在收盘后根据今天的收盘价决定明天的买卖,代码应该写在哪里?
A: 应该写在 before_trading_start 函数中(每天 09:00 运行),或者使用 run_daily 设置在 09:30 运行的函数中。在这些函数里,您可以获取昨天的收盘数据进行判断,并下达当天的订单。
Q: 为什么我在 after_trading_end (15:30) 下单没有报错,但第二天持仓没变化?
A: 因为 after_trading_end 运行时市场已收盘。虽然下单函数返回了订单对象(代表下单动作成功),但由于市场关闭无法撮合,该订单处于“未完成”状态。聚宽系统会在当天结算时自动撤销所有未完成订单,因此该订单不会延续到第二天。
Q: 集合竞价期间(09:15-09:25)的订单怎么处理?
A: 在聚宽的回测和模拟中,09:30 之前下的单通常统一在 09:30 开盘时刻进行撮合处理。如果您使用的是 Tick 级回测,逻辑会更接近交易所实盘,但在分钟/日级回测中,效果等同于开盘撮合。