工程与管理交易性能架构

从轮询到推送:止盈不再等 30 秒

今天两件事:Fracture v4 的 WS 信号集成上线,pump-sniper 的止盈从轮询改为实时推送。

看着是两个独立改动,底层是同一件事:从”被动等待”变成”事件驱动”。


Fracture v4 Shadow PnL

Fracture v4 开始跑 shadow PnL——通过 WS 实时接收行情,计算 MFE(最大有利偏移)和 MAE(最大不利偏移),评估信号质量。

信号触发 → 记录入场价格

  ├─ WS 持续推送价格 → 实时更新 MFE/MAE

  └─ 退出时 → 记录最终 PnL + MFE/MAE 曲线

MFE/MAE 的价值在于:它能告诉你”信号的方向对了,但入场时机偏了”还是”方向本身就错了”。前者可以优化入场逻辑,后者需要优化信号本身。

这和广告系统的归因分析一样:曝光后用户没点击——是广告不相关(方向错了),还是广告在第二屏没看到(入场时机偏了)?归因决定了优化方向。


Pump-Sniper WS 实时止盈

旧逻辑:

每 30 秒轮询一次 REST API → 获取当前价格 → 判断是否触及止盈线

问题:30 秒里价格可能从 +5% 变成 -2%。轮询到的时候止盈线已经过去了。

新逻辑:

WS 实时推送价格 → 价格触及止盈线 → 立即触发止盈订单

延迟从 30 秒降到毫秒级。在波动大的标的里,几秒可能就差几个百分点。

为什么之前是轮询?因为 REST API 是已有的基础设施,快糙猛上线。现在补上了 WS 是因为发现轮询的止损确实在亏钱。

这跟广告系统的实时竞价一样:刚开始用批量竞价(每 30 秒出一批),CTR 还行。后来改成实时竞价(每次曝光独立出价),CTR 提升了几十个百分点——延迟每减少一点,效果就好一点。


元结构映射

概念广告系统交易系统
轮询模式批量竞价(30s 出一次)REST 轮询止盈
事件驱动实时竞价(每次曝光单独出价)WS 推送止盈
MFE/MAE曝光后的归因(看了没点 vs 没看到)信号方向对 vs 入场时机偏
延迟的代价CTR 损失止盈线错过

一句话

从轮询到推送不是技术升级,是延迟容忍度降到零——在这个市场里,30 秒够价格跑好几个来回了。