为回测补齐长历史:足迹抽取还是服务器 K 线

自动回测面板会读取所选合约、颗粒度和周期的缓存覆盖情况,然后针对缺失的时段提供两种下载:足迹抽取(每一笔成交及其主动方,重建为 bid × ask)或不含价位明细但更快的服务器 K 线。覆盖情况按每 7 天 5 个交易时段折算。

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


位置

位置
回放 → 自动回测 → 周期与颗粒度下方的覆盖卡片
周期
1 周、1 个月(默认)、3 个月、6 个月、1 年、2 年、5 年;颗粒度为 1 分钟、5 分钟、15 分钟(默认)、1 小时
两个按钮
“下载足迹历史({dur})”(主按钮)与“下载缺失的历史({dur})”(次按钮,服务器 K 线)
覆盖文案
“请求的 {n} 个时段中已缓存 {n} 个 —— 缺少 {n} 个。回测可以立刻在已有数据上运行,但结果只覆盖那个窗口。”

它做什么

更改合约、颗粒度或周期都会重新读取缓存(cache_coverage),不发起任何经纪商调用。请求的天数按 5/7 折算为时段数,已覆盖的纳秒换算为已覆盖时段,二者之差就是缺失数量。当完全没有缓存时,卡片会显示“{symbol} 在 {tf} 上没有任何缓存。请在图表中以该颗粒度打开此合约:历史会自行填充,此后一直可用。”

足迹抽取以 28 天为一个窗口调用 rithmic_history_ensure,最旧的窗口放在最后,并带上合约的 tick size。它的估算是每个缺失时段 107 秒,显示在按钮上。每个窗口会报告取得的 K 线数、被拒而跳过的区间数和失败的区间数;后端繁忙时会跳过该窗口而不计为失败。这条路径带有每个价位的 bid × ask,是读取逐档失衡的策略所必需的。

服务器 K 线路径调用 rithmic_fetch_history_batch,按每块 9,000 根 K 线规划(每时段 23 小时,每天 5/7 个时段),每批发送 8 个窗口,同时在途 2 批。它更快,但这些 K 线只带有 OHLC、成交量和 delta:“服务器 K 线包含 OHLC、成交量和 delta,但不含足迹价位明细。”

设置与估算

决定覆盖卡片与两种下载方式的各项参数
设置默认值它改变什么
周期1 个月(30 天)请求的天数:7、30、90、180、365、730 或 1,825
颗粒度15 分钟为回测读取的缓存 K 线周期:1m、5m、15m、1h
足迹抽取窗口28 天每次 rithmic_history_ensure 请求的大小
足迹估算每个缺失时段 107 秒主按钮上显示的时长
服务器 K 线分块9,000 根 K 线每个历史窗口的大小;估算为每块 150 秒
截断标记< 请求天数的 90 %当 K 线跨度不足周期的 90 % 时,coveredSpan 会把结果标记为已截断

如何使用

  • 先选定合约、颗粒度和周期,启动前先读覆盖那一行:回测可以在已有数据上运行,但其结果只覆盖那个窗口。
  • 当策略读取失衡或逐档成交量时,优先选择足迹抽取;接受它所公布的耗时。
  • 用“取消”可以中止任一种下载;已经到达的数据会保留,再跑一次会补齐其余部分。
  • 留意状态行:“正在逐笔抽取 —— 第 {done}/{total} 个窗口,已获得 {bars} 根 K 线”或“正在下载 —— 第 {done}/{total} 块,已获得 {bars} 根 K 线”。

结论与陷阱

  • denied:经纪商返回 rp_code 13(“permission denied”)。历史 K 线是经纪商的权限,而不是应用设置;历史逐笔数据可能仍然可用,手动回放正是使用它。
  • silent:登录被接受,但每个窗口都没有发送任何内容。要么档案没有回溯到那么早,要么历史服务节点故障;请在开市时重试。
  • empty:经纪商有应答但没有为此窗口提供 K 线;它的档案对这个合约可能没有回溯到那么早。
  • 带代码的逐笔抽取:“经纪商未返回任何成交,并回复:{codes}。此账户可能未开通历史逐笔回放。”
  • 历史数据由你的经纪商或数据提供商按你的账户提供并计费;应用无法扩展任何权限。

其他语言版本

常见问题

为什么提供两种下载,我该选哪一种?
它们携带的数据并不相同。足迹抽取从每一笔成交重建每个价位的 bid × ask,逐档策略必须用它;服务器 K 线更快,但没有价位明细。正因如此,足迹抽取才是主按钮。
为什么估算时间是以小时计的?
每个缺失时段 107 秒是有意为之:把时间说得太短,用户会中断本来就快完成的下载。
下载完成了,覆盖情况却没变?
每次运行后都会重新读取覆盖情况。如果它没有变化,请读按钮下方的消息:分块不完整、一个拒绝代码或一份空档案,都能解释这一点。