ZVT 项目研究站 · K 线与复权口径

ZVT K 线表名怎么拼:周期与复权写在表名里,选错口径比选错源更隐蔽

ZVT 把所有行情表按同一个公式命名:{entity_schema}{level}{adjust_type}Kdata。理解这条公式,才知道为什么「前复权」的表名里反而什么都没有——README 有一句常被忽略的说明:为了兼容历史数据,前复权是例外,{adjust_type} 留空。本页把公式、实际存在的表与覆盖差异一次列清。

表名公式:{entity}{level}{adjust}Kdata股票周期:9 种 + 后复权变体依据 src/zvt/domain 文件清单(2026-09-18)

ZVT 表名公式与两个取数例子

entity_schemaStock / Etf / Index…
level1m / 1d / 1wk…
adjust_typeqfq 留空 / hfq
Kdata固定后缀
据 README 的表名规则与 src/zvt/domain/ 的实际文件名自绘(非官方架构图);示例 Stock1dKdata(默认口径)与 Stock1dHfqKdata(后复权)。
Naming rule

表名三段式:每一段决定什么

官方给了一行规则和一句例外说明,本页把它拆成可以照着拼的四段。

含义取值来源选错会怎样注意点
第一段 entity_schema标的类型:Stock、Stockus、Stockhk、Index、Etf、Block 等tradable_schema_map 的七类标的对应用错类型查不到表,或查到另一个市场的同名代码A 股是 Stock,港股是 Stockhk,美股是 Stockus,不是同一个类
第二段 level周期:1m、5m、15m、30m、1h、4h、1d、1wk、1mon框架的 IntervalLevel 枚举周期写错得到空结果或另一张表并非所有标的都有全部周期,见下方覆盖表
第三段 adjust_type复权方式:默认(前复权)留空,后复权写 hfq框架的 AdjustType 枚举最危险的一段:拿默认表当后复权用,长期序列会整体偏移README 原文:为兼容历史数据,前置复权是例外,{adjust_type} 留空
第四段 Kdata固定后缀,表示行情表框架约定——不用自己拼字符串,直接在 zvt.domain 里 import 对应类
from zvt.domain import Stock1dKdata # 默认口径(前复权,按官方说明 adjust_type 留空) from zvt.domain import Stock1dHfqKdata # 后复权(hfq) Stock1dKdata.record_data(code='000338', provider='em') df = Stock1dKdata.query_data(code='000338', provider='em')
口径提示:ZVT 的 README 示例输出里,同一只标的同一日期的「默认表」收盘价与「后复权表」收盘价差了一个数量级(例如 20.30 与 345.95)。这不是数据错误,而是复权基准不同。做回测用哪个口径必须全流程统一,混用会在长期序列上产生系统性偏差。
Coverage

各类标的实际有哪些 K 线表(据 domain 文件清单)

官方 README 只说「支持任意标的、任意周期」,但仓库里的文件说明覆盖差异很大。下表按目录实际存在的文件整理。

标的类型实际存在的周期后复权变体适用场景注意点
stock(A 股)1m、5m、15m、30m、1h、4h、1d、1wk、1mon5m、15m、30m、1h、4h、1d、1wk、1mon(共 8 个)日内与日线研究都行;多周期策略1m 没有后复权版本
stockhk(港股)1d有(1d_hfq)港股日线研究没有分钟级
stockus(美股)1d有(1d_hfq)美股日线研究、跨市场对照没有分钟级;历史早期数据可能有异常值
index1d、1wk、1m基准对照、指数增强指数一般不需要复权,但仍要注意基期口径
etf1d场内基金日线研究既没有分钟级也没有后复权表
block(板块)1d、1wk、1mon板块轮动、题材跟踪板块指数口径由数据源决定
其它(future / currency 等)1d非主路径,需自行验证这些类型不在 tradable_schema_map 的一等标的里
怎么核实:最可靠的方式是直接列出 ZVT 的 src/zvt/domain/ 下的文件名——表存在才有类可 import。不要凭「框架应该支持」来假设某个周期可用。
Decision

按研究任务选周期与复权口径

口径选错往往要重跑整条链路,先确定再动手。

研究任务建议表理由注意点
长期趋势与因子回测(跨年)Stock1dHfqKdata(后复权)跨除权除息时后复权序列连续,累计收益可比价格绝对值不反映真实成交价,展示时要注意
看真实成交价、做价格区间判断Stock1dKdata(默认口径)接近真实价格,便于与行情软件对照长序列里除权处会出现跳空
日内或分钟级形态Stock30mKdata / Stock1hKdata股票支持多种分钟级周期历史分钟数据量级大,写库与查询都更重
周线/月线级别择时Stock1wkKdata / Stock1monKdata框架直接提供聚合好的周期表,不必自己重采样周期表由数据源生成,边界规则与自行 resample 可能不同
ETF/板块研究对应类型的 1d 表这些类型只有日线可用没有后复权表,长期口径需自行处理
Matching

时间对齐:不同标的与不同周期的三段坑

把多个标的的数据放进同一张二维表之前,这三件事必须处理,官方文档没有专门讲。

交易日历不同

A 股、港股、美股的休市日不同,跨市场对照时直接按日期对齐会出现大量空缺。ZVT 里有交易日历相关的表(聚宽一侧提供),但没有自动对齐机制,需要自己按交易日历做重采样或取交集。

停牌与零成交

停牌期间某些标的没有记录,行数会少于日历交易日数。用「行数是否等于交易日数」来判断 ZVT 数据完整性时,必须先把停牌情形排除,否则会误判为写库失败。

财务数据的时间轴不是行情时间轴

财报记录的时间字段通常是公告或记录时间,而行情是交易日。把两者放进 ZVT 的同一张二维表时必须决定「用公告日还是报告期」,这个选择会明显改变因子有效性,且官方示例没有给出统一做法。

字段速查:ZVT 的 K 线表字段包含 id、entity_id、timestamp、provider、code、name、level、open、close、high、low、volume、turnover、change_pct、turnover_rate。其中 provider 列会在同一张表混入多源数据时暴露来源,level 列记录周期——做入库检查时这两个列比价格更值得先看。
证据边界:本页所有表名、字段名与周期覆盖来自 src/zvt/domain/ 的文件清单与 README 输出;本站未实际写库验证,实际可用的周期与字段以你的环境与数据源返回为准。
What is missing

期待落空清单:五种「以为有、其实没有」的 K 线

下面这些差距都来自 domain 目录的文件清单,而不是配置问题。提前知道能省下一整轮试错。

你可能期待ZVT 的实际情况依据替代做法注意点
ETF 的分钟级 K 线只有 1d 表,没有分钟级domain/etf_1d_kdata.py,无其他周期文件用日线做轮动类研究;日内需求另找数据源这是记录表层面的覆盖,不是参数开关
港股与美股的分钟级 K 线各只有 1d(含后复权)stockhk_1d_kdata / stockus_1d_kdata跨市场研究降到日频不要拿 A 股的周期覆盖去推断境外标的
1 分钟的后复权价格其它分钟周期都有 hfq,唯独 1m 没有stock_1m_kdata 存在,stock_1m_hfq_kdata 不存在需要可比价格时自己在 1m 上做复权处理超短周期回测容易在这里出错
指数的后复权表无;指数只有默认口径index_1d/1wk/1m_kdata,无 hfq 变体指数一般不需复权,但基期口径仍要确认指数与个股的复权逻辑不同,不要混用处理方式
「官方支持任意周期任意标的」README 的表述是能力目标,实际以文件清单为准domain/ 目录逐个文件核对动手前先列目录确认表存在表存在才有类可 import,这是最直接的验证方式
FAQ

K 线与复权常见问题

口径类问题最容易被二手教程简化,这里只给仓库与 README 能支撑的说法。

为什么前复权的表名里没有 qfq?

README 明确写着「为兼容历史数据,前置复权是例外,{adjust_type} 留空」。也就是说 Stock1dKdata 就是默认(前复权)口径,而 Stock1dHfqKdata 才是后复权。这是这个框架里最容易看错的一处命名约定。

后复权和前复权该用哪个?

看任务:跨除权的长期序列与回测用后复权(价格连续、收益可比),需要与行情软件对照的真实价格用默认口径。关键是全流程统一——数据、因子、回测、基准必须落在同一口径上。

ETF 有分钟数据吗?

按 domain 目录清单,ETF 只有 1d;港股、美股也只有 1d 与 1d 后复权。分钟级只有 A 股个股覆盖最全(1m 到 4h)。这是记录表层面的覆盖差异,不是参数配置问题。

1 分钟数据为什么没有后复权?

从文件清单看,stock_1m_kdata 存在但 stock_1m_hfq_kdata 不存在,其余五个分钟级周期都有 hfq 版本。做超短周期研究时要注意这一点,需要连续可比价格时可能要自己在 1m 上做复权处理。

自己 resample 成周线,还是用框架的周线表?

两者结果可能不同:框架的周线表由数据源生成,周界定义(自然周还是交易周)与复权处理顺序可能和自行 resample 不一致。研究里要么统一用框架的周期表,要么统一自己聚合,不要混用。

这些表和 EasyClaw 里的 K 线技能冲突吗?

不冲突,是两套独立实现。本机技能 stock-technical-mastery 用新浪财经与 Baostock 取 K 线并算指标,tongdaxin 走通达信官方接口;它们即取即用、不落本地库,与 ZVT 的表名体系无关。两者无已证实集成。

口径定好之后,可以开始算因子了

ZVT 的因子层是它最有辨识度的设计:以 (entity_id, timestamp) 为二维索引的三层 DataFrame,让「一次算全市场」和「一次算一只」用同一套写法。