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

如何在 JoinQuant 处理“科创板市价单需要指定保护限价”报错?

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

问题描述

如何处理error 科创板市价单需要指定保护限价?

使用order_target Value 会出现
科创板市价单需要指定保护限价
各位如何处理?

解决方案

报错原因分析

在 JoinQuant(聚宽)平台上交易科创板股票(代码以 688 开头,后缀为 .XSHG)时,根据交易所的交易规则,科创板的市价申报必须指定保护限价。如果没有指定保护限价,系统就会抛出 科创板市价单需要指定保护限价 的错误。

保护限价的逻辑如下:

  • 市价买入时:成交的最高价格不高于该保护限价,若最优一档的价格高于该价格,剩余未成交部分撤单。
  • 市价卖出时:成交的最低价格不低于该保护限价,若最优一档的价格低于该价格,剩余未成交部分撤单。

解决方法

在使用 order_target_value(或其他下单函数如 order, order_target, order_value)时,需要通过 style 参数传入带有保护限价的 MarketOrderStyle 对象。

代码示例

假设你要将科创板股票 688001.XSHG 的仓位调整到 10000 元,并且设置保护限价为 10 元,正确的写法如下:

# 导入聚宽函数库
from jqdata import *

def handle_data(context, data):
    security = '688001.XSHG'
    target_value = 10000
    
    # 获取当前价格作为参考,或者根据你的策略计算出一个合理的保护价
    # 这里假设我们以当前价格的 1.02 倍作为买入保护限价(防止买得太贵)
    current_price = data[security].close
    protect_price = current_price * 1.02 
    
    # 使用 MarketOrderStyle 指定保护限价
    order_target_value(security, target_value, style=MarketOrderStyle(protect_price))

其他下单函数的对应写法

不仅是 order_target_value,其他下单函数处理科创板市价单的方式也是一样的:

# 按股数下单:买入 200 股,保护价 10 元
order('688001.XSHG', 200, MarketOrderStyle(10))

# 目标股数下单:调整仓位至 100 股,保护价 10 元
order_target('688001.XSHG', 100, MarketOrderStyle(10))

# 按价值下单:买入价值 10000 元的股票,保护价 10 元
order_value('688001.XSHG', 10000, MarketOrderStyle(10))

总结建议

在编写涉及全市场选股的策略时,建议在下单前对股票代码进行判断。如果是科创板股票(security.startswith('688')),则动态计算一个保护限价(例如现价的 ±2%)并传入 MarketOrderStyle(limit_price);如果是普通 A 股,则可以直接使用默认的市价单。