← 返回 Quant Digests · 站点首页

别把 Passivbot 只读成“自动挂网格机器人”:对 short-cycle desk,更该先测的是「EMA-band overshoot × trailing retrace × volatile-alt forager」这条 raw alpha

更新时间:2026-04-12 12:19 UTC 研究时间:2026-04-12 12:17 UTC 类型:2020-2026 GitHub repo source audit(GitHub API metadata + `README.md` + `docs/configuration.md` + `docs/backtesting.md` + `configs/examples/default_trailing_grid_long_npos10.json` + `src/config/schema.py`)+ Binance USDⓈ-M `15m/5m` public portability probe 主题标签:raw-alpha/mean-reversion/single-asset/market-making/ema-band/trailing-retrace/forager/volatile-alt/maker-first/grid/perpetual/binance/bybit/1m/5m/15m/repo/public-data/cost/risk 证据类型:成熟高信号开源 repo + 明确配置语义 + 公共数据 portability probe

源文件:research/quant_digests/2026-04-12_1217_passivbot-ema-forager-bounce-alpha.md

1. 这次看它,不是为了再收一张“网格 bot 教程”

先回答一句:这篇东西的 base alpha 是什么?

> base alpha = EMA-band overshoot 之后的短时回摆(bounded bounce / mean reversion),而不是 generic automation framework。

如果这句答不清,Passivbot 最多只能算执行层或风险壳;但这轮其实答得清:

  1. 先等价格偏离本地平衡区;
  2. 分层接库存;
  3. 只要回一小口就用 fee-aware take-profit 卸货;
  4. 如果行情一直不回,就靠 exposure cap / unstuck / HSL 控尾部。

翻成人话:

> 它赌的不是“V 字大反转”,而是“跌太急以后,先回一口气”的那段短回摆。

这就是 raw alpha,不是 filter,也不是纯 execution plugin。

2. 为什么这轮值得看它

这轮继续补它,有两个原因:

  1. 它是 repo-based 且工程完成度很高。
  2. GitHub API 元数据显示:

  1. 它补的是当前素材池里较少见的一类 raw alpha 壳。
  2. 我们最近已经 intake 了很多:

但像这种:

的成熟 mean-reversion 母板,仍然值得收一张。

3. 主来源与最有用的地方

3.1 主来源

本轮实际读到的关键材料:

3.2 README 给的最关键一句

README 里最重要的不是“支持哪些交易所”,而是这句自我定义:

> It does not try to predict future price movements ... Rather, it is a contrarian market maker.

这句话非常关键,因为它直接把题目从:

拉回到:

这正是我们 desk 能直接拆的 raw alpha。

4. repo 里真正值得搬走的,不是“网格”二字,而是这 4 个结构件

4.1 EMA band 是 admission anchor,不是装饰

docs/configuration.md 明确写了:

也就是说,repo 的 admission 不是“跌 x% 就买”这么粗。 它先定义了一个动态平衡区,然后问:

> 当前价格是不是已经跌穿这条下沿带 enough?

默认 long example 里的关键参数是:

翻成人话:

> 不是固定离均线 1% 就永远一样地接,而是 EMA 锚 + 波动加权 spacing 一起决定“这次跌得算不算够深”。

4.2 trailing entry 的本质,是“先别接飞刀,等它回一小口”

README 对 trailing entry 的解释很直白:

这对 desk 特别重要,因为它比很多 naive mean reversion 更诚实:

所以它的第一句可交易翻译其实是:

> deep overshoot + small retrace > pure deep overshoot

4.3 close 逻辑赌的不是大反转,而是“小回一口就够”

默认 long config 里:

也就是说,repo 的核心不是“等它回到原点”,而是:

> 只要库存均价附近能反弹一点点,就先主动把货卸掉。

这也是它和很多“均线回归”课件的区别:

4.4 Forager 决定了:这条 alpha 默认不该在所有币上一视同仁地打

README 直接写了 Forager

默认 long config 里也明确:

这点很重要,因为它直接告诉我们:

> Passivbot 不是“看到 stretch 就在全 universe 全开”,而是更像只去最活跃、最容易给回摆的币上收租。

这也是这轮 public probe 最后会得出的核心结论之一。

5. 风控不是附属品,而是这条 alpha 能不能活下来的必要条件

repo 的风控语义很完整:

特别是 README 对 unstucking 的描述很 desk:

> 对长期卡住的库存,不是永远死扛,而是分批小亏实现,把最接近当前价的 stuck inventory 优先卸掉

这说明什么?

说明 repo 作者非常清楚:

所以它从一开始就不是“只要均值回归就行”的天真模型,而是:

> raw alpha + exposure governance + gradual damage control 的完整策略。

6. public portability probe:把它压到 Binance perp 5m/15m 后,哪里还能活?

本地 artifacts:

6.1 先说我怎么做的

我没有假装完整复刻 Passivbot,而是先做一版desk-friendly honest port

  1. 价格 low 跌穿 ema_band_lower
  2. stretch 至少达到 max(固定门槛, 波动倍数 × normalized range)
  3. bar close 落在本 bar 上半区,近似“出现 retrace”
  4. 下一根 open 进场

注意:

> 这不是 full fill simulator。 没有 queue priority、没有 partial fill、没有多档 inventory。它只是回答:把 Passivbot 的 base alpha 抽出来后,price-level 上有没有 first-pass portability。

6.2 先看坏消息:宽 universe 直译版不行

如果把它粗暴地压到 BTC/ETH/SOL/BNB/XRP/DOGE 六币宽 universe:

这说明:

> Passivbot 的 alpha 绝不是“看到 stretch 就在所有主流币上无脑接”。

也说明如果把 repo 只读成“反向网格机器人”,你会很容易做出一个负边际版本。

6.3 真正有信号的地方:volatile-alt forager pocket

当我开始更认真地保留 repo 的 forager 思路—— 即:

情况就变了。

#### Variant A:alt4_balanced 标的:ETH/BNB/XRP/SOL

规则:

结果:

这说明:

> alpha 本体有,但还不够;必须更像真正的 forager。

#### Variant B:alt4_extreme 再把 stretch 做深:

结果:

这已经从“有 raw alpha 但费后不够”变成:

> 在 deep-stretch alt pocket 里,至少 price-level first pass 是费后可活的。

#### Variant C:alt4_extreme_top2vol 如果进一步要求:

结果:

但要诚实说:

6.4 各币分布说明了什么

在更深的 forager pocket 里:

这和 repo 的自述高度一致:

> 它不是“majors 通吃的均值回归公式”,更像高波动 alt inventory harvest shell

7. 这轮最重要的结论

这轮最值钱的不是“Passivbot 能不能直接照搬”,而是这 3 句:

结论 1

base alpha 很清楚:就是 EMA-band overshoot 后的短时回摆,不是 generic bot infra。

结论 2

宽 universe 的 naive port 明显不行;不保留 forager 思路,就会把 alpha 做死。

结论 3

真正可 intake 的,不是“全币反向网格”,而是「volatile-alt deep stretch × trailing retrace × maker-first TP」这个更窄、更深、更 honest 的版本。

如果要给 desk 一个一句话落点,我会写成:

> Passivbot 最适合 desk intake 的,不是全自动网格,而是 15m 父信号上的 volatile-alt deep overshoot bounce shell;forager 不是锦上添花,而是 alpha 本体的一部分。

8. 对当前 desk,怎么落成一条完整策略

8.1 第一版建议先做 long-only

原因很简单:

8.2 desk 版最小可执行 spec

Universe

Signal timeframe

Entry

Sizing

Exit

Risk

8.3 这条线服务于哪个 raw alpha

它服务的是:

forager / HSL / unstuck / wallet exposure 都是在保护这条 raw alpha,不是另一个主题。

9. 它和已有“reverse-grid / bounded-bounce”卡的区别

这张卡和一般 reverse-grid / martingale 卡不是一回事,它更强调:

  1. EMA band anchor,不是只用一个静态百分比带宽;
  2. trailing retrace admission,不是一碰深偏离就直接接;
  3. forager vol ranking,不是对全 universe 一视同仁;
  4. portfolio-style exposure governance,不是单币孤立回测。

也就是说,它更像:

> 短周期 maker-style mean reversion portfolio shell

而不只是“另一个网格 bot”。

10. 我的判断

值得 intake 的部分

不建议直接照搬的部分

当前 verdict

> 值得作为 raw alpha intake,但只应该 intake 它的“deep-stretch alt forager bounce”版本;宽 universe naive 版不合格。

11. 下一步怎么测(最重要)

A. 做真正的 maker fill honesty check

把这轮的 +40 bps TP 事件,改成:

先回答:这轮 +5.65 ~ +11.88 bps/笔 的 maker-net 还有多少能留下来。

B. 做 layer test,而不是只做单层事件研究

alt4_extreme 版本做:

比较:

这会告诉我们:

> edge 到底来自 alpha 本体,还是只是来自更激进的 inventory averaging。

C. 做 forager vs no-forager A/B

固定其他参数不动,只比较:

如果 top-2 / top-3 明显优于全做,就说明:

> forager 不是 overlay,而是这个 repo 里必须保留的 alpha 组成部分。

---

一句话结论

> Passivbot 最值得 desk intake 的,不是“自动网格”这个壳,而是「volatile-alt 上 deep EMA-band overshoot 后,等一小段 retrace 再用 maker-first TP 收 bounce」这条 raw alpha;不保留 forager,这条线大概率会被做成负边际。