Files
Chan/research/out/verify_patch.csv
T
UbuntuandCursor 7e339d2a54 research: 影子交易器落在 Hummingbot 上,并修掉 Bitget 连接器的换根延迟
1m 腿的滑点余量只有几个 bp,所以要测的必须是生产路径的滑点——换个运行时
测出来的数就不作数。框架因此从「滑点已知后再定」提前到测量阶段就定为
Hummingbot(Spot/Perp 连接器均 v2.0,Bitget 是 Foundation Partner)。

新增 research/live/。前置测量:

- bench_compute.py 本机算力,1m 单币 0.318s、三币串行 1.38s
- venue_parity.py Binance 与 Bitget 同根信号重合仅 14.6~42.6%
- signal_sensitivity.py 0.25bp 扰动就换掉一半信号
- aggregate_robustness.py 但总体期望不降——脆的是信号身份,不是 alpha
- bitget_baseline.py 因此改用 Bitget 原生基线定预算:余量 BTC -0.13bp、
  ETH +4.02bp、SOL +2.92bp。BTC 本就为负,只作延迟测量的参照物

运行时选型:

- parity_env.py 容器与本机信号逐一相同(下标、中枢数、checksum 全等),
  容器内 0.26s/币反而更快。故 chanlun 直接挂载进容器,不必另起信号服务。
  装进现有 .venv 那条路走不通:Hummingbot 要 numba>=0.61.2 与
  aiohttp<3.14,与本机 Python 3.14 冲突
- latency_ccxt.py / latency_hummingbot.py / latency_compare.py 初测显示
  Hummingbot 比 ccxt.pro 慢约 1030ms,90 根逐根配对里 80~97% 更慢
- probe_ws_action.py 否掉「丢弃 snapshot」的猜测:换根首条就是 update
- probe_hb_vs_raw.py 与 latency_attribute.py 四路归因——容器网络 2~18ms、
  Hummingbot 处理 -10~-30ms,1350~1480ms 全落在解析方式上
- probe_ws_payload.py 定位根因:Bitget 换根会推一条带两根的消息
  [上一根, 新一根],而上游取 data["data"][0] 拿到的是上一根,新一根要等
  下一条单元素消息

修复:

- patched_candles.py 处理消息里的全部元素。不能简单改成 [-1]——那样上一根
  的收盘价会永远停在换根前约 1 秒的那次推送上,而信号对 0.25bp 都敏感
- verify_patch.py 60 根配对验证:拿回 1060~1090ms,与原始 WS 只差 5~14ms
  已贴理论下限,19 根已收盘 K 线 OHLCV 逐根未变。折算 ETH 省 0.54bp、
  SOL 省 0.42bp。此 bug 值得向上游反馈

影子交易器:

- shadow_hb.py 不下单,读连接器真实盘口按仓位吃单深度算成交价,与次根开盘价
  (回测 entry_delay=1 的口径)相减,分解成延迟漂移、盘口价差、深度冲击。
  盘口 10Hz 滚动缓冲 30 秒,把延迟变成自变量:每个信号记 0.5/1/2/5s 与实际
  算完时刻各一个滑点值,本机算得慢也不影响能读出的曲线
- shadow_signal.py 信号计算隔离到子进程。0.26s 是纯 CPU 且 chanlun 受 GIL
  限制,放进 asyncio 循环会把行情处理一起卡住
- shadow_report.py 首日延迟门槛与滑点曲线报表

不用 paper trade 测滑点:它的成交由 Hummingbot 自己的撮合模型模拟,
测出来是模型行为而非市场行为。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-27 23:51:57 +08:00

4.0 KiB

1symkline_tsrawpatchedstockgain_mspatched_minus_raw_ms
2BTC17878420800001787842080301178784208015917878420811691010-142
3ETH1787842080000178784208030117878420803111787842081371106010
4SOL178784208000017878420803751787842080382178784208138210007
5BTC178784214000017878421401301787842140139178784214119910609
6ETH178784214000017878421402891787842140291178784214170314122
7SOL178784214000017878421411331787842141137178784214113704
8SOL17878422000001787842200923178784220117917878422023211142256
9BTC1787842200000178784220204717878422020781787842203110103231
10ETH1787842200000178784220215417878422021701787842202170016
11BTC1787842260000178784226040417878422604181787842261601118314
12ETH178784226000017878422604341787842260439178784226166312245
13SOL178784226000017878422607141787842260721178784226172510047
14ETH178784232000017878423202401787842320244178784232137411304
15SOL178784232000017878423203001787842320305178784232139510905
16BTC1787842320000178784232050017878423205171787842321809129217
17ETH178784238000017878423802411787842380243178784238024302
18BTC1787842380000178784238056017878423805771787842381627105017
19SOL178784238000017878423811891787842381192178784238119203
20SOL178784244000017878424400681787842440070178784244120111312
21ETH1787842440000178784244022217878424402321787842441272104010
22BTC178784244000017878424403151787842440324178784244134410209
23ETH1787842500000178784250022617878425002411787842501593135215
24SOL1787842500000178784250068117878425006951787842501970127514
25BTC1787842500000178784250090917878425009481787842500917-3139
26ETH178784256000017878425604391787842560445178784256148810436
27SOL178784256000017878425609461787842560949178784256196310143
28BTC178784256000017878425612341787842561232178784256124412-2
29BTC1787842620000178784262011417878426201301787842621432130216
30ETH178784262000017878426204711787842620473178784262149410212
31SOL178784262000017878426208381787842620846178784262202811828
32SOL178784268000017878426802881787842680290178784268142011302
33ETH178784268000017878426813931787842681399178784268139906
34BTC1787842680000178784268146117878426814711787842682633116210
35BTC17878427400001787842740269178784274026717878427414701203-2
36SOL17878427400001787842740344178784274033817878427414481110-6
37ETH178784274000017878427405301787842740531178784274178312521
38SOL178784280000017878428005651787842800567178784280056702
39BTC17878428000001787842802054178784280225617878428040971841202
40ETH1787842800000178784280213817878428021441787842802165216
41SOL178784286000017878428603171787842860322178784286149711755
42BTC1787842860000178784286058517878428605981787842860587-1113
43ETH178784286000017878428610831787842861092178784286247713859
44BTC178784292000017878429201481787842920156178784292143712818
45SOL178784292000017878429204251787842920429178784292236719384
46ETH1787842920000178784292071717878429207321787842920721-1115
47ETH178784298000017878429804741787842980480178784298226917896
48SOL1787842980000178784298071717878429807231787842980712-116
49BTC1787842980000178784298075417878429807741787842980764-1020
50BTC1787843040000178784304022217878430402521787843041283103130
51SOL1787843040000178784304081817878430408271787843040817-109
52ETH17878430400001787843040902178784304088817878430419101022-14
53BTC178784310000017878431005961787843100604178784310215015468
54ETH17878431000001787843100950178784310076617878431020391273-184
55SOL1787843100000178784310131917878431013211787843101332112
56SOL1787843160000178784316057617878431605881787843161749116112
57BTC178784316000017878431607871787843160801178784316180099914
58ETH178784316000017878431608891787843160892178784316215412623
59SOL178784322000017878432201131787843220125178784322111398812
60BTC178784322000017878432203771787843220377178784322180214250
61ETH1787843220000178784322122017878432212461787843222268102226