源文件:research/quant_digests/2026-04-04_1226_azalyst-betaneutral-1h-xs-ranker-alpha.md
README.md + azalyst_v6_engine.py + azalyst_factors_v2.py + azalyst_train.py + azalyst_validator.py)5m OHLCV 因子去预测“去掉当日截面均值后的 1h forward return”,再做 top/bottom cross-sectional long-short 排名书。base alpha = 在 crypto 截面里,去预测“谁会在未来 1h 跑赢同一时点的市场平均”,然后做 top/bottom 排名交易。
这不是 filter,也不是 overlay。 它本体就是一条 cross-sectional / relative-value raw alpha:
future_ret_1h,而是daily cross-sectional demeaned 的 beta-neutral target。所以这条思路对我们 desk 的价值,不在“它用了 Elastic Net / XGBoost”,而在于它把 short-horizon relative outperformance 明确写成了可训练、可排序、可交易的目标。
这份仓库真正值得 intake 的,不是它那层很重的 weekly ML 外壳,而是里面那条可独立抽出来的 raw alpha:5m 因子 → 1h beta-neutral 相对收益排序 → top/bottom 组合。
换句话说:
这一步对 1m/3m/5m/15m short-cycle desk 很有用,因为它天然更适合:
repo 的证据链,至少在工程定义上是完整的:
3+ 年、444 个 Binance 交易对、5m OHLCV、26M+ 行;12 根 5m bar(即 1h)后的 forward return,但先减去同日截面均值,形成 beta-neutral target;26 周 rolling 窗口、13 周重训、Purged K-Fold、并对 1h 目标做 12 bar 非重叠抽样,尽量减少 label overlap;5 longs + bottom-5 shorts,equal-weight,round-trip fee 直接写成 0.2%;ret_1w / ret_3d / vol_regime / composite baseline 去打 falsification campaign,要求 ML 至少要打赢简单排序基线才算有存在价值。这套证据还不是独立验证后的 alpha 成立证明,但已经足够说明: > 作者并不是在写一个“花哨预测器”,而是在认真定义一条 可交易的截面 raw alpha。
最值得拿走的是下面这个最小骨架:
5m OHLCVret_1w, ret_3d, vol_regime, rvol_1d, rsi_14, skew_1d, adx_14, kyle_lambda, mean_rev_zscore_1h, vol_ratio_1h_1dfuture_ret_1h - same_day_cross_section_mean这比“单币做多/做空预测”更像我们当前素材池里缺的那类东西: cross-sectional relative-value raw alpha。
repo 当前的执行外壳,反而是我最不想直接照抄的部分:
1h forward return;predict_week_v6() / simulate_weekly_trades_v6() 这层,默认拿 pre-week snapshot 去做周度 top/bottom 组合;所以对我们 desk,更合理的读法不是“把它整套 weekly engine 搬过来”,而是:
> 把 repo 的 base alpha 抽出来,换掉它的 weekly shell,改成 15m rebalance / 1h hold 或 5m staggered hold 的 short-cycle 版本。
因为这条材料直接补的是我们现在仍然稀缺的一层:
cross-sectional / relative-value / beta-neutral ranking。
而且它还有两个很实际的价值:
不是先做多空择时,再想办法对冲;而是一开始就把 target 定义成相对收益。
这跟当前 learning track 很契合。我们不用现在就上重 ML,先测:
ret_1w 排序 aloneret_3d 排序 alonemean_rev_zscore_1h / rsi_14 排序 alone再看有没有必要上 Elastic Net。
结论:齐全,但要把 holding clock 从 weekly 改回 short-cycle。
repo 的本质入场并不复杂:
N 做多、bottom N 做空。repo 原生是周度 close-to-close 壳。 对我们 desk,更合适的 exit 改写是:
1h 持有(与训练 target 对齐);15m rebalance、最多持有 4 个 15m bar;5m staggered overlapping book(每 15m 新开一层,单层持有 1h)。repo 已经给出两层有用模板:
BULL_TREND 只做多且半仓,HIGH_VOL_LATERAL 多空都做但半仓。这两层都能直接迁移到我们后续 15m/5m 实验。
repo 直接把 round-trip fee 写成 20 bps。 对我们 desk,第一轮更该跑 friction ladder:
6 bps10 bps14 bps20 bps因为 cross-sectional ranker 很容易在 gross 上看着像样,但被 turnover 吃掉。
在 liquid universe(先 20~30 个主流 perp/spot)上,用公开 5m 数据做:
ret_1w 单因子排序ret_3d 单因子排序mean_rev_zscore_1h 单因子排序0.5 * ret_3d_rank + 0.5 * mean_rev_zscore_1h_rank 简单双因子排序看:
固定同一组特征,不急着换模型,只改执行钟:
15m rebalance + 1h hold5m rebalance + 1h hold15m rebalance + 45m hold目标:先回答 alpha 本体有没有短周期可移植性,而不是先追最优 Sharpe。
对同一横截面 ranker,分三档比较:
看它到底是:
优先只看这 10 个 stable features 的 sign / rank 是否稳定:
15m/5m 上方向还一致?ret_1w 和 mean_rev_zscore_1h 是互补,还是互相抵消?1h target 却配周度执行,是我对它最大的结构性保留;https://github.com/gitdhirajsv/Azalyst-Alpha-Research-Enginehttps://github.com/gitdhirajsv/Azalyst-Alpha-Research-Enginehttps://raw.githubusercontent.com/gitdhirajsv/Azalyst-Alpha-Research-Engine/main/README.mdhttps://raw.githubusercontent.com/gitdhirajsv/Azalyst-Alpha-Research-Engine/main/azalyst_v6_engine.pyhttps://raw.githubusercontent.com/gitdhirajsv/Azalyst-Alpha-Research-Engine/main/azalyst_factors_v2.pyhttps://raw.githubusercontent.com/gitdhirajsv/Azalyst-Alpha-Research-Engine/main/azalyst_train.pyhttps://raw.githubusercontent.com/gitdhirajsv/Azalyst-Alpha-Research-Engine/main/azalyst_validator.pyhttps://www.wiley.com/en-us/Advances+in+Financial+Machine+Learning-p-978111948208610.2307/1913210https://doi.org/10.2307/191321010.1016/S1386-4181(01)00024-6https://doi.org/10.1016/S1386-4181(01)00024-6