3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant (聚宽) 平台中,order 函数默认下的是市价单 (MarketOrder)。您遇到的“T字板(涨停)没有成交”的现象,正是由市价单在回测引擎中的撮合逻辑决定的。
根据 JoinQuant 的 API 文档,在未启用盘口撮合(回测默认情况)时,市价单的撮合逻辑如下:
当股票出现 T字板(通常指开盘即涨停,盘中可能打开但收盘仍涨停,或者全天封死涨停)时,价格处于涨停价。
您代码中的 order(g.security, 100) 是一个市价买单。当引擎尝试撮合时,发现当前价格已经涨停,根据上述规则,市价买单会被直接撤销,而不会像真实交易软件中那样挂单排队。因此,您看到的结果是没有成交。
如果您希望在涨停板或跌停板时,订单能够挂单排队等待成交(例如 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)。