源文件:research/quant_digests/2026-04-05_1755_poc-cvd-absorption-alpha.md
README.md + vpvr_cvd_backtest_v2.py + vpvr_cvd_validation_suite.py + vpvr_cvd_trailing_test.py + vpvr_cvd_grid_search.csv + configs.json)15m/5m这次看的是一个 2026-03-21 创建、今天还在更新的 GitHub repo:breloom22/VPVR-CVD。它表面上像一个“VPVR + CVD divergence”脚本,但真正值得 intake 的不是指标名,而是它把一条可完整复现的单资产 raw alpha写得很清楚:
POC;一句话先下判断:base alpha 是清楚的,它不是 filter 冒充 alpha;但 repo 自己已经明确给出一个很重要的 transfer boundary——这条 edge 主要活在 crypto 1H,直接压到 15m/30m 是会失效的。
先回答一句:这篇东西的 base alpha 是什么?
> POC 附近的 absorption mean reversion。
也就是:
> 当价格还在“成交量公允区”一侧附近,但主动成交流(CVD)继续朝相反方向挤压,说明被动流动性在吸收,随后更容易出现回摆。
这条线值得看,不是因为 VPVR 或 CVD 这两个词看起来高级,而是因为它补的是当前池子里相对少一点的一类 raw alpha:
而且 repo 已经把:
都写成了源码或验证脚本,不是只有一张收益截图。
breloom22/VPVR-CVDVPVR + CVD Divergence Strategy2026-03-21 04:11:27 UTC2026-04-05 14:10:51 UTCVPVR + CVD divergence strategy for Binance Futures — smart money absorption detectionREADME.mdvpvr_cvd_backtest_v2.pyvpvr_cvd_validation_suite.pyvpvr_cvd_trailing_test.pyvpvr_cvd_grid_search.csvconfigs.jsondata.binance.vision 公共 aggTradesaggTrades.is_buyer_maker 逐笔聚合1h / 15m / 5m 数据上重做vpvr_cvd_backtest_v2.py 里,核心判定不是神秘黑盒,而是很朴素的四层条件:
#### A. 先算 rolling POC
vpvr_lookback = 50vpvr_num_bins = 50POC#### B. 再算 divergence 源码 detect_divergence():
div_lookback 根 barprice_window 与 cvd_window 做线性回归斜率MIN_SLOPE = 0.1判定:
bullish_absorption:price_slope_norm > 0.1 且 cvd_slope_norm < -0.1bearish_absorption:price_slope_norm < -0.1 且 cvd_slope_norm > 0.1翻成人话:
这就是典型的 absorption / adverse-selection 读法。
#### C. 再加 POC 距离与实体过滤 主验证配置在 vpvr_cvd_validation_suite.py 里写成:
div_lookback = 7min_body_atr = 0.7poc_min_atr = 0.3poc_max_atr = 2.5也就是:
#### D. 最终方向条件 在 run_backtest_fast() 里:
cp < poc 且 bullish_absorption → longcp > poc 且 bearish_absorption → short注意这一步很关键:
它不是单纯做 divergence,也不是单纯做 POC fade,而是:
> 只有当价格站在 POC 某一侧,且同侧出现“流动性吸收”型 divergence 时,才赌向 POC / 公允区回归。
这条 alpha 的内核可以写成一句:
> POC-proximal absorption fade
比“CVD divergence”更准确,因为真正起约束作用的是三件事一起成立:
所以这不是泛泛的“订单流分歧”,而是一条更具体的单资产 raw alpha。
README 主配置写的是:
BTC + ETH + SOL365d1H10x主结果:
8647.7%2.316+144.8%3.55-9.9%如果只看 README,这已经足够把它归成:
> 可独立复现、可完整落地的 raw alpha 候选。
README 还明确写了几条比“高收益”更有价值的结论:
15m / 30m / 2h / 4h 全部 PF < 1.01H 多数也不行这几句的价值很高,因为它们等于帮我们省掉了一堆无效内循环:
vpvr_cvd_grid_search.csv 里,PF 最高的极端参数组虽然能到 2.37,但只有 7 笔交易; 而 repo 最后落到主配置附近的更稳组合,是:
div_lb = 7body_atr = 0.7poc_min = 0.3poc_max = 2.5这说明作者自己也意识到:
> 真正可用的不是“最尖的 in-sample 顶格 PF”,而是 trade count、稳定性和 OOS 生存线。
这点和当前 desk 的学习主线是对齐的。
repo 自己已经给答案了:
> 这条壳在 1H 活,在 15m/30m 不活。
所以如果这轮把主题写成“15m 直接照抄 VPVR+CVD 就能跑”,那是误读。
更合理的 short-cycle 读法是:
> 把 1H absorption 当母信号,把 15m 当子执行层。
也就是说,对我们现在的 1m / 3m / 5m / 15m,它的第一落点不是“缩频”,而是:
1H 负责判 state15m 负责更好 entry / timeout / risk#### A. distance_to_POC 当前价格距 1H rolling POC 多远:
#### B. price_vs_CVD slope disagreement 这个 repo 最值钱的不是“CVD 数值”,而是:
> 价格路径与成交流路径是否背离。
这可以服务:
#### C. body / ATR impulse filter 源码要求 min_body_atr = 0.7,说明作者并不想抓“慢慢磨”的背离,而是想抓:
> 已经有足够实体推进、但推进里出现 absorption 的 bar。
这很适合拿去服务现有 fast fade / mean-reversion 壳。
如果只看“能不能直接做 15m standalone”,这条线不是当前最优先。
但如果问:它为什么比继续补一个普通 breakout / pairs 题更值得看?
我的答案是:
15m 子执行与 shared gate。所以这轮我会把它归成:
而不是简单降级成“一个 filter”。
1H parent -> 15m child不要直接把 repo 参数压到 15m;先做:
Parent(1H):
div_lb = 7body_atr >= 0.70.3 <= dist_to_POC / ATR <= 2.5Child(15m):
1H state 触发后的前 4 根 15m 内允许进场4~8 根 15m2 / 4 / 6 bps round-trip先回答一个简单问题:
> 同样的 1H state,用更聪明的 15m 进场,能不能把 repo 的 1H edge 带进 short-cycle?
拿现有两类壳先叠:
1H bullish_absorption & price < POC 时开多price-vs-CVD disagreement 时,降低顺势追价,优先 maker要测的不是方向胜率,而是:
repo 一个很实用的 claim 是:
> real aggTrades CVD 没有明显优于 CLV proxy。
这对 desk 很重要,因为如果 CLV 足够,15m / 5m 最小实验就不必先背逐笔数据负担。
建议直接并排:
CLV CVDsigned aggTrades deltasigned trade-count imbalance如果三者在 1H parent -> 15m child 里差别不大,优先保留最便宜口径。
既然 repo 已明确说 15m / 30m / 2h / 4h 都不行,desk 下一步不能只找“能赢”的改法,也要保留:
15m clone5m clone作为负对照。
如果 direct clone 继续死,而 1H parent -> 15m child 能活,这本身就是研究结论。
raw alphasingle-asset absorption / volume-anchor mean reversion15m 直接照抄的现成成品1H 母信号 + 15m 子执行5m / 3m / 1m 当前不建议直接压缩;先当 execution refinement,不当 primary signal我的建议:
vpvr_cvd_backtest_v2.pyvpvr_cvd_validation_suite.pyvpvr_cvd_trailing_test.pyvpvr_cvd_grid_search.csv这份 2026 repo 的 base alpha 是清楚的:POC-proximal price/CVD absorption fade。它不是一个 filter 冒充 alpha,而是一条能被完整复现的单资产 raw alpha 壳。
但 repo 真正最值钱的结论不是“收益很好”,而是:
1H 能活;15m / 30m / 2h / 4h 直接压缩会死;CLV proxy 大概率就够;TP/SL 比 trailing 更稳。所以这轮对 desk 最值得做的,不是照抄 15m VPVR+CVD,而是立刻去测:
> 1H absorption parent signal × 15m child execution
如果这条桥接能活,它就不是普通的 1H 策略,而是能进入当前 short-cycle 组件库的一条新母信号。