☰
跨越午休缺口:free-stockdb分钟K线如何对齐A股交易时段
2026/10/4 20:09:30 网站建设 项目流程

跨越午休缺口:free-stockdb分钟K线如何对齐A股交易时段

【免费下载链接】free-stockdb面向 A 股日K、分钟K与ETF分钟数据的本地量化引擎,集成增量同步、本地缓存、复权、批量查询、回测与指标计算。项目地址: https://gitcode.com/GitHub_Trending/fr/free-stockdb

A股量化研究有个绕不开的细节:交易时段并非连续的 9:30–15:00,中间隔着 11:30–13:00 的午休。把分钟K线按自然时间直接聚合,会在每天 11:30 出现一个"凭空出现"的空档,导致均线、MACD 等指标计算错位。free-stockdb 是面向 A 股日K、分钟K与ETF分钟数据的本地量化引擎,用YYYYMMDDHHMM紧凑时间戳组织行情,配合前缀扫描与批量查询接口,让分钟K线聚合自动贴合真实交易时段。本文用零基础视角拆解这套对齐思路。

为什么分钟K线对齐是量化新手的第一道坎

想象你按"自然分钟"给K线分桶:11:28、11:29、11:30 各一根,然后 13:00 又来一根。表面上只差一根K线的空位,实际危害是:

  • 滚动窗口错位:5 分钟均线的"第 5 根"在午休前后含义不同,指标值与真实行情脱节;
  • 时间轴断点:回测撮合按时间戳推进时,引擎会"干等"90 分钟,批量回测 7000+ 股票时误差被放大;
  • 聚合口径混乱:1 分钟合成 5 分钟时,跨午休的窗口会凑不满 5 根,要么丢弃要么错并。

对齐的本质其实很简单:K线按"交易日序号"对齐,而不是按墙钟时间对齐。只要每根K线自带交易时刻标记,聚合时按数据本身分组即可,午休缺口自然消失。

时间戳设计:一根K线只占32字节

free-stockdb 的单棒K线记录定义在 client.hpp:

// K线单棒记录 (32字节紧凑对齐,内存映射零拷贝优化) struct alignas(8) KRecord { uint32_t datetime; // YYYYMMDD 或 YYYYMMDDHHMM 格式时间戳 float open, high, low, close; double volume, amount; };

两个设计点值得新手注意:

  1. datetime是 32 位整数,分钟K线用YYYYMMDDHHMM编码(如202609010931),不是毫秒时间戳。整数比较天然有序,字典序即时间序,午休时段在序列里"不存在",缺口问题从源头规避。
  2. 32 字节紧凑对齐 + 内存映射零拷贝,意味着批量读取分钟线时不产生额外拷贝开销,这也是它能支撑 7000+ 股票全市场分钟回测的底层原因之一。

前缀扫描:按代码取数,按时间切片

数据侧的服务端实现位于 server.cpp。行情按股票代码前缀组织(如600519:*),时间切片走两个原语:

  • scan_prefix:取出某只股票的全部K线;
  • scan_range:按[start_key, end_key)半开区间精确截取时间范围。

因为时间戳是定长整数编码,"从某日 09:31 到某日 15:00"这类条件可以直接翻译成两个键的字典序比较,无需在查询层再过滤一次。对研究代码来说,"取一只股票某年全部 5 分钟K线"就是一句话的事。

批量查询与指标计算:对齐之后的下游收益

数据对齐后,聚合和指标计算的入口是 Python SDK 的三个接口(完整说明见 README.md):

接口用途关键参数
rd.get_data()批量取K线任意股票列表 × 任意频率 × 任意复权
zb.get()39 种指标 + 5 种指数计算每指标独立参数 n,支持金叉信号
bk.get()股票与申万/概念板块双向映射概念/行业三级分类

以 5 分钟 MACD 为例:

result = zb.get( name="macd", codes=code_list, start="2026-01-01", end="2026-06-30", frequency="5min", fq="forward", n=["12,26,9"], )

因为输入序列本身已按交易时段排好序,MA/MACD/KDJ 的滚动窗口不会跨午休"吃空档",指标值与真实盘面一致。计算核心用 Rust 实现,比 pandas 全市场遍历快约 3 倍,单次数秒完成(见 README.md 的耗时对比表)。

数据从哪来:增量同步与本地落盘

分钟K数据不需要自己爬。工作流只有两步(详见 先看!这个!!使用说明.txt):

  1. 运行数据更新工具,从 sync_url.txt 配置的镜像源增量同步,传输层 Zstd 压缩,校验层用 SHA-256 逐文件核对(协议见 docs/DATA_SOURCE.md);
  2. 启动 stockdb 服务,本地监听127.0.0.1:7899,五种方式任选调用:Python、HTTP API、Excel/WPS 宏、HTML 网页、AI MCP。

首次同步约 20GB 磁盘(全量分钟线),日常更新只拉变化文件,离线时已同步的数据可继续查询回测。

新手上手清单

  • 确认磁盘 ≥ 20GB、内存 ≥ 8GB(README.md 硬件要求)
  • 双击数据更新工具完成同步,再启动 stockdb 服务
  • 用浏览器打开 数据网页版.html 直接浏览行情
  • Python 用户先跑一次 安装.py,再看 sdk_test.py
  • 指标需求直接查 zhibiao.py 内置的 39 指标清单

小结

分钟K线对齐A股交易时段,核心不是复杂的算法,而是三件事:交易时刻用整数编码、存储按字典序即时间序、查询按前缀和区间精确切片。free-stockdb 把这三件事固化进 C++ 时序引擎,配合增量同步和批量指标计算,让"午休缺口"从需要手工处理的数据坑,变成框架天然规避的结构特性。对量化新手而言,这套本地数据底座意味着你写下的第一行策略代码,面对的就是干净的、对齐好的行情序列。

【免费下载链接】free-stockdb面向 A 股日K、分钟K与ETF分钟数据的本地量化引擎,集成增量同步、本地缓存、复权、批量查询、回测与指标计算。项目地址: https://gitcode.com/GitHub_Trending/fr/free-stockdb

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询