K线缓存与历史管线:缓存、覆盖、经纪商、实时

每张足迹图都通过同一个控制器加载 K 线:读取本地 SQLite 缓存,向缓存询问缺失的时间窗,只向经纪商取回这些窗口,然后合并实时批次。缓存以规范化合约键为索引,存储 1 分钟颗粒度,日内周期由它派生。

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


位置

阶段
idle → cache → ensure → live,并附带一个在同一次运行中绝不回退的进度百分比
基准颗粒度
1 分钟。所有能整除的日内周期都在本地由缓存的 1 分钟 K 线汇总;1 日和计数型 K 线(100t,tick / 成交量 / 区间 / delta)按自身颗粒度缓存
历史范围
图表设置 → “历史范围”:24 小时(当日)、3 天、7 天。默认 24 小时(当日)。向经纪商请求的窗口为从当前时刻往回 范围 × 24 小时,与显示时区无关;日线周期保留 360 小时的下限
缓存在哪里管理
设置 → “缓存与经纪商”指向账户页面:“数据源、经纪商和本地缓存都在账户页面上。”图表中没有任何控件会删除缓存的 K 线

它做什么

历史控制器对所有数据源执行同一套流程。首先对请求的窗口分页读取缓存(cache_query_page,每页 1,000 行,最多 64 页)。然后向 cache_coverage 询问该窗口内部的缺口,只把这些缺口交给经纪商(rithmic_history_ensure,并带上合约的 tick size)。最后订阅实时批次,并把它们合并进同一个 store。

K 线按分桶时间戳存储,并带有来源标记:synthetic、ohlcv、cache、hist 或 live。合并规则决定哪份副本胜出:真实 K 线永远替换合成 K 线,实时 K 线替换正在形成的那个桶,OHLCV 绝不覆盖已有 K 线,其余情况保留成交量更大(其次是成交笔数更多)的那份。正是这一点让缓存 K 线、重新取回的 K 线和实时 K 线可以共存而不会让成交量翻倍。

非 Rithmic 代码会被规范化为诸如 ESZ6.CME 这样的键(根代码、月份代码、年份末位、交易所),这样来自桥接的“ES 12-26”和来自 Rithmic 的“ESZ6”就共用同一批缓存行。Rithmic 代码按发送时的原样存储,已知交易所时在后面追加交易所。

设置与上限

限定管线加载与保留内容的各项数值
设置默认值它改变什么
历史范围(图表设置)24 小时(当日)向缓存和经纪商请求的窗口:从当前时刻往回 1、3 或 7 天 × 24 小时。显示时区决定坐标轴,而不决定数据量。离线时,缓存窗口以最新的缓存 K 线为锚点,而不是以时钟为准
各周期 K 线上限15s/30s 200 · 1m 1,500 · 3m 1,200 · 5m 2,100 · 15m 3,000 · 1h 4,500 · 1d 400 · 100t 1,500内存中保留的最大 K 线数;分钟级周期(1d 除外)的上限会乘以以天计的范围
自定义周期120 至 1,500 根 K 线(25 小时),2h 及以上最多 4,500 根(190 天)当周期不在表中时,上限由周期长度计算得出
Tick size来自合约目录传给 ensure 步骤;缺少它时后端会按默认网格分桶,窗口将永远不会被标记为已覆盖
重新加载历史按钮⚙ → 交易设置 → 重新加载历史,会重新打开被经纪商返回零 tick 的窗口;它不清除任何内容

如何使用

  • 在你需要的周期上打开图表;历史会自行填充并留在磁盘上,因此下次打开会先读缓存再问经纪商。
  • 在 1m、5m、15m 和其他可派生周期之间随意切换:它们都由 1 分钟颗粒度在本地汇总,没有网络往返。
  • 只在需要时才扩大历史范围:一周的 1 分钟足迹图是海量 tick,首次加载需要一些时间。
  • 当提示说另一次历史加载正在运行或加载停滞时,请在图表设置中按“重新加载历史” —— 应用中没有别的功能会重新打开一个返回为空的窗口。

提示与陷阱

  • “CME Globex 已休市”表示没有新数据可下载;缓存的 K 线仍留在图表上,已抽取完的时段照样可以回放。
  • rp_code 13 的拒绝通常是间歇性的;图表会继续使用缓存和实时数据运行,并自行重试。
  • “该合约的价格网格未知”表示 tick size 不在目录中,因此在补上之前每次加载都会重新下载历史。
  • 返回为空的窗口绝不会被自动再次请求;只有“重新加载历史”能解除这一点。
  • ensure 阶段有 120 秒的停滞看门狗,并在后端繁忙时 3 秒后重试;控制器绝不调用 cache_clear,也不触碰 localStorage。
  • 设置中的历史范围提示说窗口从所选时区的午夜开始计算;而历史控制器实际请求的是从当前时刻往回 范围 × 24 小时,因此在一天较晚时打开的图表可能比一个自然日稍多一点。

其他语言版本

常见问题

为什么进度条还在走,图表上就已经有 K 线了?
缓存阶段一读到页就发布 K 线(最多占进度的 25 %),随后 ensure 阶段再填上经纪商还需发送的缺口。
我能清空缓存来解决一次糟糕的加载吗?
历史控制器从不调用 cache_clear,图表也不提供清空功能。真正的开关是图表设置中的“重新加载历史”,它只重新打开返回零 tick 的窗口,不触碰缓存的 K 线和实时数据流。
桥接和 Rithmic 共用缓存吗?
数据行以规范化合约键为索引,因此只要代码能被解析,从桥接看到的 ES 12 月合约和从 Rithmic 看到的会映射到同一个键。