🚀 AI 一键生成 joinquant 策略代码

JoinQuant 教程:如何正确交易科创板股票?(MarketOrderStyle 保护价详解)

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

问题描述

如何在科创板股票交易中使用市价单?

解决方案

在聚宽(JoinQuant)平台进行科创板(股票代码以 688 开头)的市价单交易时,必须指定保护价(limit_price)。这是根据科创板交易规则要求的,旨在防止市场价格剧烈波动时产生超出预期的成交价格。

以下是具体的实现方法和代码示例。

核心要点

  1. 必须使用 MarketOrderStyle:不能仅传递 None 或省略样式参数。
  2. 必须传入 limit_price
    • 买入时limit_price保护限价上限,即成交价格不得高于此价格。若最优一档价格高于此价格,则无法成交。
    • 卖出时limit_price保护限价下限,即成交价格不得低于此价格。若最优一档价格低于此价格,则无法成交。

代码示例

以下是一个完整的策略片段,展示了如何在 handle_data 中对科创板股票下达市价委托。

# -*- coding: utf-8 -*-
def initialize(context):
    # 设置科创板股票代码,例如:华兴源创
    g.security = '688001.XSHG'
    # 设定基准
    set_benchmark('000300.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    # 每天运行
    run_daily(market_open, time='every_bar')

def market_open(context):
    # 获取当前最新价格
    current_data = get_current_data()
    current_price = current_data[g.security].last_price
    
    # --- 买入示例 ---
    # 假设我们要买入200股(科创板单笔申报数量不小于200股)
    # 设定保护价为当前价格的 102% (即最高能接受比当前价贵2%)
    buy_protect_price = current_price * 1.02
    
    # 下单:市价买入,指定保护价
    # 如果不指定 MarketOrderStyle(buy_protect_price),订单会失败
    order(g.security, 200, MarketOrderStyle(limit_price=buy_protect_price))
    log.info("市价买入 %s, 保护价: %.2f" % (g.security, buy_protect_price))

    # --- 卖出示例 ---
    # 假设我们持仓中有该股票,现在要卖出
    # 设定保护价为当前价格的 98% (即最低能接受比当前价便宜2%)
    if context.portfolio.positions[g.security].closeable_amount >= 200:
        sell_protect_price = current_price * 0.98
        
        # 下单:市价卖出,指定保护价
        order(g.security, -200, MarketOrderStyle(limit_price=sell_protect_price))
        log.info("市价卖出 %s, 保护价: %.2f" % (g.security, sell_protect_price))

详细参数说明

orderorder_targetorder_value 函数中,style 参数需要设置为 MarketOrderStyle 对象:

  • 语法MarketOrderStyle(limit_price)
  • 参数limit_price (float),即保护价。

常见错误提示

如果您在科创板交易中使用了市价单但未设置保护价(例如直接使用 order('688xxx.XSHG', 200)MarketOrderStyle() 不带参数),系统通常会报错或提示:

"科创板市价单未指定保护价" 或 类似的验证失败信息。


Q&A

Q: 科创板市价单如果不设置保护价会怎样?
A: 在聚宽回测和模拟交易中,如果不设置保护价,订单创建会失败(返回 None),并在日志中出现错误提示。这是为了符合交易所关于科创板市价申报必须包含保护限价的规定。

Q: 保护价设置多少比较合适?
A: 这取决于您的策略对滑点的容忍度。通常策略会设置为当前价格的一定比例(如买入设为现价的 102% 或 105%,卖出设为 98% 或 95%)。如果保护价设置得过于苛刻(例如买入保护价低于当前卖一价),订单将无法成交。

Q: order_target 函数可以使用带保护价的市价单吗?
A: 可以。用法相同,例如:order_target(g.security, 1000, MarketOrderStyle(limit_price=50.0))。注意,如果是调仓(可能买也可能卖),您需要先判断是买还是卖,从而决定保护价是应该高于现价还是低于现价,否则可能导致保护价逻辑错误(例如卖出时保护价设得比现价高很多,导致无法成交)。

Q: 科创板的最小交易数量是多少?
A: 科创板股票通过限价申报买卖的,单笔申报数量应当不小于 200 股,且可以以 1 股为单位递增(如 201 股)。市价申报同理。在编写策略时请注意 amount 参数不要小于 200。