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

聚宽实盘下单:如何为不同板块显式设置 MarketOrderStyle?

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

问题描述



Title: 聚宽实盘下单:如何为不同板块显式设置 MarketOrderStyle?

Question: 如何在聚宽实盘下单时根据买卖方向设置限价滑点,并为深交所和科创板标的显式指定订单价格?

解决方案

在聚宽(JoinQuant)平台进行量化交易时,为了保证订单能够顺利成交并控制交易成本,合理设置**滑点(Slippage)以及针对不同板块(如科创板、深交所)显式指定下单样式(OrderStyle)**至关重要。本文将详细介绍如何实现这些高级下单控制。


一、 如何根据买卖方向设置限价滑点

在聚宽中,默认的滑点是 PriceRelatedSlippage(0.00246)。如果您想自定义滑点,可以使用 set_slippage 函数。对于限价单或市价单,滑点的撮合逻辑如下:

  • 买入/开多/平空时:成交价格 = 当时平均价格 + 价差的一半(或加上设定的滑点)。
  • 卖出/开空/平多时:成交价格 = 当时平均价格 - 价差的一半(或减去设定的滑点)。

1. 设置全局或特定品种滑点

您可以在 initialize 初始化函数中,使用以下方法设置滑点:

# 设置股票滑点为百分比滑点(双边 0.2%)
set_slippage(PriceRelatedSlippage(0.002), type='stock')

# 或者设置固定值滑点(例如 0.02 元,买入时加 0.01 元,卖出时减 0.01 元)
set_slippage(FixedSlippage(0.02), type='stock')

二、 为科创板标的显式指定市价单保护价(MarketOrderStyle)

科创板(688xxx)在进行市价单委托时,必须指定保护限价(limit_price),否则会导致委托失败。聚宽提供了 MarketOrderStyle(limit_price) 来支持这一规则。

科创板保护价撮合逻辑:

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

示例代码:

# 假设当前科创板标的 688001 最新价为 10.0 元
# 买入 200 股,设置保护价为 10.5 元(买入成交价不得高于 10.5 元)
order('688001.XSHG', 200, style=MarketOrderStyle(10.5))

# 卖出 200 股,设置保护价为 9.5 元(卖出成交价不得低于 9.5 元)
order('688001.XSHG', -200, style=MarketOrderStyle(9.5))

三、 为深交所等普通标的显式指定限价单价格(LimitOrderStyle)

对于深交所(.XSHE)或上交所主板标的,如果您不想使用市价单,而是希望以特定价格挂单,应当显式使用 LimitOrderStyle(limit_price)

示例代码:

# 显式以 12.5 元的限价买入平安银行(深交所标的)100 股
order('000001.XSHE', 100, style=LimitOrderStyle(12.5))

# 显式以 13.0 元的限价卖出平安银行 100 股
order('000001.XSHE', -100, style=LimitOrderStyle(13.0))

四、 综合下单策略模板

以下是一个完整的策略初始化与下单逻辑模板,展示了如何自动识别标的板块并采用不同的 OrderStyle 进行安全下单:

import jqdata

def initialize(context):
    # 开启真实价格模式
    set_option('use_real_price', True)
    # 设置沪深300为基准
    set_benchmark('000300.XSHG')
    # 设置滑点
    set_slippage(PriceRelatedSlippage(0.002), type='stock')
    
    # 运行调仓
    run_daily(trade_logic, time='every_bar')

def trade_logic(context):
    # 待操作的标的列表
    test_stocks = ['688001.XSHG', '000001.XSHE']
    current_data = get_current_data()
    
    for stock in test_stocks:
        # 过滤停牌
        if current_data[stock].paused:
            continue
            
        last_price = current_data[stock].last_price
        
        # 1. 科创板标的:使用带保护价的市价单买入
        if stock.startswith('688'):
            # 设置买入保护价为当前价的 102%
            buy_protect_price = round(last_price * 1.02, 2)
            order(stock, 200, style=MarketOrderStyle(buy_protect_price))
            log.info(f"科创板市价买入委托:{stock},保护价:{buy_protect_price}")
            
        # 2. 普通深交所/上交所主板标的:使用限价单买入
        else:
            # 以当前最新价挂限价单
            order(stock, 100, style=LimitOrderStyle(last_price))
            log.info(f"普通板块限价买入委托:{stock},限价:{last_price}")