源文件:research/quant_digests/2026-04-06_1302_naps-adaptive-sizing-overlay.md
README.md + configs/default.yaml + naps/training/objective.py + naps/data/features.py + naps/baselines/risk_parity.py)先说结论:这轮不是因为找不到 raw alpha,而是因为新 intake 里更干净、且不和近几天 digest 重复的 raw alpha 候选很少;反过来,这个 2026 新 repo 给的是一个能直接服务整池 raw alpha 的“仓位层组件”。
这件事对当前 desk 有现实价值:
trend / breakout / XS / relative value / funding / options / microstructure所以这篇 note 的定位必须老实:
> 它不是新 raw alpha,而是一个可以挂在现有 raw alpha 上的 adaptive sizing overlay。
这篇东西的 base alpha 说不成独立 raw alpha。
更准确地说:
> 它假设你已经有一个方向/强度信号,然后学习“这次该下多大”。
所以它不能冒充 raw alpha;更诚实的定位是:
overlayposition sizing / risk management layershared component但它依然值得进研究池,因为它满足另外一档高优先级条件:
> 它能同时服务至少 2 类以上 raw alpha,并且能直接落地到已有 1m/3m/5m/15m 策略骨架里。
README.md 自述为“NeurIPS 2026”,当前未单独核验正式会议收录页不是去学“涨跌方向”,而是学:
``text 已有信号 + 信号不确定性 + 风险状态 + 市场上下文 -> bet fraction f_t in [0, f_max] ``
仓位不是二选一,而是连续值;默认 crypto f_max = 0.25。
README.md 与 configs/default.yaml 一致写明:
f_t in [0, f_max]f_max = 0.25f_max = 0.40f_max = 0.30这点很关键,因为它天然适合挂在我们现有 raw alpha 后面:
0 ~ 25% 的下注强度对 short-cycle desk 来说,这比直接让模型输出 long/short 更实用,也更容易审计。
根据 README.md 与 naps/data/features.py,输入被拆成三组:
SMA20 / SMA50 / EMA12 / EMA26 / MACD / Bollinger width / ATR14 / OBV / Stoch / Williams %R / CCI20 / ADX14 / RSI1420-day realized volatility60-day rolling correlation with market index20-day trend strength翻成人话就是:
> 它不是只看“市场像不像要涨”,而是同时看“这信号稳不稳、你最近顺不顺、当前组合有没有已经太满”。
这非常适合我们现在的多 alpha 素材池。
README.md 明写:
(direction + magnitude)MC-dropoutcross-attention 融合这件事对 desk 的现实意义比论文味更重:
> 同样是 +1 的方向信号,“确定的 +1”和“很虚的 +1”不该下同样仓位。
这是很多现有策略骨架里缺失的一层。
如果不想上完整神经网络,最小也可以先抄一个弱版本:
``text size = raw_score_strength × confidence_discount × risk_budget_multiplier ``
其中 confidence_discount 可以先用:
naps/training/objective.py 给出的组合 loss 是:
``text L = -Sharpe + lambda1 * drawdown_penalty + lambda2 * turnover_penalty ``
默认参数:
tau = 0.15:最大回撤阈值 15%lambda1 = 5.0:回撤惩罚lambda2 = 1.0:换手惩罚cost_bps = 10:单边 10 bpsW = 252这比“先预测,再在回测里顺手调仓位”更像真正可部署的方法,因为它直接把现实里最痛的两件事写进目标:
对于 1m/3m/5m/15m desk,我反而觉得 turnover penalty 比它的 transformer 壳还值钱。
README.md 的 Table 2 摘要写的是:
Risk Parity 0.74 -> NAPS 0.9116.8% -> 11.6%这里最重要的不是绝对值,而是改善方向:
> 它不是靠更准的方向预测赢,而是靠更好的仓位分配把同样的信号榨得更稳。
这正符合它作为 overlay 的定位。
1m / 3m / 5m / 15m 的关系是什么?至少可以接这几类:
repo 默认是日频结构:
lookback = 60 trading daysinitial_train = 252test_size = 63所以对 short-cycle desk 不能机械复制;必须做 bar-level rescaling。
目标:先验证“不确定性 + 风险状态 + 换手惩罚”是不是比 fixed fraction / inverse-vol 更有增量。
在已有任一 raw alpha 上,把原始方向信号转成:
sign_t:方向score_t:强度(比如 z-score / rank strength / edge estimate)再定义:
``text base_size_t = clip(k * |score_t|, 0, f_max) conf_discount_t = 1 / (1 + uncertainty_t) risk_discount_t = g(drawdown_t, exposure_t, recent_serial_corr_t) final_size_t = base_size_t * conf_discount_t * risk_discount_t ``
先不用神经网络,先和以下基线比较:
优先接 2 条已经比较像实盘骨架的:
2026-04-06_0940_quality-weighted-squeeze-release-alpha.md2026-04-06_0558_btc-lead-liquidity-lag-alt-alpha.md一个偏 trend,一个偏 lead-lag,正好看 overlay 是否可跨 alpha 复用。
如果实验 A 有增量,再补“signal uncertainty”这层。
对 short-cycle 最实用的 4 个 uncertainty proxy:
这一步通常比直接上 cross-attention 更值。
只有在 A/B 已经证明确有增量时,再上完整模型。
不要抄日频的 252 天,直接改成:
market lookback: 60 barsregime vol: 96 bars(约 1 天)market corr: 288 bars(约 3 天)trend strength: 96 barswalk-forward train: 30 ~ 45 daystest: 5 ~ 7 daysf_max: 0.20 ~ 0.25repo 用的是:
10 bps对我们 desk,建议改成分层:
3 ~ 5 bps6 ~ 12 bps否则会把 sizing 层的价值和过粗的成本假设混在一起。
很多策略把“是否触发”和“下多大”绑死在一起。
NAPS 的价值在于强行把两件事拆开:
如果一个策略只有 score,没有 uncertainty,它的 size 往往会在最不该放大的时候放大。
这对短周期特别重要。
很多短周期 alpha 不是方向没用,而是:
> 仓位曲线太抖,收益没死在 signal,先死在 turnover。
README.md 里“NeurIPS 2026”目前只算 repo 自述1m / 3m / 5m / 15m 时必须重做窗口和成本口径如果今天只能抄走一件事,我不会先抄它的 transformer, 我会先抄这条:
> 把已有 raw alpha 的方向/强度信号,和“不确定性 + 组合风险状态 + 换手惩罚”分开建模,做成统一 adaptive sizing overlay。
这比继续补一条边际相近的新 entry rule,更可能直接提升当前素材池的实盘可用性。
sign / score / uncertainty proxy15m 先跑;确认有增量后再下钻 5m只有当 NAPS-lite 同时满足以下两条,再继续:
否则就别急着上深度模型,先把 overlay 维持在规则层。