源文件:research/quant_digests/2026-04-12_2141_pca-extremeonly-residual-fade-alpha.md
README.txt + main.py + src/pca_engine.py + src/residual_model.py + src/ou_estimator.py + src/s_score.py + src/strategy.py + src/backtester.py)+ 2010 *Quantitative Finance* 母体论文元数据 + Binance USDⓈ-M 5m/15m public-data probeshort rich / long cheap,赌的是因子中性后的相对价值回归,不是押市场方向这轮我选的不是又一篇泛泛的 pairs 论文,而是一个很新的 repo:
这轮最值得 desk intake 的,不是“PCA 也能做 stat-arb”这句空话,而是下面这句更像交易语言的话:
> 不要把所有 residual dislocation 一股脑全做;对 short-cycle desk,更像真钱入口的是“只做最极端那一撮因子中性偏离”。
也就是说,这轮虽然材料表面上是一个完整 PCA-OU book,但对我们更值钱的旁支,其实是:
很清楚,不需要硬猜:
> 基础 alpha = 因子中性后的 residual mean reversion。
翻成人话:
所以它是:
raw alphastat-arb / relative-value / basket mean reversion最近研究池里 pairs / basket 已经不少,但很多还是:
这份 PCA repo 的不同点在于:
这对 desk 的价值是: > 它给的是“先 market-neutral / factor-neutral,再抓 residual 回归”这条更通用的 stat-arb 原语。
这类 repo 最容易犯的错,就是直接把论文口径 whole-book 搬到短周期 perp:
我这次最重要的结论反而是:
这正符合你给的灵活规则: > 不必死抄 headline;repo 里更适合 desk 的旁支,可以单独拎出来。
这份 repo 的价值很高,因为它不是“讲思路”,而是把整条链写全了。
src/pca_engine.py:rolling PCA 因子提取repo 在每个时间点:
240 小时窗口;翻成人话就是: > 先把“市场一起涨一起跌”和“第二层共同波动”抽出来。
src/residual_model.py:每个币回归到前两主成分上repo 对每个 token 做:
r_i = beta0 + beta1 * F1 + beta2 * F2 + eps_ieps_i 去均值后保留成 residual series。这一步定义得很重要:
src/ou_estimator.py + src/s_score.py:把 residual 变成可交易阈值repo 没停在“有 residual”这一步,而是继续:
X_t 拟合离散 OU;kappa / m / sigma_eq;s = (X_t - m) / sigma_eq。这比直接 z-score spread 更像一个可迁移的 desk 组件,因为它回答的是:
src/strategy.py:完整开平仓阈值已经写好repo 默认阈值:
s <= -1.25s >= 1.25s >= -0.75s <= 1.0这说明它不是只给研究信号,而是已经给出:
src/backtester.py:但它默认没把费用问题当核心敌人README 直接写了:
这恰恰是 desk 读它时最该警惕的地方: > 信号骨架可取,whole-book 执行假设不可照搬。
为了避免只做 repo 读后感,我用 Binance USDⓈ-M 公共 klines 做了一个 portability probe。
fapi/v1/klinesBTCUSDT / ETHUSDT / SOLUSDT / XRPUSDT / DOGEUSDT / BNBUSDT15m:样本 2025-10-01 到 2026-04-12 21:15 UTC5m:样本 2026-02-01 到 2026-04-12 21:15 UTC15m 用 240 bars,约等于 repo 的 60h lookback5m 做 clock-matched 移植,用 720 bars,仍约 60h lookback产物已落地到:
reports/artifacts/literature/pca_residual_ou_probe_summary_2026-04-12.csvreports/artifacts/literature/pca_residual_ou_events_15m_2026-04-12.csvreports/artifacts/literature/pca_residual_ou_events_5m_2026-04-12.csvreports/artifacts/literature/pca_residual_ou_scores_15m_2026-04-12.csvreports/artifacts/literature/pca_residual_ou_scores_5m_2026-04-12.csv我先按 repo 的 opening / closing 阈值,做了一个“全书都做”的 15m 直译版快测。
结果:
-0.09 bps/bar-15.55%0.163x/bar8bp round-trip 粗算,净平均约 -0.74 bps/bar12bp round-trip 粗算,净平均约 -1.07 bps/bar这句要说得很直接:
> PCA residual 这套东西不是没 alpha;但“看到 dislocation 就整本书一起上”这件事,在 short-cycle perp 上先被换手打死了。
我把 probe 改成更 desk 化的分支:
richest s >= 1.25 且 cheapest s <= -1.25 时,才记一次事件;long cheap / short rich;#### 5m(clock-matched 720-bar lookback,向前看 24 bars ≈ 2h)
7,61355.8%+2.64 bps+3.33 bps|s| 收缩:0.347|s| 收缩:0.318翻成人话: > 把 repo 直译成 whole-book 不行,但只做最极端 residual,5m 上已经看到比较像样的回归味道。
#### 15m(240-bar lookback,向前看 8 bars ≈ 2h)
6,76252.5%-0.27 bps+1.34 bps|s| 收缩:0.315|s| 收缩:0.284这说明:
15m 上 “偏离会收一点” 仍然存在;从事件样本看,5m 上更值得继续拆的 cheap-vs-rich pocket 包括:
XRP cheap / SOL rich:平均约 +20.18 bpsETH cheap / SOL rich:平均约 +12.38 bpsSOL cheap / BNB rich:平均约 +10.51 bpsBNB cheap / BTC rich:平均约 +6.72 bpsXRP cheap / DOGE rich:平均约 +6.06 bps这也提示一个很实际的方向: > PCA 不是为了“全市场一起做”,而是更适合先做 residual ranking / 极端口袋挖掘器。
更好的 desk 读法是:
也就是说,这题最像的是: > cross-sectional relative-value alpha router
而不是“又一个学术组合回测器”。
5m first, 15m control我会这样安排:
5m:主实验层。先测 extreme-only / top-k residual fade。15m:控制组。看它能不能作为低换手版本,或者当 execution veto 之后的降频层。1m / 3m:暂时别一上来就压,因为这题本身不是 order-book alpha,本体更像分钟级 relative-value,不是 sub-second microstructure 信号。如果要用一句话给研究池标注,我会写:
> factor-neutral residual mean reversion / basket stat-arb
而其中最先该复现的,不是 whole-book,而是:
top1 cheap vs top1 richtop2 / bottom2 的 market-neutral fade下面这版已经够当实盘前的 research shell:
6~12 个高流动 major perps 开始BTC / ETH / SOL / XRP / DOGE / BNB5m:720 bars(约 60h)15m:240 bars(约 60h)2 个主成分F1/F2 回归后的 epsm / sigma_eqs = (X_t - m) / sigma_eqrichest >= 1.25 且 cheapest <= -1.25 时触发top1 rich / top1 cheap24 x 5m / 8 x 15m 之内,|s| 回到 0.5~0.75 内就平0.5 gross1 个活跃 basket pair 里4 / 8 / 12 bp round-trip2~4 bp 档这轮必须继续往下做,而且方向已经很明确:
top1 cheap / top1 richtop2/bottom21.25 / 1.5 / 1.75 / 2.0 阈值|s| 回到中性区立即平time-stop4 / 8 / 12 bp RTXRP↔SOL / ETH↔SOL / SOL↔BNB / BNB↔BTC / XRP↔DOGE这份 2026 PCA repo 值得进研究池,但不是因为它的 whole-book 回测壳能直接照搬;真正该拿走的是:
> 把 PCA residual / OU / s-score 当成“因子中性相对价值温度计”,然后只做最极端那一对。
对当前 short-cycle desk,我会把它归类成:
extreme-only residual fade,不是 repo 默认 whole-book 直译版main.py:<https://raw.githubusercontent.com/sophie-lan/crypto-pca-statarb/main/main.py>src/pca_engine.py:<https://raw.githubusercontent.com/sophie-lan/crypto-pca-statarb/main/src/pca_engine.py>src/residual_model.py:<https://raw.githubusercontent.com/sophie-lan/crypto-pca-statarb/main/src/residual_model.py>src/ou_estimator.py:<https://raw.githubusercontent.com/sophie-lan/crypto-pca-statarb/main/src/ou_estimator.py>src/s_score.py:<https://raw.githubusercontent.com/sophie-lan/crypto-pca-statarb/main/src/s_score.py>src/strategy.py:<https://raw.githubusercontent.com/sophie-lan/crypto-pca-statarb/main/src/strategy.py>src/backtester.py:<https://raw.githubusercontent.com/sophie-lan/crypto-pca-statarb/main/src/backtester.py>