策略解析:StatisticalArbitrageStrategy (统计套利)

源码文件: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 中计算布林带: 1 2 self.boll_mid = self.am.sma(self.boll_window) self.boll_up, self.boll_down = self.am.boll(self.boll_window, self.boll_dev) 3.2 交易信号 策略逻辑非常清晰,分为三种状态: 空仓时 (spread_pos == 0): 做空价差:价差 > 上轨 (boll_up)。预期价差回归下跌。 做多价差:价差 < 下轨 (boll_down)。预期价差回归上涨。 1 2 3 4 if 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): ...

May 12, 2025 · 1 min

VN.PY SpreadTrading 策略模板与通用接口详解

在进行价差交易(套利)开发前,必须理解 vnpy_spreadtrading.template 提供的基础框架。与 CTA 策略不同,价差交易涉及多条腿(Legs)的同步操作,因此引入了“算法执行”的概念。 1. SpreadStrategyTemplate:策略的大脑 所有价差策略都继承自 SpreadStrategyTemplate。 1.1 核心回调函数 回调函数 触发时机 典型用途 on_init 策略初始化 初始化变量,加载历史数据 on_start 策略启动 标记状态 on_spread_data 价差行情更新 核心逻辑区:判断价差是否满足开平仓条件 on_spread_pos 价差持仓更新 监听持仓变化,决定下一步动作 on_spread_algo 算法状态更新 监听算法执行进度(如算法完成、停止) 1.2 算法启动接口 价差交易不直接发单(不调用 buy/sell),而是启动一个算法 (Algo) 来负责执行。 这是因为买入一个价差通常意味着“买入腿A + 卖出腿B”,必须保证原子性或滑点控制。 买入价差 (Long Spread): 1 self.start_long_algo(price, volume, payup, interval, lock) price: 价差限价 volume: 数量 payup: 超价跳数(用于保证成交) interval: 撤单重发间隔 lock: 是否锁仓(针对上期所) 卖出价差 (Short Spread): 1 self.start_short_algo(price, volume, payup, interval, lock) 1.3 停止算法 stop_algo(algoid): 停止特定算法 stop_all_algos(): 停止所有正在运行的算法 2. SpreadAlgoTemplate:执行的手脚 策略只负责“决定要做什么”,而 SpreadAlgoTemplate 负责“具体怎么做”。 ...

May 11, 2025 · 1 min