源文件:research/quant_digests/2026-04-08_0012_spot-perp-openclose-basis-shell.md
spot_perpetual_arbitrage.py + arb_proposal.py + spot_perpetual_arbitrage_config_map.py + start.py)这次主看 Hummingbot Foundation 的成熟策略模块 spot_perpetual_arbitrage。它真正有价值的,不是“funding 高就去收 carry”这种泛化说法,而是把一条可直接下单的 spot-perp 相对价值策略壳写得很完整:
spot buy + perp sell,或 spot sell + perp buy;也就是说,这东西的 base alpha 很清楚:交易的不是 funding 排行榜,而是 same-underlier、可成交、可净额化的 basis 偏离与回归。
arb_proposal.py 里的收益定义很朴素,也很诚实:spot buy / perp sell,看的是 (perp_sell - spot_buy) / spot_buy;spot sell / perp buy,看的是 (spot_sell - perp_buy) / spot_sell。这不是 mid-price 幻觉,而是可成交报价差。
1%、平仓阈值默认 -0.1%、双腿 slippage buffer 默认都为 0.05%,另有 120s reopen delay 与 5x perpetual leverage。一句话:它默认不是“见价差就追”,而是明确采用 open/close hysteresis。spot_perpetual_arbitrage.py 里把状态机写成 Closed -> Opening -> Opened -> Closing,并要求 perpetual 端使用 ONEWAY 模式。这一点对实盘很关键:它不是单次 basis snapshot,而是把持仓生命周期显式建模了。这篇东西对 momentum 当前最有价值的地方,是它补了一个我们很需要、但之前 mostly 只在论文/小 repo 里零散见过的组件:
之前我们已经收了不少 basis / funding / carry 主题,但很多更像“哪边更贵”的线索;这次拿到的是一个把 entry / exit / slippage / leverage / reopen delay 都定义出来的执行壳。
1m / 3m / 5m / 15m 的最小实验。这条线不依赖日频财报、低频宏观或复杂链上数据;只要有同标的 spot + perp 报价,就能开始做最小实验。
你完全可以把这个壳理解成:
这比继续泛泛讨论“carry 有没有用”更值钱。
order_amount 起步;perp 端单向仓位;双腿同步执行;开仓后只有在 close spread 达标或达到 time-stop 时才退出;必要时加 max-open-duration 与 funding-window veto1m / 5m 的可成交 quote 口径下,BTC/ETH 等 liquid majors 的 spot-perp basis 偏离,经过双腿成本后,仍存在可交易的开仓-平仓 hysteresis。open_short_carry = (perp_bid - spot_ask) / spot_askopen_long_carry = (spot_bid - perp_ask) / spot_bidentry_threshold_net,则开对应 delta-neutral 双腿。BTCUSDT / ETHUSDT 的 Binance spot + perp1m quote snapshot,再做 5m bar 内 executable proxy1%;对 majors 应先扫 10 / 20 / 30 / 50 bps entry,close 先扫 -5 / 0 / +5 bps30 / 60 / 120 分钟 time-stopafter-cost net spread capture / tradetrade count × median open duration如果 B 的净收益更稳、但 trade count 没被砍废,说明这条线可以进入复现池。
hummingbot/hummingbot. GitHub repository.https://github.com/hummingbot/hummingbothttps://github.com/hummingbot/hummingbothummingbot/strategy/spot_perpetual_arbitrage/spot_perpetual_arbitrage.pyhttps://github.com/hummingbot/hummingbot/blob/master/hummingbot/strategy/spot_perpetual_arbitrage/spot_perpetual_arbitrage.pyhummingbot/strategy/spot_perpetual_arbitrage/arb_proposal.pyhttps://github.com/hummingbot/hummingbot/blob/master/hummingbot/strategy/spot_perpetual_arbitrage/arb_proposal.pyhummingbot/strategy/spot_perpetual_arbitrage/spot_perpetual_arbitrage_config_map.pyhummingbot/strategy/spot_perpetual_arbitrage/start.py