源文件:research/quant_digests/2026-04-02_0405_coint-lookback-volfilter-trailingstop-pairs-alpha.md
README.md + pairs_trading_strategy.R + GitHub API metadata)这轮更值得 intake 的,不是“再看一个 BTC/ETH pairs notebook”,而是一条已经把 entry / hedge ratio / risk / exit / cost 都写进开源代码的完整 raw alpha:用协整 spread 的 z-score 做均值回归入场,再叠 lookback 优化、波动 veto、最短持有期与动态 trailing stop。
主证据不是论文 headline,而是 repo 把策略骨架完整写在 pairs_trading_strategy.R 里;论文 abstract 只负责提供样本背景与作者正式发表的研究定位。
这次的 base alpha 很清楚:
y1 = μ + γ*y2 + ε;spread = y1 - γ*y2 表示“这对资产当前偏离长期关系有多远”;z <= -threshold 时做多 spread(多低估腿、空高估腿),当 z >= +threshold 时做空 spread;翻成人话:它不是赌某个币自己会涨或会跌,而是赌“一对本来应该走得比较像的资产,短时间被拉开太远后,会向中间收敛”。
所以这篇东西的定位非常明确:
如果按当前 desk 的优先级来排,这篇的价值在于:它不是在给已有 alpha 加一个附属过滤器,而是在给 raw alpha 池补一条可直接落地的 market-neutral 均值回归骨架。
rafaelpalazzi2025-12-20T01:59:21Z)trading-games-crypto3,default branch main,latest update 2026-02-14T11:07:46Z代码先在训练集上用 OLS 估: Y1 ~ Y2
然后得到:
μ:截距γ:hedge ratio接着把组合权重写成: w_ref = (1, -γ) / (1 + |γ|)
这一步很重要,因为它不是“等权多一个、空一个”,而是先把两腿缩成一个归一化 spread 组合。对 desk 来说,这直接回答了一个关键问题:这篇不是只会喊 entry,它连配对仓位怎么摆都给了。
repo 的信号层非常朴素:
Z_score <= -threshold_long → signal = 1Z_score >= +threshold_short → signal = -1signal = 0默认 threshold_value = 0.7。
也就是说,这个系统的核心不是“预测谁更强”,而是: spread 偏得太离谱了,就押它往回收。
代码会在训练集里扫描:
lookback_periods = 5, 10, 15, ... , 360然后对每个 lookback:
SharpeRatio.annualized 选出最优 lookback。这点对我们很有价值,因为它不是把“20 日 / 60 日”当教条,而是在明确问: 这对 spread 的均值回归速度,到底更像短记忆还是长记忆?
repo 先算:
spread_return = diff(spread)spread_vol = rolling_sd(spread_return, vol_lookback)默认参数:
vol_lookback = 30vol_threshold = 1.5然后只在: spread_vol <= 1.5 × average_spread_vol 时允许信号生效。
翻成人话:如果这对 spread 已经进入异常躁动区,就先别硬接飞刀。
这不是 alpha 本体,但它是一个很适合短周期 desk 的 regime/filter: 均值回归最怕你接到“相关性结构正在断裂”的那种偏离。
默认:
min_holding_period = 5对日频研究它代表 5 天; 对我们更重要的翻法是:这是一个“冷静期 / 最短持仓 bars”约束。
在 15m 上不该机械照抄成 5 天,而更应该翻成:
2 / 4 / 8 / 12 bars 的最短持仓约束,看看它到底是在降噪、减少来回磨损,还是只是在拖慢出场。
repo 的 stop 不是固定值,而是: dynamic_stop = trailing_stop_factor × max(current_vol / avg_vol, 1)
默认:
trailing_stop_factor = 0.025也就是说,波动越大,stop 会相应放宽。
这点很像“波动自适应止损”而不是死板百分比止损。对 short-cycle desk 来说,可迁移之处不是 2.5% 这个数字本身,而是这条思路: mean reversion 也可以做 vol-aware 的风险带,而不是只靠 zero-cross 机械平仓。
2019-01 到 2024-05。split_ratio = 0.75,即 75% 训练、25% OOS。z-score ±0.7。30 期 rolling spread vol,阈值 1.5 × average vol。5。transaction_cost = 0.002;从代码实现看,更接近每次进/出各扣一次的简化成本口径。补一句非常重要的保留: README 里写了年化 Sharpe ≈ 2.0、年化收益 ≈ 71%,但在本轮没读到全文前,这些只能当“作者自述 + repo 摘要”,不能当作我们已经独立确认的结论。
15m原因很简单:
1m / 3m 上 hedge ratio 漂移、盘口跳点、手续费吞噬会更严重;15m 更适合先回答“after-cost 到底有没有 edge”。所以第一步最合理的是:
15m 做 alpha existence test5m 做 execution refinement1m / 3m 只在 15m 已经成立后,再拿来做更细的入场/减仓/回补repo 用的是两资产框架,但 desk 版不该一上来就锁死 BTC/ETH。 更合理的翻法是:
z-score + vol veto + stop 壳子套上去。很多配对策略材料只讲:
但这篇 repo 已经把下面四层都补上了:
entry:spread 偏离sizing:hedge ratio 归一化两腿risk/filter:波动 veto + 最短持有期exit:动态 trailing stop + 成本这正符合当前 desk 对“可直接落地完整策略”的偏好。
8~12 majors15m20 / 40 / 60 天里残差最稳定的 3~5 对z >= {1.5, 2.0, 2.5} 做空 spread,z <= {-1.5, -2.0, -2.5} 做多 spreadz 回到 0 / ±0.25N bar 均值的 1.25 / 1.5 倍10 / 20 / 30 / 40 bps先回答一个最朴素的问题: 在 15m、after-cost、market-neutral 框架下,协整 spread 均值回归到底能不能活。
若实验 A 活着,再做:
15m 信号触发后,比较:5m 立刻下;5m microprice / mid reversion 做更温和入场。按下面顺序拆:
z-score onlyz-score + rolling pair selectionz-score + pair selection + vol vetoz-score + pair selection + vol veto + trailing stop这样才能知道 edge 到底来自:
还是
0.7 阈值。 这个阈值在更高频短周期里很可能太窄,先从 1.5~2.5 做第一轮更合理。min_holding_period=5、vol_lookback=30 到 intraday 里都需要重映射。γ 太乐观。10~40bps。如果只用一句话概括这轮 intake 的价值,那就是: 它让我们把“pairs/relative-value”从零散想法,推进成一张可直接写成 entry / exit / sizing / risk / cost 的完整 raw alpha 策略卡。
而且它和当前学习主线并不冲突: