数据字典
data/finance_data.db 单库内所有表与关键字段的速查,按数仓分层(ODS / DWD / DWS / ADS)组织。
全系统数据落在单库 data/finance_data.db,按数仓分层组织。这一页是各表的速查;字段以代码中的实际定义为准。
ODS · 原始层
kline_data
原始 OHLCV,由 ingestion/data_loader.py 写入。
| 字段 | 含义 |
|---|---|
symbol | 标的代码 |
timestamp | 交易日(必须有序,否则时序因子结果无效) |
open / high / low / close | 价格 |
volume | 成交量(股数) |
source / interval / market | 数据源 / 周期 / 市场,用于多源隔离 |
feed 不是当前表字段
source='Alpaca' 只表示来自 Alpaca,不区分 IEX / SIP。当前每日接入口径按 IEX 免费源管理,参数使用 adjustment='all';SIP 需要付费权限,若未来启用,应补充 feed、adjustment、asof、拉取批次等元数据,否则历史行无法反查当时的数据权限与复权口径。
sync_status
拉取水位线表,防止无限拉取死循环。
| 字段 | 含义 |
|---|---|
symbol / source / interval / market | 联合主键 |
last_checked_date | 上次检查到的日期 |
consecutive_empty_days | 连续无数据天数 |
status | active / 停用 |
sync_status 解决的是无覆盖标的反复拉空数据的问题。少量 IEX 覆盖缺失本身是常态,是否影响组合结果,需要结合 Top N 命中率和排除缺失标的后的回测差异判断。
当前库快照(截至 2026-06-30):sync_status 共 516 行,其中 516 行 active,最大 consecutive_empty_days 为 6 天。
也就是说,这张表当前主要承担「避免空数据死循环」和「暴露覆盖异常」的监控职责,而不是大规模停用股票池。
DWD · 明细层
processed_kline_data
预处理产出的干净面板。
| 字段 | 含义 |
|---|---|
returns | 日收盘到收盘收益 |
vwap | 成交量加权均价 |
cap | 市值 |
| (含 OHLCV 经去极值 / 缺失值处理后的列) |
DWS · 汇总层
alpha_results
因子计算产出的 Alpha101 因子值。
| 字段 | 含义 |
|---|---|
symbol / timestamp | 标的 / 日期 |
alpha_id | 因子编号 |
factor_value | 因子值(经 NaN / Inf 校验后入库) |
alpha_results 是长表而不是 101 列宽表,主键包含 alpha_id。这让新增因子时不需要改表结构,但因子数扩到 1000+ 后,查询和 pivot 成本会线性上升,需要再评估 DuckDB / Parquet / Postgres 等存储方案。
当前库快照(截至 2026-06-30):kline_data 139,137 行、516 个 symbol(2025-05-30 ~ 2026-06-30);processed_kline_data 139,137 行、516 个 symbol(2025-05-30 ~ 2026-06-30);alpha_results 14,065,361 行、101 个因子、516 个 symbol(2025-03-03 ~ 2026-06-30)。
ADS · 应用层
由执行层写入。
| 表 | 内容 |
|---|---|
target_positions | 目标持仓(信号产出) |
execution_log | 成交记录(按真实权益幂等落库) |
daily_nav | 每日净值,支持重启恢复 |
drift_log | 漂移监控结果(流水线 Step 6,drift_monitor.py 写入):净值 / 单日收益 / 换手 / 持仓重合度四维偏差与告警 |
一致性约束
跨层一致性由 data_quality.py 的 DQC 在每日流水线第 3 步审计:检查时间缺口、跨层对齐、字段合法性。DQC 在数据进入因子计算前运行。