free-stockdb周K月K线内存合成算法揭秘:日K如何精准聚合成周线月线

发布时间:2026/8/31 10:16:43
free-stockdb周K月K线内存合成算法揭秘:日K如何精准聚合成周线月线 free-stockdb周K月K线内存合成算法揭秘日K如何精准聚合成周线月线【免费下载链接】free-stockdb面向 A 股日K、分钟K与ETF分钟数据的本地量化引擎集成增量同步、本地缓存、复权、批量查询、回测与指标计算。项目地址: https://gitcode.com/GitHub_Trending/fr/free-stockdb在free-stockdb本地量化数据引擎中当你请求周K1w或月K1M数据时数据库里其实并没有存这两类K线——它们是由日K在内存中实时合成出来的。本文揭秘 free-stockdb 的周K月K内存合成算法日K如何精准聚合成周线月线分组键怎么选、每个字段怎么算、缺失值如何兜底帮助新手快速理解这套量化数据底座的设计思路。为什么周K月K不直接存进数据库很多量化数据库会把周线、月线作为独立表持久化存储free-stockdb 反其道而行只存日K这一份最小数据集周K月K按需现算。这样设计的好处很直接对比项预存周K/月K内存合成free-stockdb 方案磁盘占用多存 2 份周期数据只存日K增量更新每个周期都要回刷只更新日K周期数据永远最新复权切换每种复权都要另存一份查询时动态折算零额外存储合成的底层依托是 LevelDB 的天然升序存储按时间范围查出的日K本身就是按日期排好序的聚合算法因此完全不需要排序一次遍历即可完成分组。合成核心代码见 _merge_to_period。合成算法四步走查询 → 复权 → 分组 → 聚合整个内存合成流程在 get_data 接口内完成拆开看就是四步第 1 步查日K不查周K。请求frequency1w时底层依然走日k表单只股票用rd.vals()点查批量多股则合并成一条 pipeline 走rd.pipe()批量查询一次网络往返取回全部数据。第 2 步先在内存做复权再聚合。这是精准性的关键——_apply_fq_in_memory会先用预加载的复权因子对日K做前复权/后复权折算然后才进入周K月K聚合。顺序不能反先聚合成周K再复权因子作用点会错位价格就不对了。第 3 步分组归类。按日期把日K装进篮子周一个篮子或一个月一个篮子规则见下文。第 4 步逐篮聚合。对每个篮子计算开高低收、量额加和、衍生指标输出最终K线。周K分组键一个容易被忽略的 ISO 周细节月K的分组键直观(年, 月)比如 2025 年 3 月的所有日K归为一组。周K则用ISO 8601 纪年 ISO 周数作为分组键iso dt.isocalendar() key (iso[0], iso[1]) # (ISO年, ISO周数)为什么不用简单的年第几周因为跨年周是个大坑2024 年 12 月 30 日按 ISO 标准属于 2025 年的第 1 周。如果用自然年做键这一周会被拆到2024 年末和2025 年初两个篮子里周K的收盘和最高价就全错了。free-stockdb 采用 ISO 周保证全球通用的周K口径跨年那一周也能完整聚合。字段聚合规则一览表开高低收怎么算聚合规则严格遵循K线定义stock_sdk.py 聚合段 中每个字段的算法如下字段聚合规则说明open周期首个交易日开盘价篮子第一根日K的 openhigh周期内最高价取最大max(high_values)low周期内最低价取最小min(low_values)close周期末个交易日收盘价篮子最后一根日K的 closedate周期内最后一个交易日日期周K日期落在周五附近而非周一volume/amount有效值求和成交量、成交额累加pre_close上一周期的收盘价首个周期取首日 pre_close 或 openpct_chg/amplitude用新 pre_close重算涨跌幅与振幅按周期口径重新计算turnover换手率求和周期内换手累加vol_ratio量比求均值量比不可加和取平均更合理pe_ttm/pb/市值/is_st取周期末端快照截面属性随时间变化取期末值精准性的第二个关键None 不当 0停牌日不产生K线记录偶发不完整日K也可能出现字段缺失。合成算法中所有求和/最值都先经过一道valid_values过滤None一律跳过绝不当作 0 参与加和——否则停牌日会把周期成交量拉平量价形态失真若某个周期连一根有效 OHLC 都没有整周停牌该周期K线直接丢弃不输出空壳数据。这两条规则保证了合成出的周K月K与日K在量价关系上严格自洽周期成交量 各交易日成交量之和一根不少、一分不多。3 行代码查询周K月K理解完算法用起来却极其简单。运行一次安装脚本 后即可全局导入 SDK批量查询周K月Kdata client.get_data( code600533, # 支持传入 7000 代码列表批量合成 start20250101, end20251231, frequency1w, # 1w周K1M月K as_dfTrue # 直接返回 DataFrame )更完整的批量与指标计算示例可参考 sdk_test.py 与 zb_test.py。性能亮点为什么合成几乎免费内存合成常被担心现算会很慢但 free-stockdb 的算法几乎不增加额外成本零排序依赖 LevelDB 升序省掉 O(n log n) 排序开销单趟分组一次遍历完成分篮聚合总复杂度 O(n)批量同管道多股票查询走单路 pipeline一次往返、并发聚合不落盘合成结果仅存于内存不产生写放大重复查询依然只读同一份日K。这也是本地量化引擎的核心思想——把复杂的数据工程压缩进一次内存聚合让策略代码只面对干净、口径统一的周线与月线。相关文件索引合成核心算法pybao/stock_sdk.py查询入口与流程编排pybao/stock_sdk.py内存复权实现pybao/stock_sdk.pyC 高性能计算示例cpp/examples/main.cpp项目总览与能力清单README.md如果需要在其他环境复现克隆仓库源码git clone https://gitcode.com/GitHub_Trending/fr/free-stockdb一句话总结free-stockdb 用只存日K ISO 周分组 复权先行 None 过滤四个设计让日K在内存中精准长出周线与月线——省磁盘、零延迟、口径严谨。【免费下载链接】free-stockdb面向 A 股日K、分钟K与ETF分钟数据的本地量化引擎集成增量同步、本地缓存、复权、批量查询、回测与指标计算。项目地址: https://gitcode.com/GitHub_Trending/fr/free-stockdb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考