源文件:research/quant_digests/2026-04-18_0715_cvd-nonconfirm-extreme-fade-shell.md
README.md + cvd_strategy.py + scanner_worker.py + config.json)+ Binance USDⓈ-M 30m/15m public-data portability probeentry + ATR stop + ATR take-profit + strength/rvol/liquidity gate;但对我们 desk 更诚实的落地方式是 30m 扫描 + 15m/5m 子执行)先回答一句:这篇东西的 base alpha 是什么? 不是“量能过滤器”,也不是“trend overlay”。它的 base alpha 很直接:
> 价格已经把局部极值推出来了,但 CVD 没再跟着确认,最后一脚更像 exhaustion,后面先收一段短窗回摆。
所以这轮我把它归成 raw alpha / 单资产短持有 mean reversion,而不是 filter。
---
主来源是 GitHub 仓:
sspoiskrepo 不是学术论文,工程质量也偏“个人交易终端”而不是干净研究库,但它有一个优点:规则写得够直白,能快速转成最小实验。
我额外做了一个 Binance public-data probe,直接用 klines 里的:
closevolumetaker_buy_base重建 repo 里的 CVD 近似口径,再按它的“两段窗口找 bullish / bearish divergence”做 first verdict。
相关 artifact:
reports/artifacts/quant_digests/2026-04-18_cvd-divergence_30m_events.csvreports/artifacts/quant_digests/2026-04-18_cvd-divergence_30m_summary.csvreports/artifacts/quant_digests/2026-04-18_cvd-divergence_15m_events.csvreports/artifacts/quant_digests/2026-04-18_cvd-divergence_15m_summary.csvreports/artifacts/quant_digests/2026-04-18_cvd-divergence_portfolio.json---
这条 alpha 不是完全不能做,但当前明显不是“压到 15m 就能直接开跑”的裸短周期主信号;更像 30m 上只做强信号,再交给 15m/5m 去挑更好的 child entry。
一句话证明方式: repo 把 divergence 规则、ATR 风控和扫描阈值写成了可计算条件;我再用 Binance BTC/ETH/SOL/BNB/XRP/DOGE/ADA/LINK 近 90d 公共数据重做同口径 probe,结果看到:30m 强信号还有 gross edge,但 15m 压缩版整体转负。
---
cvd_strategy.py 的核心不是“扫描器”,而是这组很清楚的条件:
strength、RR、ATR stop/tp 做完整壳。翻成人话:
这和“看 RSI 超买超卖”不一样。这里盯的是:最后一脚价格推进,是否真的还得到 taker flow 确认。
---
strength、min_price_change_pct、min_cvd_change_pct、RR >= threshold、必要时再加 RVOL / liquidity30m 扫描后用 15m/5m 找 child entry,最后再走 friction ladder---
样本:Binance USDⓈ-M,BTC/ETH/SOL/BNB/XRP/DOGE/ADA/LINK,近约 90d。
30m 全样本不是很强,但开始有“慢一点的回摆”味道30m 全部信号共 6879 笔:
4 bar(约 2h)gross +2.49 bps,win rate 52.22%8 bar(约 4h)gross +3.15 bps,win rate 52.93%单看这个,还不够过 taker 成本线,但已经说明: 这条线更像慢一点的 snapback,不是下一根就立刻反。
30m 强信号分位把 strength 提到样本内 q75 后,1721 笔强信号变明显:
4 bar gross +15.91 bps,按 8 bps round-trip 粗扣后 net +7.91 bps8 bar gross +24.48 bps,net +16.48 bps4 bar win rate 56.71%,8 bar win rate 58.69%这说明: > 不是“有 divergence 就做”,而是“只做够强的 divergence”,这条壳才开始接近可交易。
15m,这条 edge 当前明显坏掉15m 全样本 12526 笔:
4 bar gross -3.34 bpsq75 反而更差,next 4 bar gross -6.33 bps8 bar 也仍是负的:gross -12.53 bps这轮最重要的 desk 结论就是: 别把 repo 的 divergence scanner 直接压成“15m 裸主信号”。当前更合理的是保留它的 30m context,然后把实际执行下沉到 15m/5m。
---
当前我们不是缺“又一个模糊 filter”,而是缺:
这条线的价值就在于:
30m 强信号可留,15m 压缩版先别碰;所以它值得进研究池,但不是因为“repo 很炫”,而是因为: 它给了我们一条已经做出 first verdict 的 mean-reversion raw alpha 壳。
---
在 liquid majors 上,30m 级别价格极值若未被 CVD 确认,后续 2h~4h 更容易先回摆;但这条 edge 需要 strength gate,且不应直接压成裸 15m。
先按 repo 原型:
strength >= q75 才允许交易。BTC/ETH/SOL/BNB/XRP/DOGE/ADA/LINK30m15m 或 5m90d30m divergence 触发后,不立刻追价;等下一根 15m 出现 first reversal close / micro pullback fillATR(14) 止损 + 2~4 bar time stop + repo 原始 RR 约束并行比较0 / 4 / 8 / 12 bps)---
klines 重建的 CVD 只是 taker-buy vs sell 的 bar 级近似,不等于逐笔订单流;真实 edge 可能更依赖更细颗粒数据。PARKED,不要硬拗。---
下一轮别再做“大而全重写”,直接做这 3 件事:
30m strength q75,把 15m/5m child entry 做成 2 个版本:close-confirm vs pullback-limit;8 bar 内不重复开仓,避免信号簇把均值吹高;taker 可做,还是只能当 maker-first fade pocket。如果这三步里,30m strong divergence 经过 child entry 后还能留住正 net,那么它就值得从研究池进入下一轮 admission check;反之就该诚实地标记为“有 raw alpha 形状,但当前只够做概念母体,不够直接上线”。