🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

JoinQuant量化平台order函数撮合逻辑与涨跌停板成交问题解析

joinquant | 发布时间: 2026/5/29
以下内容由 EasyQuant 生成。

问题描述

order函数的撮合成交逻辑是什么?

按天执行order函数,看上去并不是挂单成交,当有T字板的时候,并没成交

def initialize(context):
run_daily(period,time='every_bar')
g.security = '000620.XSHE'

def period(context):
order(g.security, 100)

解决方案

在 JoinQuant (聚宽) 平台中,order 函数默认下的是市价单 (MarketOrder)。您遇到的“T字板(涨停)没有成交”的现象,正是由市价单在回测引擎中的撮合逻辑决定的。

1. order 函数的默认撮合逻辑

根据 JoinQuant 的 API 文档,在未启用盘口撮合(回测默认情况)时,市价单的撮合逻辑如下:

  • 成交价格:最新价 + 滑点。
  • 涨跌停处理:若标的“最新价+滑点”不低于涨停或者不高于跌停时,跌停时市价卖单会被撤销,涨停时市价买单会被撤销

2. 为什么 T字板 没有成交?

当股票出现 T字板(通常指开盘即涨停,盘中可能打开但收盘仍涨停,或者全天封死涨停)时,价格处于涨停价。
您代码中的 order(g.security, 100) 是一个市价买单。当引擎尝试撮合时,发现当前价格已经涨停,根据上述规则,市价买单会被直接撤销,而不会像真实交易软件中那样挂单排队。因此,您看到的结果是没有成交。

3. 解决方案:使用限价单 (LimitOrder)

如果您希望在涨停板或跌停板时,订单能够挂单排队等待成交(例如 T字板盘中打开时成交),您必须使用限价单
对于限价单,JoinQuant 的逻辑是:下单时尝试按最新价+滑点撮合,剩余部分会挂单,每分钟尝试按分钟 Bar 撮合(天/分钟频率下)。

您可以将代码修改为使用 LimitOrderStyle,并将限价设置为涨停价(或您期望的价格):

from jqdata import *

def initialize(context):
    run_daily(period, time='every_bar')
    g.security = '000620.XSHE'

def period(context):
    # 获取当前数据,拿到涨停价
    current_data = get_current_data()
    high_limit = current_data[g.security].high_limit
    
    # 使用限价单下单,价格设置为涨停价
    order(g.security, 100, style=LimitOrderStyle(high_limit))

总结

  • order() 默认是市价单。
  • 回测中,市价单遇到涨停买入或跌停卖出,会直接撤单,不排队。
  • 想要排队挂单,请显式指定 style=LimitOrderStyle(price)