源码文件:
vnpy_spreadtrading.strategies.statistical_arbitrage_strategy
1. 策略概述
StatisticalArbitrageStrategy 是一个经典的 均值回归 (Mean Reversion) 策略,应用于价差交易。 其核心假设是:两个相关性极高的品种(如豆油/棕榈油,螺纹/热卷),它们的价差会围绕一个均值波动。当价差偏离均值过大(突破布林带上轨/下轨)时,大概率会回归。
- 基类:
SpreadStrategyTemplate - 核心指标:Bollinger Bands (布林带)
- 交易逻辑:逆势交易(高抛低吸)
2. 核心参数
| 参数名 | 默认值 | 含义 |
|---|---|---|
boll_window | 20 | 布林带均线周期 |
boll_dev | 2 | 布林带标准差倍数 |
max_pos | 10 | 最大持仓量 |
payup | 10 | 算法执行时的超价跳数 |
interval | 5 | 算法撤单重发间隔(秒) |
3. 策略逻辑详解
3.1 K 线合成与指标计算
策略使用 BarGenerator 合成价差的 K 线(注意:是价差本身的 K 线,不是单腿的)。
在 on_spread_bar 中计算布林带:
| |
3.2 交易信号
策略逻辑非常清晰,分为三种状态:
空仓时 (
spread_pos == 0):- 做空价差:价差 > 上轨 (
boll_up)。预期价差回归下跌。 - 做多价差:价差 < 下轨 (
boll_down)。预期价差回归上涨。
1 2 3 4if bar.close_price >= self.boll_up: self.start_short_algo(bar.close_price - 10, self.max_pos, ...) elif bar.close_price <= self.boll_down: self.start_long_algo(bar.close_price + 10, self.max_pos, ...)- 做空价差:价差 > 上轨 (
持有空头 (
spread_pos < 0):- 平仓:价差回归到中轨 (
boll_mid) 以下。
1 2if bar.close_price <= self.boll_mid: self.start_long_algo(bar.close_price + 10, abs(self.spread_pos), ...)- 平仓:价差回归到中轨 (
持有多头 (
spread_pos > 0):- 平仓:价差回归到中轨 (
boll_mid) 以上。
1 2if bar.close_price >= self.boll_mid: self.start_short_algo(bar.close_price - 10, abs(self.spread_pos), ...)- 平仓:价差回归到中轨 (
3.3 算法执行细节
在启动算法时,策略使用了较为激进的价格设置:
- 买入时:
bar.close_price + 10 - 卖出时:
bar.close_price - 10
这实际上是为了确保算法能尽快启动并成交,因为统计套利捕捉的是瞬间的价差偏离,对执行速度要求较高。
4. 总结
StatisticalArbitrageStrategy 是价差交易中最基础也最有效的模型之一。
- 优点:逻辑简单,在震荡市(价差横盘)中表现极佳。
- 风险:如果基本面发生根本性变化(如单腿出现单边极端行情),价差可能长期不回归(“破位”),导致策略深套。因此实盘通常需要配合止损逻辑。