币池可配,实测十币的排队代价;标出漂移的 tick 地板
加 --syms(start.sh 传 SYMS),默认仍是三币。TRX 不进十币池:实盘口径 208 天 只有 5 笔,ATR 门控几乎全刷掉。 十币实测(对比三币): queue_ms 2 → 169ms(P90 519ms,每刻最大排队中位 533ms) inner_ms 144 → 196ms(CPU 争抢也拖慢了纯计算) lag_signal_ms 621 → 958ms;同一收盘时刻最后算完的币中位 1376ms 排队从可忽略变成主项,与「10 币 × 196ms ÷ 2 核 ≈ 640ms 突发」吻合。这也是 之前「加核没用」那个结论唯一会翻转的场景:CPU 占用率只有约 3%,问题纯粹是 所有币同一秒收盘的突发,加核压的是并行度而非单币耗时。 但 800ms 哨兵不受影响——它喂的是 t_data − kline_ts(数据腿),十币下逐币 154~532ms 全在线内。加币不碰那道闸。 另外发现一个会被静默误读的东西:ADA/AVAX/DOGE/LINK/LTC 的漂移中位精确等于 半个 tick 且在四个延迟点上完全相同。那不是漂移,是中价的最小变动量——ADA 半 tick 就有 2.34bp。拿这个数去比预算会误判某币不可做。shadow_report 加了 tick_floor() 标注;方向上安全(真实漂移只会更小,这些是上界)。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -825,10 +825,18 @@ async def main_async(workers: int, hours: float, pool) -> None:
|
||||
|
||||
|
||||
def main() -> None:
|
||||
global SYMS
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument("--hours", type=float, default=24.0)
|
||||
ap.add_argument("--workers", type=int, default=2)
|
||||
# 币数直接决定排队:所有币在同一秒收盘,worker 少于币数就必然排队,
|
||||
# 最后一个币的信号要等 ceil(n/worker) 轮计算。TRX 不在默认池里——
|
||||
# 实盘口径 208 天只有 5 笔,ATR 门控几乎全刷掉(HANDOFF §step48)
|
||||
ap.add_argument("--syms", default=",".join(SYMS),
|
||||
help="逗号分隔。十币池:BTC,ETH,SOL,BNB,XRP,DOGE,ADA,"
|
||||
"AVAX,LINK,LTC")
|
||||
a = ap.parse_args()
|
||||
SYMS = tuple(s.strip().upper() for s in a.syms.split(",") if s.strip())
|
||||
# 进程池必须在事件循环和任何 WS 连接之前建好:fork 一个已带活跃 socket
|
||||
# 的进程会把连接状态一起复制过去,后果不可预测
|
||||
with ProcessPoolExecutor(max_workers=a.workers) as pool:
|
||||
|
||||
Reference in New Issue
Block a user