源文件:research/quant_digests/2026-04-03_2224_poc-valuearea-fill-sanity-alpha.md
README.md + backtest_poc.py + bot.py)+ repo 附带 BTCUSDT_15m_real.csv 本地复核这次看的是一个 2026-03-22 新 GitHub repo:berkant1863-netizen/automated-trading-system。它表面上像“Volume Profile + Point of Control 自动交易 bot”,但对我们 desk 真正有价值的不是“会不会画 POC”,而是这条 base alpha 能不能在 15m 上被干净拆成:rolling POC 锚点 + 偏离入场 + ATR 风控 + 成本生存线。
一句话先下结论:base alpha 很清楚,确实是 raw alpha;但 repo 当前版本的优势几乎全部来自过于乐观的成交假设。把 fill model 改 honest 以后,策略会从“看起来像大坑/神迹”同时塌回“接近零边、极易被手续费吃掉”。
当前研究池里,pairs / funding / cross-market 已经很密;但 volume-profile / value-area anchor 还比较少见。它的好处是:
15m,也能往 5m / 3m 压;distance_to_POC、POC_drift、value-area excursion。所以这类题值得补进素材池,但前提是先把 alpha 本体 和 执行幻觉 分开。
berkant1863-netizen/automated-trading-systemautomated-trading-systemTC/USDT automated trading bot using Volume Profile and Point of Control strategy with backtestingbot.pybacktest_poc.pyBTCUSDT_15m_real.csvBTCUSDT_15m_real.csv2024-06-01 00:00:00 → 2025-07-09 17:30:0038,759 根 15m BTCUSDT bar15m/5m/3m kline 重跑repo 的逻辑很直接:
50 根 bar 的 high-low 区间,把每根 bar 的 volume 均匀撒到价格桶里;POC;POC - offset 时,做多,赌价格回到 POC;POC + offset 时,做空,赌价格回到 POC;ATR(21):SL = 1.5 x ATRTP = 3.0 x ATRmax($50, capital x 0.5%)这不是 breakout,也不是 order-book imbalance continuation。
它本质上是:
所以它的 base alpha 很清楚:
> rolling POC displacement fade
也就是:
> 对“偏离近期成交量重心”的价格做 fade。
这条线本身就是 raw alpha,不需要借别的 headline 才成立。
我先按 backtest_poc.py 的原始逻辑复现了一遍。关键点是:
POC ± offset 记;复现结果:
17,7962.83%-4,437.13 USD(初始资金 10,000 USD)0.057这和 repo 注释里写的“Win rate 2-4%、SL 96-97%”基本一致。
我做了一个故意的 stress test:
结果会直接从“血崩”变成“看起来像神迹”:
follow_no_gate:8,18688.32%+4,572.94 USD15.87这不是在说“POC breakout continuation 真有这么强”,而是在说:
> 同一份数据,只要你允许自己在过期的理想价成交,连信号方向都能被 fill 假设盖过去。
也就是说,这份 repo 当前最先需要验证的不是“信号精不精”,而是“成交是不是假的”。
我把入场改成更保守、更适合 desk 最小实验的规则:
#### A. 仍然做 POC fade,并加最简单 EMA200 同向 gate
1,48135.92%+11.33 USD1.0450.00765 USD1.53 bps#### B. 改成 POC displacement follow,并加 EMA200 gate
2,47235.40%+27.70 USD1.0670.0112 USD2.24 bps关键不是“哪一边略微正”,而是:
1.5 ~ 2.2 bps 的 round-trip 成本;举例:
fade + EMA200 + next-open 在 2 bps round-trip 下就会转负;follow + EMA200 + next-open 大约到 3 bps round-trip 也会转负。所以更准确的判断是:
> POC displacement 不是完全没信息,但 repo 当前版本的“可交易性”远弱于它展示出来的样子。
可以留,但不能以“现成完整策略”心态直接抄。
更合适的定位是:
raw alpha 候选(待严格执行复核)shared feature / shared gate如果一定要给一句短判断:
> 这不是“马上上线的 standalone raw alpha”,但它很适合被拆成一个 under-covered 的价量锚点特征族。
比起继续把它写成“POC 反转 bot”,更值得做的是:
mean reversion 的 admission;breakout/trend 的 stretch / exhaustion 判别;同一条信号,至少并排测 4 种成交口径:
signal close -> next bar opentouch-confirmed limitmaker-if-touched else skipstale POC fill(只保留作对照,不作 production 结论)如果 alpha 只在第 4 种活着,那就不是 alpha,是回测假设。
15m 压到 5m / 3m建议先测:
BTCUSDT, ETHUSDT15m, 5m, 3mPOC_drift veto0 / 2 / 3 / 5 bps round-trip判定标准很简单:
< 3 bps,降级成 feature,不当 standalone 策略;5m/15m 至少一个桶里能稳定扛住 >= 5 bps,才值得继续做 execution 细化。repo 现在的 POC 其实不是 order book 算出来的,而是:
high-low 区间按 volume 均匀分桶;下一步应该拆开测:
kline-derived rolling volume profile1m 聚合成交量 profile真实 depth snapshot / book ticker 构造的 book POC如果只有 proxy POC 有效、真 POC 没效,那就说明它更像 price-path artifact,而不是稳定微观结构信号。
raw alphasingle-asset mean reversion / value-anchor displacement我的建议:
5m/3m breakout 或 short-horizon MR,可以把它当共享输入层复用。这份 2026 volume-profile repo 的 base alpha 很清楚:就是 rolling POC displacement fade。但最小复核表明,当前脚本的表现高度依赖乐观 fill;把入场改成 next-open 后,fade/follow 都只剩 1.5~2.2 bps 量级的毛边,远没到可直接上线的厚度。
所以这轮最值得保留的,不是整份 bot,而是:
distance_to_POCPOC_driftvalue-area excursion把它们当成后续 mean reversion / breakout / trend 共用特征,会比继续把这份 repo 当成独立 alpha 更划算。