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

JoinQuant 平台科创板市价单报错“需要指定保护限价”如何解决?

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

问题描述

order_target_value科创板报错,如何修改?

订单委托失败:StockOrder(entrust_id=1609787183 security=688111.XSHG mode=OrderTargetValue: _value=1000000.0 style=MarketOrderStyle: _limit_price=0.0 side=long action=open margin=False entrust_time=2021-01-04 09:30:00 error=科创板市价单需要指定保护限价,取值必须大于 0 且小于 1 万元)

解决方案

报错原因分析

在 JoinQuant 平台中,当您使用 order_target_value(或 orderorder_value 等下单函数)且不指定 style 参数时,系统默认使用市价单MarketOrderStyle)。

根据上交所科创板的交易规则,科创板的市价申报必须包含保护限价。保护限价是指投资者能够接受的最高买价(买入时)或最低卖价(卖出时)。如果未指定保护限价,或者限价为 0,系统就会抛出您遇到的错误:科创板市价单需要指定保护限价,取值必须大于 0 且小于 1 万元

解决方法

要解决这个问题,您需要在调用下单函数时,显式地传入 style 参数,并为其指定一个合理的保护限价。您可以选择继续使用带保护限价的市价单,或者改用限价单

方法一:使用带保护限价的市价单(推荐)

使用 MarketOrderStyle(limit_price),其中 limit_price 就是您的保护限价。

  • 买入时:成交价不得高于该保护价。
  • 卖出时:成交价不得低于该保护价。

代码示例:

# 假设您要将 688111.XSHG 的仓位调整到 1000000 元
security = '688111.XSHG'
target_value = 1000000

# 获取当前最新价作为参考(也可以使用涨跌停价等)
current_data = get_current_data()
current_price = current_data[security].last_price

# 设定保护价:例如买入时,愿意接受的最高价格为当前价上浮 2%
protect_price = current_price * 1.02 

# 使用 MarketOrderStyle 传入保护价
order_target_value(security, target_value, style=MarketOrderStyle(protect_price))

方法二:改用限价单

如果您希望以确定的价格进行委托,可以直接使用限价单 LimitOrderStyle(limit_price)

代码示例:

security = '688111.XSHG'
target_value = 1000000

# 获取当前最新价
current_data = get_current_data()
current_price = current_data[security].last_price

# 直接以当前价(或您计算出的其他价格)下限价单
order_target_value(security, target_value, style=LimitOrderStyle(current_price))

注意事项

  1. 保护价的合理性:设置保护价时,请确保它在当日的涨跌停板范围内。如果买入保护价高于涨停价,或卖出保护价低于跌停价,可能会导致废单。可以通过 get_current_data()[security].high_limitlow_limit 获取涨跌停价。
  2. 科创板交易数量规则:科创板单笔申报数量应当不小于 200 股,超过 200 股的部分,可以以 1 股为单位递增(例如 201 股、202 股)。JoinQuant 引擎在处理 order_target_value 时会自动计算股数,但了解此规则有助于排查资金不足导致的未完全成交问题。
  3. 通用性MarketOrderStyle(limit_price) 中的 limit_price 参数仅对科创板标的有效。如果您将带有保护价的 MarketOrderStyle 用于主板或中小创股票,引擎会自动忽略该保护价,按普通市价单处理。因此,您可以统一封装下单逻辑,无需为科创板单独写一套完全不同的下单函数。