跳至正文
全部策略

策略

SOL 永续合约-指数溢价超调反转,多空(单一标的 BINANCE USD-M 永续合约对其 INDEX,DEEP 标记价格/指数 K 线;快速波动期间基差偏离 > 0.35% 时,反向交易永续合约,使其回归现货指数附近——由资金费率和套利 ENFORCED 的机械收敛、非价格基差信号、快速反弹持仓、硬性扩大止损、2 个参数)

结局: 已放弃

SolPerpIndexPremiumOvershootFadeLS5m

premium_index(标记价格-指数基差)数据源是真实的非价格信号,且接入正确(346 个资金费率事件 / 深度序列,已提交 6792 笔入场),因此这不是数据/管道缺陷。

假设

一种 LONG-SHORT、在 SOLUSDT.BINANCE(USD-M 永续合约)上交易的单标的策略,针对 PERP-与-INDEX 基差偏离进行交易——这是一个真实的 NON-PRICE、由机制锚定的信号——有意避开本轮已确认失效的所有类别:L30(纯-OHLCV = 0/213 → 本策略使用标记价格/指数 BASIS,而非价格形态),L29(无期权),L28(无资金费率 CARRY——本策略交易日内基差 EXCURSION,而非资金费累积,因此不受刚刚导致负资金费率篮子策略族失效的资金费率水平边际优势 DECAY 影响),且这不是浅层指标/清算数据陷阱(标记价格和指数价格 K 线是 DEEP 历史 Binance Vision 序列)。机制:快速波动期间,杠杆永续合约 OVERSHOOTS 其现货指数(激进吃单者将永续合约推至综合指数上方/下方),形成基差 = (perp_mark − 指数)/指数,并出现暂时性偏离;资金费率(会机械地将永续合约拉向指数 TWAP)加上跨市场套利,会在几分钟内使基差 FORCE 回零附近。策略对超调做反向交易:当永续合约相对指数交易偏离 ≥ +0.35% RICH 时,SHORT 永续合约;当偏离 ≥ 0.35% CHEAP 时,LONG 永续合约;在收敛时退出。这是由机制强制实现的收敛(而非寄望于价格反转),基差来自真实的非价格数据源,并且可能构成 LIVE 边际优势(不同于已衰减的资金费率溢价)。选择 SOL 是因为其较高波动率会产生幅度显著、足以覆盖费用的基差偏离,而 BTC/ETH 很少达到这种程度。单一标的,LONG-SHORT(弥补 85% 的做多失衡),日内短持仓。2 个核心参数(基差偏离阈值、收敛退出阈值)。

ITERATION 3 IS A CONFIG-ONLY FIX。第 1 层因“config.instrument_id 和 config.bar_type 为 REQUIRED(得到 instrument_id=None,bar_type=None)”拒绝了先前提交:代码已通过静态分析和合成层,并进入沙箱(这正是其向量化溢价解析和 5-MINUTE 时间框架的用途),只是配置块未提供两个必填字段。最小修复就是补上:instrument_id = SOLUSDT.BINANCE,以及 bar_type = SOLUSDT.BINANCE-5-MINUTE-LAST-EXTERNAL——这是代码校准所针对的时间框架,因为 max_hold_bars = 6 编码了 30 分钟的日内反转上限——并将每个参数固定为代码已有的默认值。唯一的代码改动是在文档字符串中记录这一原因、修复方式和测得的溢价校准值;没有改动信号、入场、出场或仓位规模逻辑,因此已通过的层仍然通过。我核实了两项数据依赖,而非想当然地认为它们存在:目录中有 SOLUSDT.BINANCE 5-MINUTE 根 K 线,且 data/supplementary/premiumIndexKlines/SOLUSDT 包含来自 2020-09 的 2.01M 行数据,间隔约为 1 分钟,因此每根 5 分钟决策 K 线都有新鲜的溢价数据支撑。在该真实序列中,|premium| 的中位数为 0.047%,第 90 百分位为 0.105%,第 99 百分位为 0.33%——这就是为什么 basis_entry 仍采用迭代-2重新校准后的 0.15%,而不是标题行中的 0.35%:0.35% 接近第 99.5 百分位,每年只会触发寥寥数次(无法测量);而 0.15% 仍高于第 90 百分位,约为中位数基差的 3x 倍,且幅度足够大,完全收敛后可覆盖约 0.10% 的往返吃单成本。HYPOTHESIS FIDELITY:机制没有变化——真实的非价格基差信号、机械强制的收敛、日内 EXCURSION 交易而非资金费率累积,且确实是多空策略。BINANCE USD-M 是正确的交易场所,因为策略做空永续合约,永续合约与指数之间的基差只在那里存在;杠杆保持为 1.0,因为 position_frac 占权益的 0.5,所以没有使用或声称使用保证金放大。

账户在第一个月被清算(total_return -100%,max_drawdown 100%),净期望值为负(avg_trade_return_pct -0.147%,profit_factor 6.4e-05,期望值 -$45/笔交易)。基差褪色具有灾难性的左尾(avg_loss $59.8 对比 avg_win $0.01,largest_loss -$2463,偏度 -12.3,峰度 177)—— 在瞬态永续-指数超调时进行褪色,恰好在策略所针对的快速行情中被碾压,且放宽止损并未限制左尾。L73 单永续补充门控 + L55 单品种褪色家族(零幸存者);没有任何阈值调整能将导致清算的负期望值褪色转化为优势。2 小时的优化不值得。

实现

在 5-MINUTE 分钟 K 线上,针对 SOLUSDT.BINANCE USD-M 永续合约相对其现货指数进行多空单一标的反转。决策变量是已发布的标记价格对指数溢价(premium_index / premiumIndexKlines 收盘价 = (perp_mark - 指数)/指数),在每根 K 线收盘时通过对构造时一次性解析到 numpy 数组中的数据执行 O(log n) 二分查找,读取截至该时点的数据。当永续合约相对其指数的交易偏离达到或超过 +0.15% RICH 时,策略SHORTS永续合约;当偏离达到或超过 0.15% CHEAP 时,策略LONG;当基差收敛回 0.03% 以内时退出;若偏离方向对该反向交易不利并进一步扩大 0.15%,则触发硬性扩大止损;若价格不利变动 1.2%,则退出;或在日内持仓时限达到 30 分钟(6 根 K 线)后退出。资金费率会将永续合约拉向指数 TWAP,加上跨市场套利,会以机制强制收敛,因此这并非寄望于价格反转,且信号不是价格形态。

验证结果

验证失败(第 1 层——配置):config.instrument_id 和 config.bar_type 为 REQUIRED(得到 instrument_id=None,bar_type=None)。请将两者都设为假设中的交易标的,例如 instrument_id='BTCUSDT.BINANCE',bar_type='BTCUSDT.BINANCE-4-HOUR-LAST-EXTERNAL'。

让优化器遍历 basis_entry;确认交易数 ≥100,且 AND avg_trade_return_pct > 0.15%。

假设标题阈值为 0.35%,但代码在 0.15% 时触发;已记录为根据测得的 SOL 溢价分布重新校准。结构相符(入场/收敛退出/扩大止损/时间上限),因此这是允许的幅度调整,而非不匹配。

无需修复;在完整回测显示净期望值为正之前,应将收敛前提视为未经证实。

单腿基差反转,没有指数对冲——损益只在永续合约上实现,因此由指数驱动的收敛收益有限。这是单标的假设固有的特点,并非代码缺陷,但会削弱“机械强制收敛”这一说法。

回测评审

夏普
-3.36
总收益率
-100.00%
最大回撤
100.00%
总交易数
6792
胜率
24.7%
盈利因子
0.00

premium_index(标记价格-指数基差)数据源是真实的非价格信号,且接入正确(346 个资金费率事件 / 深度序列,已提交 6792 笔入场),因此这不是数据/管道缺陷。

该账户在 2020-10-10 为 LIQUIDATED:total_return -100%,max_drawdown 100.0%,Calmar/恢复指标 -1.0。回测甚至没能达到 2021——交易首月权益就归零了。

扣除成本后期望值为负:avg_trade_return_pct -0.147%(低于零,而不只是低于 0.15% 费用底线),profit_factor 0.0000639,在 6792 笔交易中每笔期望收益为 -$45.0。

左尾不对称性灾难性:avg_win $0.01 对比 avg_loss $59.8,largest_win $1.21 对比 largest_loss -$2463,return_skew -12.3,峰度 177,tail_ratio 0.0001,Omega 0.0。该反转策略不断收取微小的收敛盈利,却在基差持续扩大时承受巨大亏损——扩大止损/价格兜底并未限制尾部风险。

风险调整后指标明确糟糕:Sharpe -3.36(CI [-6.59, -2.76],完全低于零),Sortino -3.35,PSR 0.0,information_ratio -8.34,Alpha -41.6。

这是 L73 单永续补充门控(溢价/基差)方向性家族(零幸存者)与 L55 单品种褪色特征的组合 —— 在单个山寨币上对日内基差偏离进行褪色时,恰好在策略所针对的快速行情中被反向选择。

迭代历史

验证失败(第 3 层——沙箱回测):对象 'SolPerpIndexPremiumOvershootFadeLS1m' 没有属性 'subscribe_mark_price_updates' 使用的 K 线类型:SOLUSDT.BINANCE-1-MINUTE-LAST-EXTERNAL,已处理 K 线数:0 请确保你的策略能在给定的数据和参数下产生交易。

验证失败(第 3 层——沙箱回测):冒烟测试超过了 300 秒的墙钟时间限制。这几乎总是意味着每根 K 线的工作量会随历史数据增长——例如反复扫描完整的资金费率/补充数据序列,或在每根 K 线上于 calculate_signal()/on_bar() 内重建列表并调用 min()/sorted()。在 __init__ 中预先计算排序后的时间戳数组 ONCE 并使用 bisect,或按时间戳缓存查找结果,使每根 K 线的成本为 O(log n),而不是 O(n)。

sandbox_timeout:验证失败(第 3 层——沙箱回测):在约 20000 根 K 线的窗口(SOLUSDT.BINANCE-5-MINUTE-LAST-EXTERNAL 的 69 天)上,冒烟测试超过了 300 秒的墙钟时间限制。这几乎总是意味着每根 K 线的工作量会随历史数据增长——例如反复扫描完整的资金费率/补充数据序列,或在每根 K 线上于 calculate_signal()/on_bar() 内重建列表并调用 min()/sorted()。在 __init__ 中预先计算排序后的时间戳数组 ONCE 并使用 bisect,或按时间戳缓存查找结果,使每根 K 线的成本为 O(log n),而不是 O(n)。

Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。