专享策略22 | 跨品种套利策略:基于范围过滤器的量化交易方法

松鼠Quant
2025-06-03


图片
量化策略开发,高质量社群,交易思路分享等相关内容

工具推荐

· 参数筛选工具

Ai帮你编写策略

· 订单流图表

· 加入2025俱乐部

· Ai投研助手课程

『正文』

ˇ

策略概述

跨品种套利是一种常见的量化交易策略,它通过捕捉两个相关品种之间的价差变化来获利。本文介绍的vip22策略是一种基于范围过滤器(Range Filter)的跨品种套利策略。

该策略的核心思想是:

  1. 计算两个品种价格比率的动态范围

  2. 当比率突破上轨时做多价差(买焦炭/卖焦煤)

  3. 当比率突破下轨时做空价差(卖焦炭/买焦煤)

  4. 使用动态止损机制控制风险

数学原理

1. 平滑范围(Smooth Range)计算

平滑范围是策略的核心指标,用于确定价差的动态边界。它通过两层指数移动平均(EMA)计算得出:

第一层EMA:

图片

第二层EMA:

图片

最终平滑范围:

图片

2. 范围过滤器(RanAge Filter)

范围过滤器用于生成动态的交易信号通道:

图片

3. 趋势计数

策略还计算了向上和向下的连续趋势计数:

图片

策略实现

核心代码结构































def vip22_strategy_optimized(api: StrategyAPI):    """    vip22跨品种套利策略主函数(高度优化版本)    基于价差的范围过滤器进行交易决策    使用缓存和增量计算大幅提高性能    """       # 1. 获取参数和数据ifnot api.require_data_sources(2):return
    # 2. 计算技术指标(增量方式)iflen(g_state['filt_history']) < 2:return
    curr_filt = g_state['filt_history'][-1]        curr_upward = g_state['upward_history'][-1]       curr_downward = g_state['downward_history'][-1]curr_filt = g_state['filt_history'][-1]    curr_upward = g_state['upward_history'][-1]    curr_downward = g_state['downward_history'][-1]
    # 3. 计算交易条件    long_cond = (curr_source > curr_filt and                (curr_source != prev_source) and                curr_upward > g_state['x_filter'])      short_cond = (curr_source < curr_filt and                   (curr_source != prev_source) and                    curr_downward > g_state['x_filter'])
    # 4. 执行交易逻辑        execute_trading_logic(api, pos_data0, pos_data1, long_cond, short_cond,                                                       curr_source, prev_source, chigh, clow,                                 lots_0, lots_1, bar_idx)

增量计算优化

为了提高性能,策略采用了增量计算技术:




















def smooth_range_incremental(price_diff, period, s_range, ema_state):    """    增量计算SmoothRange函数    """   alpha1 = 2.0 / (period + 1)       alpha2 = 2.0 / (period * 2 - 1 + 1)        # 第一层EMA        if ema_state['avrng1'] is None:           ema_state['avrng1'] = price_diff           else:               ema_state['avrng1'] = alpha1 * price_diff + (1 - alpha1) * ema_state['avrng1']       # 第二层EMA        if ema_state['smooth_avrng1'] is None:              ema_state['smooth_avrng1'] = ema_state['avrng1']        else:               ema_state['smooth_avrng1'] = alpha2 * ema_state['avrng1'] + (1 - alpha2) * ema_state['smooth_avrng1']       return ema_state['smooth_avrng1'] * s_range

交易逻辑实现


















def execute_trading_logic(api, pos_data0, pos_data1, long_cond, short_cond,                          curr_source, prev_source, chigh, clow,                          lots_0, lots_1, bar_idx):    """    执行交易逻辑的辅助函数 - 套利策略同开同平版本    """    # 检查是否有持仓    has_position = (pos_data0 != 0or pos_data1 != 0)        ifnot has_position: # 无持仓时,同时开仓            if long_cond:   # 价差向上突破,做多价差                api.buy(volume=lots_0, order_type='next_bar_open', index=0)                api.sellshort(volume=lots_1, order_type='next_bar_open', index=1)                  else:   # 有持仓时,检查平仓条件           should_close = check_exit_conditions(pos_data0, pos_data1, curr_source, prev_source, chigh, clow)          if should_close:               # 平仓两个品种               close_positions(api, pos_data0, pos_data1)

策略优势

  1. 动态适应市场:范围过滤器能自动调整通道宽度,适应不同波动率环境

  2. 趋势过滤:通过趋势计数避免假突破,提高信号质量

  3. 风险控制:动态止损机制根据市场波动调整止损位

  4. 套利特性:同时交易两个相关品种,对冲系统性风险


图片
图片

图片

Tbquant版本(24年之后为样本外,参数为平原参数):
图片
图片
图片
图片
IH-IC套利
图片
IF-IM套利
图片
RB-i套利
图片


参数筛选
图片

第一个图是交易次数(y),夏普率(x),净利润(z)构建的三维图,我们可以观察参数的大体分布情况。

图片

从交易次数截面看,这个策略的主要参数密集区域在100-200之间并且高利润区域的也在这里,随着交易次数的增加净利润逐渐降低。对于手续费及交易次数较为敏感,属于中低频交易策略。

图片

我们选择出夏普率与净利润交集部分的前20%数据。

图片

图片

筛选出非孤岛参数,尽量避免选择过优参数域。

Python版本
使用松鼠QuantAi量化交易回测框架:松鼠QuantAi+回测框架详细版教程,以JM和J为例:
图片

图片


应用建议

  1. 适用于高相关性的品种对,如焦炭/焦煤、豆粕/豆油等

  2. 建议在30分钟或1小时周期上运行

  3. 需要根据品种特性调整参数,特别是fast_period和fast_range

  4. 建议配合资金管理模块使用,控制单次交易风险

通过这种基于范围过滤器的跨品种套利策略,交易者可以系统性地捕捉相关品种间的价差机会,同时通过动态通道和止损机制控制风险。增量计算等优化技术使得策略能够高效运行,适合实盘交易环境。


文件包:

图片

防迷路


           图片

微   信|小松鼠-松鼠Quant

微信号|viquant01

25俱乐部源码VIP22》

加入2025量化俱乐部


分享