[策略] Stg_20_Double_Diagonal_Spread
作者: 宋沛恒
日期: 2025-09-22
目录
[toc]
版本
- V1.0 – 2025-09-22 初版。
原理
概述
在期权市场中,不同期限的隐含波动率(以下简称 IV)水平通常不同。其差异受多种因素影响,如市场大幅波动、市场流动性不平衡、做市商的报价意愿等等。IV 期限结构一般存在可以转换的两种形态:
- 升水,即远期 IV > 近期 IV
- 贴水,即远期 IV < 近期 IV
本策略通过对期权市场 IV 期限结构的拟合,在近月和远月上做相反的期权跨式操作,以期获得不同期限间 IV 的变化之差所带来的利润。
符号说明
本文档将使用以下符号:
- 同一数据切片 个期限的到期时间向量 ,在 t 时刻,
表示由近到远不同期限的到期时间。
- 同一数据切片 个期限的 向量 ,在 t 时刻,
表示由近到远不同期限的 。
其余标红参数可参考下方策略参数设置章节。
策略因子计算
线性回归
假设 与 存在如下相关关系:
注:
- 中所有元素均需大于 .
- 若 或 长度仅为 1,则跳过此时间切片。
对其进行线性回归,可得回归系数:
计算回归系数的移动Z-Score
对线性回归得到的 和 求 个窗口的Z-Score, 和 , 以下简记为 和 , 具体算法详见 ZScore.md.
开仓逻辑
开仓条件
每当切片数据到达,计算如下条件(布尔值):
寻找适合开仓的跨式组合
在所有的到期日中,取 大于 且最早的两个到期日,其中近月记作 ,远月记作 , 分别寻找一对期权,组成一个共4腿的跨期跨式组合。具体参数说明及计算方法详见 Func_DeltaNeutralCalendarStrangle.md. 将这一过程记作:
,其中 , 为当前标的VWAP价格。
开仓
首先判定是否满足时间条件:
- 近月合约的 大于 ; (注:在上一步中找到的组合必然满足这一条件,无需重复判断)
- 例如: ,近月合约下周三到期,则必须在本周五或更早开仓;
- 当前时间位于上午 9:40 和下午 14:55 之间。
若满足时间条件,且 LongFilter 成立时,寻找对应的跨式组合:
若存在满足条件的组合,则做多远月的跨式组合 ,同时做空近月的跨式组合 ,记为多头;
若满足时间条件,且 ShortFilter 成立时,寻找对应的跨式组合:
若存在满足条件的组合,则做空远月的跨式组合 ,同时做多近月的跨式组合 ,记为空头。
其他说明
- 本策略适用于中国国内的 ETF 期权市场,其余市场有待进一步测试。
- 本策略的数据源是 ETF 期权的 10 秒切片及其衍生数据,包括到期时间、各期限的 ,以及近月和次近月期权的 Greeks 数值。
开发文档
开盘预处理
如果初次运行,本策略需要在开盘前读取至少前若干交易日的切片数据并计算交易信号,具体计算方法见下方交易信号计算章节。 如果策略已经存储好若干个交易日的因子计算结果,则需要按时间读入该文件,并做好新数据传入的准备。
交易信号计算
切片过滤
-
由于期权市场绝大部分流动性由做市商提供,而在开盘后或者收盘前的短时间内,做市商一般不会提供优质报价。因此,在本节后续所有计算之前,需要对切片数据进行过滤,以保证计算的准确性。具体来说,除以下数据切片数区间(闭区间)之外的其他切片都需要被设置为空值:
- [3431, 4132]
- [4685, 5380]
因子计算
具体计算伪代码如下,需保留 , , , , 和 以供核对:
输入: 时间切片 t, 当前时间 current_dt, 到期日列表 ExpList[t]
输出: Z_beta[win_z][t], Z_alpha[win_z][t]
Step 1: 计算ATMIV
对每个时间切片 t:
定义 T[t] 为各到期日Tenor序列, ATMIV[t]为与前者一一对应的平值隐波序列, 其中T[t]中所有元素均需大于 TTM_min.
对每个到期期限 i:
ATMIV[t][i] = ATMVol(MAWd=1, i) # 调用库中已有函数
T[t][i] = ExpList[t][i] - current_dt
Step 2: 最小二乘回归
对每个时间切片 t:
若 len(ATMIV[t]) ≤ 1 或 len(T[t]) ≤ 1: 跳过该切片
y = log(ATMIV[t])
X = T[t]
通过最小二乘法求解y对X回归的斜率beta[t]和截距alpha[t]。最小二乘法求解的C++示例代码见Func_SimpleLinearRegressionCholesky.md.
Step 3: 计算Z-Score (具体算法见 ZScore.md)
Z_beta[win_z][t] = Z_score(beta, win_z, t)
Z_alpha[win_z][t] = Z_score(alpha, win_z, t)
开仓逻辑
具体逻辑伪代码如下:
输入: 时间切片 t, 当前时间 current_dt, 到期日列表 ExpList[t], 组合加总 Delta 上限 delta_max,
多头组合加总 Theta 下限 theta_min, 跨式组合距离限制 d_limit
输出: 交易信号和跨式组合
Step 0: 寻找到期日
取 ExpList 中最早的两个大于 TTM_min 的到期日 E_front, E_back
Step 1: 时间条件检查
若 09:40 ≤ current_dt ≤ 14:55 则继续,否则跳过
Step 2: 寻找跨期跨式组合 (具体算法见Func_DeltaNeutralCalendarStrangle.md)
C_{long, E_front}, C_{long, E_back}, P_{long, E_front}, P_{long, E_back} = f(long, E_front, E_back, delta_max, theta_min, d)
C_{short, E_front}, C_{short, E_back}, P_{short, E_front}, P_{short, E_back} = f(short, E_front, E_back, delta_max, theta_min, d)
Step 3: 计算过滤条件
LongFilter = Z_beta[win_z][t] < - Z_open
ShortFilter = (Z_beta[win_z][t] > Z_open) and (Z_alpha[w][t] < - Z_open)
Step 4: 开仓判断
若 LongFilter 成立:
做多远月{C_{long, E_back}, P_{long, E_back}},做空近月{C_{long, E_front}, P_{long, E_front}}, 记为多头
若 ShortFilter 成立:
做空远月{C_{short, E_back}, P_{short, E_back}},做多近月{C_{short, E_front}, P_{short, E_front}}, 记为空头
否则: 该切片无操作
持仓信息记录与更新
在开仓后,策略应记录
- : 开仓时的各腿总价值(多头减去空头)
- : 当前切片 各腿总价值(多头减去空头)
盘后处理
最近5个交易日的 和 的计算结果需要实时记录,并于盘后按照时间顺序存储成文件,以便下一交易日开始时可以读取。文件应采用先进先出的原则,只保留最新5日的数据。
平仓逻辑
以下平仓逻辑均在 09:40 ≤ current_dt ≤ 14:55 时进行判断:
-
多头Theta平仓:
如果多头组合中的 Theta 小于 -1, 即平掉所有仓位。特别地,当组合中涉及的任一到期日的曲面的均方误差大于 时,应视为 Theta 无法准确计算,从而跳过此判定条件。
-
到期平仓:
当组合中有某腿 小于等于 即可平掉所有仓位。
- 例如: , 组合中某腿本周三收盘到期,则可以在周一下午14:00开始平仓。
-
条件平仓:
- 当组合为多头,而 ShortFilter = 1 时,平掉所有仓位;
- 当组合为空头,而 LongFilter = 1 时,平掉所有仓位。
-
价值止损平仓:
当 时,平掉所有仓位。其中 为标的当前价格, 为所有开仓合约单位的平均值。
交易执行逻辑
- 在开仓信号发出时,应计算组合各腿预计保证金金额 (需要考虑组合保证金情况,空头可节省一腿的保证金), 以及策略分配的资金总额 . 则组合各腿开仓数量均为 .
- 本策略暂时只在10s切片数据到达时计算开平仓,与切片间的行情数据无关。
- 本策略现阶段应保证组合内各腿均成交一手,再开下一组。具体开仓执行算法见
Exec_11_Option4LegsOpen.md. 若开仓执行算法返回 ,则暂停该参数组开仓10分钟,平仓正常执行。 - 平仓时,可按照
Exec_12_OptionSingleLeg.md平仓。 - 本策略在开平仓期间需记录成交状态,若由于系统宕机等导致交易中断时,可以在恢复时继续交易,追单交易次数设置上限为20次。
- 本策略的多头仓位允许用于策略间仓位的抵消,而空头仓位不允许。
策略参数设置
| 参数名 | 示例值 | 说明 |
|---|---|---|
| 1440 | Z-Score滚动计算周期(单位:10秒切片数量) | |
| 1.0 | 开仓距离 | |
| 0.1 | 跨式组合距离限制 | |
| 0.2 | 组合加总 Delta 上限 | |
| 3 | 最晚开仓时间(单位:交易日) | |
| 2.25 | 临近到期平仓时间(单位:交易日) | |
| 0.5 | 多头组合加总 Theta 下限 | |
| 0.02 | 价值止损平仓比例 | |
| 0.0005 | 均方误差上限 |
策略信号核对表
| 参数名 | 说明 |
|---|---|
Strategy | 策略名称 |
ParameterGroup | 策略参数组 |
ATMIV | 平值隐波序列 |
T | 到期时间序列 |
beta[t] | 回归 beta |
alpha[t] | 回归 alpha |
Z_beta[win_z][t] | beta Z-Score |
Z_alpha[win_z][t] | alpha Z-Score |
C_{long, E_front}, C_{long, E_back}, P_{long, E_front}, P_{long, E_back} | 多头跨期组合的合约ID(可为空) |
C_{short, E_front}, C_{short, E_back}, P_{short, E_front}, P_{short, E_back} | 空头跨期组合的合约ID(可为空) |