源文件:research/quant_digests/2026-04-17_2156_stablecoin-microdepeg-grid-shell.md
README.md + __main__.py + grid_gen.py + market_stats.py + order_manager.py + GitHub API metadata)+ Binance Spot FDUSDUSDC 1m public-data portability probe(近 45d)FDUSD/USDC)短时滑到近 1 小时区间低位、出现轻微 micro-depeg 时,后面几分钟常有回到中枢 / 弹回 1 tick 的均值回复;交易上对应 低位挂买 → 只吃第一跳反弹 → 很快走人。这轮优先级不是再补一个解释型 filter,而是补一条 base alpha 能一句话说清楚、而且能直接落成完整策略壳的 raw alpha。
我最后选的是 GitHub 仓库 wangshaofu / mm_bot:
先把它翻成人话:
> 这不是“稳定币对可以做网格”的空话;它真正下注的是:当 FDUSD/USDC 这类稳定币对短时掉到局部低位时,后面几分钟经常会先弹回 1 个 tick 左右。
所以它的本体不是 trend,也不是 funding carry,更不是跨 venue 套利;它就是一条很具体的 stablecoin micro-depeg mean reversion raw alpha。
grid_gen.py 和 __main__.py 串起来后,repo 的真实逻辑并不复杂:
1h 的 15m K 振幅估算当前可交易区间;best_bid 下方生成一串买单价格;order_manager.py 只保留最靠上的两个可用 grid level;buy_price + step,默认就是 +1 tick;last_minute_price + 0.0002 做 max-buy-threshold,避免价格已经抬高时继续追着挂。这说明 repo 真正在做的事其实是:
> 抓“稳定币对短时偏离 → 很快回一格”这件事,而不是长期持有或大波段判断。
这份仓库最值得保留的,不是 U-shaped 这个词,而是它把完整壳给齐了:
+1 tick 卖出这比很多“只有一个因子公式”的 repo 更适合 desk intake,因为它已经自然回答了:
repo 里最关键的安全护栏之一,是 check_trading_fees():
0这其实已经把作者的真实判断写死了:
> 这条 edge 本来就薄,必须尽量站在 maker 一侧吃回弹;一旦改成正常 fee / taker 口径,很可能马上死。
所以正确读法不是“又一个稳定币小网格”,而是:
> 一个对摩擦极端敏感的微观均值回复 raw alpha 壳。
为了不把源码故事直接当结论,我补了一个很小但够用的 public-data probe。
FDUSDUSDC 1m klines45d,共 64,800 根 1m bars0.99963,区间约 0.9986 ~ 1.0025p95 约 0.0005(约 5 ticks)我没有假装能从 K 线完整复盘真实挂单队列,而是只验证一句最核心的话:
> 当价格滑到近 1 小时区间低位后,后面 15 分钟里,是否经常能先反弹 +1 tick?
选了一个尽量贴近 repo 精神、但能用公共 K 线复现的定义:
60m 的 rolling high / lowclose <= previous_60m_low + 0.0002close_location <= 0.2(也就是落在最近 1 小时区间底部 20%)close <= prev_close(仍在往下滑)15m 内任一 bar 的 high 先打到 entry + 0.0001,就按 +1 tick 走15m close 超时离场这条最小版规则在近 45d 上给出:
1,293+1 tick 命中率:93.0%+0.886 bps / 笔+1.001 bps / 笔3.83 分钟p90 持有:11 分钟+11.45%这组数最值钱的地方不是“赚了多少”,而是形状非常像 repo 假设:
我又补了一个简单 friction ladder:
0 bps round-trip:平均 net 约 +0.886 bps / 笔0.5 bps round-trip:平均 net 约 +0.386 bps / 笔1.0 bps round-trip:平均 net 约 -0.114 bps / 笔2.0 bps round-trip:平均 net 约 -1.114 bps / 笔一句话结论非常直接:
> 这条 edge 不是“费后也很厚”的 alpha,而是典型的低摩擦微观口袋;round-trip 一过 1 bps,大概率就不值钱了。
这也反过来解释了 repo 为什么把 零费率 guard 写成硬约束,而不是可选项。
最近素材池里:
它跟一般 breakout / momentum 完全不是一回事,也不是把某个 filter 硬包装成 alpha。
这条线的价值,不只是“也许能赚点 tick”,更在于它几乎是 execution realism 的标准教材:
也就是说,它天然逼着 desk 把 alpha / fee / queue / capacity 四件事拆开看清楚。
后面如果再测:
都很适合先拿这条线做 baseline:
> 如果连最简单的 stablecoin micro-depeg fade 都跑不通,复杂版本多半只是换了个更贵的故事。
FDUSDUSDC 短时落到近 1h 区间低位后,未来几分钟高概率先反弹 +1 ticklast_minute_price + 0.0002 max-buy-threshold;只挂 top-two valid grid levels;fee 非 0 直接停机+1 tick exit这条线下一步不该直接上“大回测美化”,而该先补 3 个最小但决定性的 realism test:
用 Binance depth 或 aggTrades 级数据,测 top-two grid level 的真实成交概率,而不是只看 K 线 high 有没有摸到。
不只测 0 / 0.5 / 1.0 / 2.0 bps,还要把“挂单没排到、被动成交比例下降、撤单重挂损耗”一起建进去。
复制到 USDC/USDT、FDUSD/USDT、USDC/FDUSD 的可交易 venue / session 上,判断它是不是只在 FDUSDUSDC 这个局部环境成立。
如果这三步里:
0.5 bps 以上净边,那它就值得升级成 desk 的 maker micro-alpha 素材;否则更适合保留为 execution / capacity 研究样本。
+1 tick,不等于你的挂单真能排到。1 bps round-trip 左右就接近净负。Repo URL: https://github.com/wangshaofu/mm_bot
Klines endpoint: https://api.binance.com/api/v3/klines?symbol=FDUSDUSDC&interval=1m
research/quant_digests/2026-04-17_2156_stablecoin-microdepeg-grid-shell.mdreports/artifacts/quant_digests/2026-04-17_fdusdusdc_microdepeg_probe_summary.jsonreports/artifacts/quant_digests/2026-04-17_fdusdusdc_microdepeg_probe_trades.csvreports/artifacts/quant_digests/2026-04-17_fdusdusdc_microdepeg_probe_costs.csv