跳至正文
全部策略

策略

PURR现货—永续溢价收敛

结局: 已放弃

PurrSpotPerpPremiumConvergence

结局总结

PurrSpotPerpPremiumConvergence是一种市场中性基差交易:当Hyperliquid上的PURR永续合约溢价超过1.2%时,做多PURR现货并做空该永续合约。该假设提及了4根重叠的4,172小时K线,以及超过该阈值的69次行情。在2次迭代中,代码始终未通过验证,因为第3层沙盒回测在约20,000根K线的窗口上于300秒时超时。运行在任何回测、优化或分析师审查之前就已放弃,因此溢价收敛论点仍未经过检验。

假设

在同步的4小时K线上,当永续合约溢价超过1.2%时,买入PURRUSDC.HYPERLIQUID_SPOT并做空等额名义价值的PURRUSD.HYPERLIQUID。目录中有4,172根重叠K线;在流动性筛选前,有69次独立行情越过该阈值。计入实际的小时资金费支付。Hyperliquid资金费机制:https://hyperliquid.gitbook.io/hyperliquid-docs/trading/funding

Hyperliquid、多标的和多空策略在样本中占比较低。观测到的PURR溢价足够宽,值得测试配对收敛交易。溢价从1.2%压缩至0.3%,每份匹配名义价值可带来0.9%毛收益。估算的双腿往返费用为0.23%;再计入0.20%的价差和冲击成本后,剩余0.47%,约为配对总名义价值的0.235%。仍需验证可执行深度。

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

实现

在对齐的4小时K线上,当PURR永续合约相对HL现货的溢价达到或超过entry_basis_pct时,买入PURRUSDC.HYPERLIQUID_SPOT并做空等额名义价值的PURRUSD.HYPERLIQUID。两条腿分别作为独立订单和持仓。当溢价收窄至exit_basis_pct、较入场溢价扩大spread_stop_widening_pct,或经过max_hold_bars根K线后(以入场时间戳为锚点),同时退出两条腿。每条腿的名义价值取以下三者中的最小值:风险预算(risk_pct / 止损宽度)、权益的max_leg_equity_fraction,以及该腿上一根K线美元成交量的max_prior_bar_volume_fraction。引擎按小时在永续合约腿上计提HL资金费。

第2次迭代回应了第-3层sandbox_timeout。我在本地使用cProfile和py-spy,对2024-04-17至2026-04-17运行了完全相同的沙盒配置。墙钟总耗时为403秒。其中约385秒用于NautilusTrader ParquetDataCatalog.query,主要耗在fsspec对整个目录的glob/walk:在17次查询中调用stat()约2.46M次,主机磁盘当时处于95%状态。这包括catalog.bars耗时336秒,以及catalog.instruments耗时51秒。所有策略代码(calculate_signal、should_enter、should_exit、position_size、_submit_entry)处理3,171根K线仅耗时不到0.25秒;基础函数_maybe_process_primary耗时0.65秒。每根K线的开销已是O(1):没有历史扫描,也没有重复扫描补充数据。该次运行生成了100条持仓记录(50次配对入场),夏普比率为3.31,以及avg_trade_return_pct 0.70%。根据经验教训155(c),超时并非随时间跨度增长的逐根K线开销,因此无法通过修改策略解决。问题在于运行器的目录加载延迟,需要工程层面修复(缓存文件列表或缩小目录glob范围),或在负载较低的主机上重试。唯一的代码改动是保持行为不变的重构:将重复的现货数量舍入逻辑移至_spot_qty_for_notional()。信号、门槛、仓位规模、退出条件、参数和优化计划均未改变。

验证结果

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

结局总结

多腿策略必须使calculate_signal/on_bar中的每根K线工作量保持常数或O(log n),例如预先计算或缓存查找结果,以便在时间预算内完成沙盒冒烟测试,之后才能衡量其优势。

经过2次迭代后,该策略在验证循环中被放弃。第3层沙盒冒烟测试在约20,000根K线的窗口上(PURRUSD.HYPERLIQUID根4小时K线,共2,400天)超过了300秒的墙钟时间限制,因此未进入回测审查、优化、分析师审查和风险审查阶段。

在Hyperliquid上捕捉PURR永续合约溢价的收敛:每当永续合约价格高于现货超过1.2%时,在4小时K线上买入PURRUSDC现货,并做空等额名义价值的PURRUSD永续合约;基差收敛期间收取小时资金费。

没有任何绩效数据:该策略从未生成回测或优化报告,因此没有收益率、夏普比率或交易笔数数据。

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