大家好,我在做行情可视化时碰到过这类现象:
- 回调补数与实时推送交错;
- 后到的旧 tick 把已经闭合的 bar 又改写;
- 图表上出现「最后一根突然缩回去再蹦出去」。
想请教社区更稳妥的做法,并分享我用于定位的最小复现框架(与具体券商无关)。
最小复现构造
用本地模拟器按时间戳乱序喂入:
t1 open bar
t3 tick (先到)
t2 tick (后到,但时间更早)
t4 close bar
观察:
- bar 的 high/low 是否被旧 tick 污染;
- 已向 UI 提交的 snapshot 是否被 retrospectively 修改;
- 下游策略引擎看到的是「最终一致」还是「中间态」。
我目前的分层
- 入队按 exchange_time 排序缓冲(短窗口,比如 50–200ms),超时仍刷出;
- 已闭合 bar 只读;迟到数据进
revision通道,UI 用标记显示「修正」而不是默默改历史; - 图表层与策略层不要共享可变 bar 对象,避免一边在画、一边在改。
想确认的问题
- 在 vn.py 生态里,大家更常用「排序缓冲」还是「直接覆盖 + 全量重算」?
- 对高频品种,revision 通道有没有实践中的性能坑?
代码和密钥都不会贴;如果有人愿意,我可以补一个纯内存的 pytest 用例结构(假 gateway)。
谢谢。