源文件:research/quant_digests/2026-04-12_1217_passivbot-ema-forager-bounce-alpha.md
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 probeforager 只挑高波动币、wallet exposure / unstuck / HSL 做风险壳。先回答一句:这篇东西的 base alpha 是什么?
> base alpha = EMA-band overshoot 之后的短时回摆(bounded bounce / mean reversion),而不是 generic automation framework。
如果这句答不清,Passivbot 最多只能算执行层或风险壳;但这轮其实答得清:
README 直接写了它不预测趋势、不跟趋势;翻成人话:
> 它赌的不是“V 字大反转”,而是“跌太急以后,先回一口气”的那段短回摆。
这就是 raw alpha,不是 filter,也不是纯 execution plugin。
这轮继续补它,有两个原因:
GitHub API 元数据显示:
enarjord/passivbot2020-12-112026-04-111936 stars / 643 forks我们最近已经 intake 了很多:
但像这种:
的成熟 mean-reversion 母板,仍然值得收一张。
本轮实际读到的关键材料:
README.mddocs/configuration.mddocs/backtesting.mdconfigs/examples/default_trailing_grid_long_npos10.jsonsrc/config/schema.pyREADME 里最重要的不是“支持哪些交易所”,而是这句自我定义:
> It does not try to predict future price movements ... Rather, it is a contrarian market maker.
这句话非常关键,因为它直接把题目从:
拉回到:
这正是我们 desk 能直接拆的 raw alpha。
docs/configuration.md 明确写了:
ema_span_0, ema_span_1 的单位都是 分钟;ema_band_lower = min(emas)ema_band_upper = max(emas)也就是说,repo 的 admission 不是“跌 x% 就买”这么粗。 它先定义了一个动态平衡区,然后问:
> 当前价格是不是已经跌穿这条下沿带 enough?
默认 long example 里的关键参数是:
ema_span_0 = 770ema_span_1 = 210entry_initial_ema_dist = 0.0097entry_grid_spacing_pct = 0.033entry_grid_spacing_volatility_weight = 2.4翻成人话:
> 不是固定离均线 1% 就永远一样地接,而是 EMA 锚 + 波动加权 spacing 一起决定“这次跌得算不算够深”。
README 对 trailing entry 的解释很直白:
这对 desk 特别重要,因为它比很多 naive mean reversion 更诚实:
所以它的第一句可交易翻译其实是:
> deep overshoot + small retrace > pure deep overshoot。
默认 long config 里:
close_grid_markup_start = 0.00634close_grid_markup_end = 0.0094close_grid_qty_pct = 0.51close_trailing_*也就是说,repo 的核心不是“等它回到原点”,而是:
> 只要库存均价附近能反弹一点点,就先主动把货卸掉。
这也是它和很多“均线回归”课件的区别:
README 直接写了 Forager:
1m candles 的 normalized relative range 定义 volatility;默认 long config 里也明确:
forager_score_weights.volatility = 1.0forager_volatility_ema_span = 225n_positions = 10total_wallet_exposure_limit = 1.25这点很重要,因为它直接告诉我们:
> Passivbot 不是“看到 stretch 就在全 universe 全开”,而是更像只去最活跃、最容易给回摆的币上收租。
这也是这轮 public probe 最后会得出的核心结论之一。
repo 的风控语义很完整:
total_wallet_exposure_limitrisk_wel_enforcer_thresholdrisk_twel_enforcer_thresholdunstuck_*hsl_*(equity hard stop loss)特别是 README 对 unstucking 的描述很 desk:
> 对长期卡住的库存,不是永远死扛,而是分批小亏实现,把最接近当前价的 stuck inventory 优先卸掉。
这说明什么?
说明 repo 作者非常清楚:
所以它从一开始就不是“只要均值回归就行”的天真模型,而是:
> raw alpha + exposure governance + gradual damage control 的完整策略。
5m/15m 后,哪里还能活?本地 artifacts:
/root/clawd/jerry/momentum/reports/artifacts/literature/passivbot_trailing_grid_probe_2026-04-12_summary.csv/root/clawd/jerry/momentum/reports/artifacts/literature/passivbot_trailing_grid_probe_2026-04-12_asset.csv/root/clawd/jerry/momentum/reports/artifacts/literature/passivbot_trailing_grid_probe_2026-04-12_detail.csv/root/clawd/jerry/momentum/reports/artifacts/literature/passivbot_forager_alt_probe_2026-04-12_summary.csv/root/clawd/jerry/momentum/reports/artifacts/literature/passivbot_forager_alt_probe_2026-04-12_symbol.csv/root/clawd/jerry/momentum/reports/artifacts/literature/passivbot_forager_alt_probe_2026-04-12_detail.csv我没有假装完整复刻 Passivbot,而是先做一版desk-friendly honest port:
5m / 15m K 线2025-10-01 到 2026-04-12BTC/ETH/SOL/BNB/XRP/DOGEETH/BNB/XRP/SOL210 / 770 min EMA 映射成约 14 / 51 barsema_band_lowermax(固定门槛, 波动倍数 × normalized range)+40 bps2 根 15m(约 30m)8 bps注意:
> 这不是 full fill simulator。 没有 queue priority、没有 partial fill、没有多档 inventory。它只是回答:把 Passivbot 的 base alpha 抽出来后,price-level 上有没有 first-pass portability。
如果把它粗暴地压到 BTC/ETH/SOL/BNB/XRP/DOGE 六币宽 universe:
15m baseline gross 平均约 -2.41 bps/笔-10.41 bps/笔5m 更差,maker 粗扣后约 -9.84 bps/笔这说明:
> Passivbot 的 alpha 绝不是“看到 stretch 就在所有主流币上无脑接”。
也说明如果把 repo 只读成“反向网格机器人”,你会很容易做出一个负边际版本。
当我开始更认真地保留 repo 的 forager 思路—— 即:
情况就变了。
#### Variant A:alt4_balanced 标的:ETH/BNB/XRP/SOL
规则:
stretch >= max(1.2%, 2.5 × vol)close_in_range >= 0.85TP = +40 bps30m结果:
141 笔+4.81 bps/笔68.1%-3.20 bps/笔这说明:
> alpha 本体有,但还不够;必须更像真正的 forager。
#### Variant B:alt4_extreme 再把 stretch 做深:
stretch >= max(1.5%, 3.0 × vol)结果:
56 笔+13.66 bps/笔69.6%+5.65 bps/笔这已经从“有 raw alpha 但费后不够”变成:
> 在 deep-stretch alt pocket 里,至少 price-level first pass 是费后可活的。
#### Variant C:alt4_extreme_top2vol 如果进一步要求:
ETH/BNB/XRP/SOL 里 vol rank top-2 的币结果:
29 笔+19.90 bps/笔79.3%+11.88 bps/笔但要诚实说:
在更深的 forager pocket 里:
XRP / ETH / BNB / SOL 都能给出正的 gross 边际;BTC 反而不亮眼;DOGE 在宽 universe 里经常拖后腿。这和 repo 的自述高度一致:
> 它不是“majors 通吃的均值回归公式”,更像高波动 alt inventory harvest shell。
这轮最值钱的不是“Passivbot 能不能直接照搬”,而是这 3 句:
base alpha 很清楚:就是 EMA-band overshoot 后的短时回摆,不是 generic bot infra。
宽 universe 的 naive port 明显不行;不保留 forager 思路,就会把 alpha 做死。
真正可 intake 的,不是“全币反向网格”,而是「volatile-alt deep stretch × trailing retrace × maker-first TP」这个更窄、更深、更 honest 的版本。
如果要给 desk 一个一句话落点,我会写成:
> Passivbot 最适合 desk intake 的,不是全自动网格,而是 15m 父信号上的 volatile-alt deep overshoot bounce shell;forager 不是锦上添花,而是 alpha 本体的一部分。
原因很简单:
default_trailing_grid_long_npos10;total_wallet_exposure_limit = 0,本质上先把 short 关了;Universe
ETH / BNB / XRP / SOLDOGE / AVAX / LINK 做二轮扩展,但不要一开始就加Signal timeframe
15m 父信号1m / 3m 子执行Entry
14 / 27 / 51 EMA band(15m 等价映射)stretch >= max(1.2%~1.5%, 2.5x~3.0x vol)>= 85%Sizing
2~3 层 capped ladder:1.0x / 1.25x / 1.5x10%~12.5% wallet exposureExit
+40 bps+63.4 bps(对应 repo 默认 close_grid_markup_start)30m 未出清则主动减库存Risk
<= 2它服务的是:
而 forager / HSL / unstuck / wallet exposure 都是在保护这条 raw alpha,不是另一个主题。
这张卡和一般 reverse-grid / martingale 卡不是一回事,它更强调:
也就是说,它更像:
> 短周期 maker-style mean reversion portfolio shell
而不只是“另一个网格 bot”。
EMA band admissiontrailing retrace 代替盲目抄底forager 只做 volatile alt pocketmaker-first + small bounce TPunstuck / HSL / wallet exposure 风控语言> 值得作为 raw alpha intake,但只应该 intake 它的“deep-stretch alt forager bounce”版本;宽 universe naive 版不合格。
把这轮的 +40 bps TP 事件,改成:
1m child-order replay先回答:这轮 +5.65 ~ +11.88 bps/笔 的 maker-net 还有多少能留下来。
对 alt4_extreme 版本做:
比较:
TP hit ratetime-to-flatdeepest layer reachedtail loss这会告诉我们:
> edge 到底来自 alpha 本体,还是只是来自更激进的 inventory averaging。
固定其他参数不动,只比较:
如果 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,这条线大概率会被做成负边际。