🚀 AI 一键生成 joinquant 策略代码

JoinQuant 教程:如何通过 set_slippage 模拟真实的交易滑点?

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

问题描述

如何为我的策略设置不同的滑点模式,特别是期货的跳数滑点?

解决方案

在聚宽(JoinQuant)平台中,您可以在 initialize 函数中使用 set_slippage API 来设置滑点。系统支持固定值滑点、百分比滑点以及专门针对期货的跳数滑点

以下是关于如何设置不同滑点模式的详细说明和代码示例。

1. 设置滑点的方法

函数原型:set_slippage(object, type=None, ref=None)

  • object:滑点对象(FixedSlippage, PriceRelatedSlippage, StepRelatedSlippage)。
  • type:交易品种,如 'stock' (股票), 'fund' (基金), 'futures' (期货) 等。
  • ref:具体的标的代码(如 'RB1809.XSGE'),用于对特定合约单独设置。

2. 期货跳数滑点 (StepRelatedSlippage)

这是您最关心的部分。跳数滑点允许您根据合约的“最小变动价位”(Tick size)来设置滑点,这在期货交易中非常实用。

  • 设定方式StepRelatedSlippage(N)
  • 含义:N 代表滑点的跳数。
  • 计算逻辑:单边滑点成本 = 最小变动价位 × N / 2。
    • 例如:螺纹钢(RB)最小变动价位是 1元/吨。
    • 如果您设置 StepRelatedSlippage(2),则单边滑点为 1 * 2 / 2 = 1元
    • 买入时,成交价 = 现价 + 1元;卖出时,成交价 = 现价 - 1元。

3. 代码实现示例

请将以下代码放入您的策略中的 initialize 函数内:

# -*- coding: utf-8 -*-
def initialize(context):
    # 设定基准
    set_benchmark('000300.XSHG')
    
    # ------------------------------------------------------
    # 1. 设置期货的跳数滑点 (重点)
    # ------------------------------------------------------
    
    # 【场景A】为所有期货品种设置统一的跳数滑点
    # 设置为 2跳。意味着单边交易(开仓或平仓)会产生 1个最小变动单位 的滑点成本
    set_slippage(StepRelatedSlippage(2), type='futures')
    
    # 【场景B】为特定期货品种单独设置
    # 例如:铜(CU)流动性好,设置 1跳(单边0.5个最小变动单位,系统会向下取整)
    set_slippage(StepRelatedSlippage(1), type='futures', ref='CU')
    
    # 【场景C】为特定合约单独设置
    # 例如:螺纹钢1809合约,设置 4跳
    set_slippage(StepRelatedSlippage(4), type='futures', ref='RB1809.XSGE')

    # ------------------------------------------------------
    # 2. 设置股票的滑点 (其他模式示例)
    # ------------------------------------------------------
    
    # 【固定值滑点】:FixedSlippage(0.02)
    # 无论股价多少,每股买卖滑点固定为 0.02元
    set_slippage(FixedSlippage(0.02), type='stock')
    
    # ------------------------------------------------------
    # 3. 设置基金的滑点
    # ------------------------------------------------------
    
    # 【百分比滑点】:PriceRelatedSlippage(0.002)
    # 按照成交价格的 0.2% 计算滑点
    set_slippage(PriceRelatedSlippage(0.002), type='fund')

    # 打印日志确认设置完成
    log.info("滑点设置完成")

4. 注意事项

  1. 生效范围set_slippage 只在回测和模拟交易中生效,用于模拟真实交易中的成本损耗。
  2. 默认值:如果您不调用此函数,系统默认使用的是 PriceRelatedSlippage(0.00246)(约为千分之2.46)。
  3. 跳数取整:对于 StepRelatedSlippage,如果计算出的单边滑点不是整数个最小变动单位(例如设置1跳,单边为0.5跳),系统逻辑通常是向下取整。
  4. 优先级:指定 ref(具体标的)的设置优先级高于指定 type(品种类别)的设置,高于全局设置。

Q&A

Q: 什么是跳数滑点(StepRelatedSlippage)?
A: 跳数滑点是专门针对期货等具有固定最小变动价位的品种设计的滑点模式。它以合约的“最小变动单位”(Tick)为基准计算滑点,而不是固定的金额或百分比。例如,设置2跳滑点,意味着成交价会在基准价基础上向不利方向偏移1个最小变动单位。

Q: 如何为特定的期货合约(如螺纹钢 RB)设置不同于其他期货的滑点?
A: 可以使用 set_slippage 函数的 ref 参数。例如,set_slippage(StepRelatedSlippage(2), type='futures', ref='RB') 将专门为螺纹钢品种设置2跳的滑点,而其他期货品种则遵循通用的期货滑点设置。

Q: 如果我不设置滑点,聚宽默认的滑点是多少?
A: 如果不手动调用 set_slippage,聚宽系统默认使用百分比滑点 PriceRelatedSlippage(0.00246),即交易价格的 0.246%。对于高频或对点位敏感的期货策略,建议手动修改为跳数滑点以更贴近实盘。

Q: set_slippage 函数中的 type 参数有哪些可选值?
A: type 参数支持多种资产类型,包括 'stock' (股票), 'fund' (基金), 'index_futures' (金融期货), 'futures' (包含股指和商品期货), 'bond_fund' (债券基金), 'etf' (ETF基金) 等。如果不指定 type 且 ref 为 None,则设置应用于全局所有品种。