系统手册
1. 数据接入层 ODS
从 Alpaca 增量拉取 K 线,质量校验后写入 kline_data,并补全行业分类供因子中性化使用。
作用:从 Alpaca 增量拉取 K 线,做质量校验后写入 kline_data;附带补全行业分类,供因子中性化使用。
源码地图
| 文件 | 关键函数 | 作用 |
|---|---|---|
src/ingestion/data_loader.py | download_alpaca_bars_data / _fetch_alpaca_page | 分页增量拉取 Alpaca bars |
validate_kline_data | 入库前质量校验 | |
_process_and_store_data | Upsert 入库 + 原始 CSV 备份 | |
src/ingestion/fetch_classification.py | fetch_one / upsert | 拉取并写入行业 / 板块分类 |
src/utils/database.py | get_sync_status / update_sync_status | 拉取水位线读写 |
已知问题与修复
无限拉取死循环(#19)
部分标的(MMC、CTRA)在 IEX 免费源无数据,朴素增量逻辑 if latest > last 会对它们无限重试,每次都从旧时间戳尝试补齐到今天。
解法:sync_status 水位线表记录 last_checked_date 与 consecutive_empty_days,连续 N 天空数据则标记停用并告警。
要点:增量同步的可靠性取决于异常路径的处理,而非正常路径的 > 比较。
完整复盘见 事故档案 · 无限拉取死循环。
量化要点
volume=0 & close>0需区分「停牌」与「交易中断」,否则会导致 VWAP 计算失真并污染因子排名。- 原始输入必须按时间戳排序,否则所有时序因子直接报废。
当前状态
Alpaca 增量拉取 516 只标的,已上线,含质量校验与重试。
缺口 / TODO
- 单源依赖 Alpaca,缺容灾 → 引入 Yahoo / AlphaVantage 作
data_loader.py备用源(M6)。
下一层:2. 数据预处理 DWD