策略
QuantConnect 策略库:指数 ETF 之间的日内套利
结局: 已放弃
SpyIvvIntradayQuotientArbitrage
结局总结
该策略尝试利用滚动均值回归进行日内 SPY/IVV 比值套利。由于 Layer 3 验证在三次迭代后超时,因此未产生任何绩效指标。流程在回测审查、分析、风险审查或晋级前放弃了该策略。
假设
该策略在两只跟踪 S&P 500 的 ETF 上实现 Marshall-Nguyen-Visaltanachoti / Kakushadze-Serur 比值阈值。根据 L155,在两次超时且没有指标后,我检查了所有三项可能改变结果的因素:(a) 配置 — 必须使用 1 分钟K线类型,因为 1-HOUR K线(每个交易时段 7)无法表达几分钟内的日内错位;(b) 数据目录 — SPY.USEQ-1-MINUTE 是 193 个未压缩的逐小时 parquet 分片,而 10 是 IVV 个已压缩分片,主机负载均值约为 50-60;第 -2 次迭代的性能分析显示,100% 的时间花在 ParquetDataCatalog.query 文件发现上;(c) 每根K线的成本 — 已经是 O(1):增量 deque 求和、整数 ET 时钟、不扫描历史数据。只移除了一个冗余缓存查询。我对该假设持怀疑态度:SPY/IVV 约 2 个基点的比值偏离,小于四笔成交的往返价差加冲击成本(约 2-4 个基点)。
verification_loop:sandbox_timeout:验证失败(Layer 3 — 沙盒回测):烟雾测试在约 20000 根K线窗口(30 天的 SPY.USEQ-1-MINUTE-LAST-EXTERNAL)上超过了 300 秒的墙钟时间限制。这几乎总是意味着每根K线的工作量会随历史数据增长,例如反复扫描完整的资金费率/补充序列,或在每根K线上于 calculate_signal()/on_bar() 内重建列表并调用 min()/sorted()。在 __init__ 中预先计算排序后的时间戳数组 ONCE 并使用 bisect,或按时间戳缓存查询结果,使每根K线的成本为 O(log n) 而不是 O(n)。
实现
在 1 分钟 USEQ K线上的日内 SPY/IVV 比值套利。信号 = SPY/IVV 相对同一交易时段 30 根K线滚动均值的偏离(基点)。高于 +entry_bps:做空 SPY / 做多 IVV;低于 -entry_bps:反向操作,每条腿按权益的 45% 配置等美元金额的整股(总敞口 90%,符合 2x Reg-T)。在 exit_bps 内回归、经过 30 分钟后,或到达 15:55 ET 时退出。
验证结果
sandbox_timeout:验证失败(Layer 3 — 沙盒回测):烟雾测试在约 20000 根K线窗口(30 天的 SPY.USEQ-1-MINUTE-LAST-EXTERNAL)上超过了 300 秒的墙钟时间限制。这几乎总是意味着每根K线的工作量会随历史数据增长,例如反复扫描完整的资金费率/补充序列,或在每根K线上于 calculate_signal()/on_bar() 内重建列表并调用 min()/sorted()。在 __init__ 中预先计算排序后的时间戳数组 ONCE 并使用 bisect,或按时间戳缓存查询结果,使每根K线的成本为 O(log n) 而不是 O(n)。
结局总结
限制每根K线的数据访问量,避免验证运行时间随历史数据增长。
该策略因超过 300 秒的沙盒限制,在约 20,000 根K线的窗口上被放弃。流程未进入后续阶段。
该策略尝试利用同一交易时段的比值偏离和匹配的反向腿进行日内 SPY/IVV 比值套利。
未生成回测或优化指标。验证进行到三次迭代,但 Layer 3 沙盒回测未能完成。
分析
指数 ETF 之间的日内套利
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。