历史加载界面与启动恢复

打开 Senzoukria 图表时,会有一层加载遮罩把历史下载显示成不断生长的蜡烛剪影,并附带百分比、K线数量和预计剩余时间;当某路行情声称订阅成功却什么都不发时,启动恢复模块会自动重新订阅。

Senzoukria · 文档 · 更新于 2026 年 9 月


位置

位置
历史加载期间覆盖在图表上的遮罩;⚙ → 交易设置 中的「重新加载历史」
阶段
idle → cache → ensure → live
历史窗口预设
默认 24 小时(今日),另有 3 天、7 天
启动恢复
静默 8 秒后重新订阅,最多 3 次;订阅重试间隔为 1.5 秒、4 秒、9 秒

它做什么

遮罩就落在图表本身上,也就是注意力所在的地方,而不是工具栏里闪烁的一个小点。它的蜡烛条是一段确定性的剪影,不是价格:没有坐标轴、没有数字,尚未加载的部分也不绘制。随着数据到达,一条前沿线向右推进。头部写着「正在加载 1m 历史」,右侧是数据源,例如 Rithmic tick 重放。底部显示百分比、预计剩余时间、已加载K线数量(或正在等待第一根K线),以及一句说明为什么需要时间。

预计时间由观测到的速度算出:在完成至少 2% 且已过 1.5 秒后出现,每秒刷新一次,并封顶在六小时。在加密货币和 Databento 界面上,计数以「共 3 步」的方式显示,还有一个「显示可用数据(历史数据可能不完整)」按钮,让你在下载完成前就能打开图表。

流程

从打开图表到进入实时阶段之间发生了什么
阶段运行的内容你看到什么
cache逐页读取本地 SQLite 缓存(每页 1,000 行,最多 64 页)。1 分钟粒度是枢轴;其他周期由它聚合而来,日K来自单独的 TimeBar 分支。如果该合约此前加载过,K线会立刻出现。
ensure历史窗口内覆盖缺口会以 tick 重放的方式向券商请求。同一次运行内进度绝不会倒退。百分比、已加载K线数和 ETA 向前推进;图表可作为预览使用。
live进度条到 100%;实时行情让最后一根K线继续跳动。遮罩消失;工具栏中可能仍留有一条提示。

设置与常量

从代码中读到的取值
项目取值作用
历史窗口默认 24 小时(今日);另有 3 天和 7 天预设窗口起点是图表时区下第一天的午夜。日K始终至少请求 360 小时。
繁忙重试3 秒后重试一次当另一次加载已占用该合约时触发。提示会立刻出现,如果重试时依然繁忙,措辞会改变。
停滞监视120 秒ensure 期间两分钟没有任何进度事件,进度条会以缓存和实时数据已有的内容收尾,并发布一条提示。
重新加载历史⚙ → 交易设置 → 重新加载历史重新打开那些被券商抽干到零个 tick 的窗口。不清除任何东西;缓存和实时行情继续。
缓存探测回溯400 天向磁盘回溯多久来寻找最新的已缓存K线,并列出本地有数据的合约。

启动恢复

一次订阅可能被告知成功,却什么都不发,例如自动登录时网关尚未就绪。恢复模块会以 1.5 秒、4 秒和 9 秒的有界延迟重试订阅;一旦订阅被接受,它会等待 8 秒等第一条 tick、K线或深度消息。如果什么都没到,它就重新订阅,最多三次。只要打印过哪怕一条消息的清淡市场就绝不会被打扰:恢复只处理「生而不动」这种情况。重新订阅是安全的,因为 Rust 侧会跳过已覆盖的订阅位,不会产生重复注册错误。

限制与陷阱

加载器不做的事:

  • 它绝不清空缓存,也绝不使用浏览器存储;请求什么由 SQLite 的覆盖情况决定。
  • 返回为空的窗口不会自动再请求一次。在周末这是对的,在券商只是繁忙时这是错的;「重新加载历史」是唯一的手动补救。
  • 每次运行内进度是单调的:执行一次「重新加载历史」之后,进度条会从头开始。
  • 剪影蜡烛不是数据。不要从加载界面上读取价位。

其他语言版本

常见问题

百分比有一阵子没动了,是卡住了吗?
大段空窗口是跳跃式推进的,而 ETA 每秒都会按观测到的速度刷新。120 秒内没有任何进度事件之后,监视器会收掉进度条并发布一条提示;图表仍可用缓存和实时数据继续使用。
为什么下载还没完成,图表上就已经有K线了?
cache 阶段会先发布磁盘上已有的内容,而在 ensure 阶段,推导出来的视图是一个随数据块到达而更新的预览。遮罩会告诉你历史仍在补全中。
图表启动不了时还需要按 F5 吗?
当一次订阅 8 秒内什么都不发时,启动恢复模块会自行重新订阅,最多三次。如果它放弃了,错误横幅会留在那里,主动权交回给你。