策略
BTC Deribit月度ATM做多跨式期权组合于低波动率体制下,入场时delta中性(跨市场:DERIBIT期权 + BINANCE永续合约作为已实现波动率信号来源,当IV分位较低AND已实现波动率正在扩张时买入波动率,设置硬性权利金止损,约每年12-20笔交易)
结局: 已放弃
BtcDeribitMonthlyAtmLongStraddleCheapVolRegime
BTC Deribit月度ATM做多跨式期权组合于低波动率体制下,入场时delta中性(跨市场:DERIBIT期权 + BINANCE永续合约作为已实现波动率信号来源,当IV分位较低AND已实现波动率正在扩张时买入波动率,设置硬性权利金止损,约每年12-20笔交易)
假设
一个针对Deribit BTC月度期权的LONG-VOLATILITY期权策略,刻意作为工厂现有空头波动率组合(每周现金担保卖出看跌期权、ETH月度铁鹰式组合)以及绝大多数纯多头、高beta投资组合(84.2% long_only,73.9% BINANCE USD-M)的OPPOSITE SIGN。同时填补了三个代表性不足的配额类别:期权交易场所(DERIBIT 3.7% 对比 >=15%目标)、跨交易场所(6.9% 对比 >=15%),以及非纯多头风险敞口。该交易是一个简单的ATM STRADDLE——在Deribit BTC上买入1份最近月度ATM看涨期权 + 1份最近月度ATM看跌期权,在建仓时近似delta中性,因此是纯粹押注波动率而非方向。至关重要的是,它NOT用永续合约头寸进行delta对冲:此前的'BTC每周Delta对冲空头宽跨式组合'因持续再对冲记账导致300秒的冒烟测试超时,在验证阶段失败。这里,Binance永续合约仅被用作已实现波动率(BTCUSDT.BINANCE 1H K线)的只读信号来源ONLY,从不进行交易,因此每根K线的运算量保持在O(1),所有IV/RV序列在__init__中预先计算为数组,并通过二分查找进行检索。机制门控:加密货币的波动率风险溢价为正ON AVERAGE(这正是空头波动率组合存在的原因),因此无条件的多头跨式期权组合必然会持续损耗时间价值。该优势仅在条件尾部情形下才能获取:当隐含波动率相对其自身历史CHEAP且已实现波动率已经在扩张AND时ONLY入场——这正是VRP发生反转、IV必须追涨RV的特定机制状态。交易频率较低(大约每个月度到期周期出现一次候选入场机会,约12-20笔交易/年),持仓5-20天,因此约0.06% RT的Deribit手续费相对于跨式组合以权利金整数百分比波动的盈亏而言可以忽略不计。
迭代9修复了Layer-3的“No trades produced”失败问题,且没有改动任何一个波动率阈值,因为我在改动任何东西之前,先在真实数据上测量了该门控:在deribit_dvol BTC + BTCUSDT 1-DAY收盘价上重放编码条件后,iv_rank<=0.30在45.5%的有效K线上触发,rv7/rv30>=1.15在26.2%上触发,iv<=1.30*rv7在49.0%上触发,而3项联合条件在1,988根K线中的188根上触发(9.5%)。边缘信号确实在触发;只是没有落地的地方——lookback_days 270只解析了9个月度周期,且每个周期只开放5天(到期日-30天),而顺序交易重放对该组合恰好返回了0笔入场记录。将lookback_days提高到365(12个周期,24种期权K线类型——保持在约600秒的期权运行墙钟时间限制以内;540天/36条腿正是这一类超时失败的临界点)并将entry_window_days提高到20后,在sandbox窗口内产生了3笔入场(2025-08-28,2026-06-02,2026-07-14;iv_rank 0.06-0.10,rv比率1.27-1.36——全部确实处于低廉IV/扩张RV的尾部区域)。由于更宽的窗口会导致跨式期权在行权价已固定之后才建仓,我添加了两个守护条件,用以PROTECT该假设,而不是放松它:min_dte_days=10(剩余期限不足10天时绝不新开跨式仓位)以及atm_drift_max=0.15(若周期的行权价偏离现货过远、已不能近似delta中性,则拒绝该周期);这两个条件都包含在产生3笔入场的重放中。第三处改动:calculate_signal(bar)现在在每根主K线上都会被调用,从而使连续的做多波动率评分得以执行(即“0已评估K线”诊断)——不过主K线仍然NOT会经过super().on_bar(),否则会运行基类无条件的调度循环,导致无视体制门控而每月都买入一个跨式组合。Layer 1静态分析通过(errors=0),模块可正常编译。其余部分与迭代-8版本代码逐字节相同:相同的导入、相同的每根K线O(1)记忆化指标计算、相同的显式rv_instrument_id选择、相同的合并权利金止损,没有底层资产/烟雾测试回退。给分析师的诚实提醒:条件尾部支持的合格月度周期大约为每年3个,而不是假设中所说的12-20个——这将是一个小样本结果,相比放宽门控以人为制造交易,我更愿意如实报告这一点。
实现
Deribit 上的做多波动率 BTC 期权策略:每个月度(最后一个周五)到期日,BUY 一份 ATM 看涨期权 + 一份 ATM 看跌期权(约 delta 中性的跨式组合)——但仅在满足条件的尾部区间内 ONLY,即 Deribit 的 DVOL 隐含波动率指数处于其滚动 30% 区间的最低 180 天区间 AND 7 天已实现波动率至少高于 15% 30 天已实现波动率 AND 隐含波动率相对已实现波动率尚未偏高(IV <= 1.30 x RV7),且跨式组合的执行价仍在现货价格的 15% 范围内,从而使该结构在建仓时近似 delta 中性。BTCUSDT.BINANCE 永续合约是主要的K线数据来源:它是展期时钟和已实现波动率信号的来源,且 NEVER 被交易。退出条件:在已支付合计权利金的 -40% 处设置硬性止损,在 +60% 处止盈,最长持有 20 天,并在到期前 72 小时强制平仓。同一时间只持有一份跨式组合,每年链上覆盖约有 3 个符合条件的周期。
验证结果
迭代历史
验证失败(Layer 3 — sandbox回测):烟雾测试超过了300秒的墙钟时间限制。这几乎总是意味着存在随历史长度扩展的逐K线运算——例如在每根K线上重新扫描完整的资金费率/补充数据序列,或在calculate_signal()/on_bar()中每次都重建列表并调用min()/sorted()。请在__init__中预先计算排序好的时间戳数组ONCE并使用bisect,或使用以时间戳为键的缓存查找,使每根K线的开销为O(log n)而非O(n)。
验证失败(Layer 3 — sandbox回测):未产生任何交易 使用的Bar类型:BTCUSDT.BINANCE-1-DAY-LAST-EXTERNAL,已处理K线数:2398 诊断信息:calculate_signal()从未被评估过(0根已评估K线)-> 没有任何主K线到达基础模板的信号路径 -> 如果你重写了on_bar(),请调用super().on_bar(bar);检查bar_type是否与该工具的数据匹配。NOT放宽入场阈值——入场逻辑根本没有运行过。 请确保你的策略在给定数据和参数下能产生交易。
验证失败(Layer 3 — sandbox回测):Arrow错误:Schema error: Fail to merge schema due to conflicting metadata. Key 'size_precision' has different values '5' and '8' 使用的Bar类型:BTCUSD.HYPERLIQUID-1-MINUTE-LAST-EXTERNAL,已处理K线数:0 请确保你的策略在给定数据和参数下能产生交易。
验证失败(Layer 3 — sandbox回测):Arrow错误:Schema error: Fail to merge schema due to conflicting metadata. Key 'price_precision' has different values '2' and '8' 使用的Bar类型:BTCUSD.HYPERLIQUID-1-MINUTE-LAST-EXTERNAL,已处理K线数:0 请确保你的策略在给定数据和参数下能产生交易。
放弃原因
回测评审
- 总收益率
- 3.75%
- 最大回撤
- 2.16%
- 总交易数
- 6
- 胜率
- 50.0%
- 盈利因子
- 2.09
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。