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

joinquant 精细化回测:如何使用 set_slippage 设置固定与百分比滑点?

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: joinquant 精细化回测:set_slippage 设置固定与百分比滑点

Question: 如何在 joinquant 中设置自定义滑点模型?

解决方案

JoinQuant 精细化回测:set_slippage 设置自定义滑点模型

在实际交易中,最终成交价往往与期望下单价格存在偏差,这种偏差被称为滑点(Slippage)。为了更真实地模拟市场撮合,聚宽平台提供了 set_slippage API,允许开发者针对股票、基金、期货等不同标的设置自定义滑点模型。


1. 滑点设置 API 语法

set_slippage(object, type=None, ref=None)

参数说明

  • object: 滑点模型对象(如 FixedSlippagePriceRelatedSlippageStepRelatedSlippage)。
  • type (可选): 交易品种类别。支持 'stock'(股票)、'fund'(基金)、'futures'(期货)、'index_futures'(金融期货)等。默认为 None(应用于全局)。
  • ref (可选): 具体标的代码(如 '000001.XSHE')或品种(如 'CU')。仅在指定 type 时生效。

注意:如果不显式调用 set_slippage,系统默认使用 PriceRelatedSlippage(0.00246)(即单边 0.123% 的百分比滑点)。所有货币基金(mmf / money_market_fund)滑点默认为 0 且不可修改。


2. 三种核心滑点模型及示例

(1) 固定值滑点 (FixedSlippage)

无论成交价格和下单量多少,买卖双方各自承担固定金额的价差偏移。

  • 买入成交价 = 当前平均价 + (固定价差 / 2)
  • 卖出成交价 = 当前平均价 - (固定价差 / 2)
# 设置全场固定价差为 0.02 元(即单边滑点 0.01 元)
set_slippage(FixedSlippage(0.02))

(2) 百分比滑点 (PriceRelatedSlippage)

按当前价格的一定比例计算滑点,适合股票和基金回测。

  • 买入成交价 = 当前价格 × (1 + 百分比 / 2)
  • 卖出成交价 = 当前价格 × (1 - 百分比 / 2)
# 为股票设置 0.246% 的比例滑点
set_slippage(PriceRelatedSlippage(0.00246), type='stock')

(3) 跳数滑点 (StepRelatedSlippage) — 期货专用

按合约的最小变动价位(跳数)计算双边滑点。滑点计算时单边向下取整。

# 设置所有期货品种滑点为 2 跳
set_slippage(StepRelatedSlippage(2), type='futures')

# 为螺纹钢 RB1809 单独设置 2 跳滑点
set_slippage(StepRelatedSlippage(2), type='futures', ref='RB1809.XSGE')

3. 在策略中的完整使用代码示例

以下代码展示了如何在 initialize 初始化函数中,为不同交易品种精确配置滑点:

import jqdata

def initialize(context):
    # 开启动态复权(真实价格)模式
    set_option('use_real_price', True)
    
    # 1. 为股票设置 0.2% 的百分比滑点
    set_slippage(PriceRelatedSlippage(0.002), type='stock')
    
    # 2. 为特定股票设置固定 0.02 元价差滑点
    set_slippage(FixedSlippage(0.02), type='stock', ref='000001.XSHE')
    
    # 3. 为商品期货设置 2 跳滑点
    set_slippage(StepRelatedSlippage(2), type='futures')

def handle_data(context, data):
    # 策略交易逻辑示例
    if context.portfolio.available_cash > 0:
        order('000001.XSHE', 100)