Skip to content

01 — 数据层 (Data Layer)

价格数据 + 基本面数据 + 数据质量保证 + 估值/估计

目标 (Goal)

为 A 股投研 Agent 提供一个可信、可追溯、可扩展的数据底座。无下单需求,重点在数据质量和分析友好性。

数据范围:

  • 行情/价格数据:日线、分钟线、复权、停牌、ST 状态
  • 基本面数据:财报三表、关键比率(P/E、P/B、ROE、ROIC 等)
  • 估值与一致预期 (Estimates):卖方一致预期 EPS、目标价、评级分布
  • 元数据:行业分类(申万 / 中信)、指数成分、股本变动、分红送配

待研究的 Repos / 数据源

一手数据源 (Primary Sources)

实时/行情类

  • [ ] easyquotation — 多渠道实时行情
  • [ ] eltdx — 通达信本地数据读取
  • [ ] pytdx3 — 通达信协议 Python 客户端

落库/ETL 参考

  • [ ] tdx2db — 通达信 → 数据库的 ETL 思路
  • [ ] tdx-local2 — 本地化方案

每个 repo 在评审时要回答的两个问题:

  1. 它用了什么 data source? (Tushare / akshare / 通达信本地 / 爬虫 / 其他)
  2. 它怎么把数据流通到上层? (内存 / SQLite / Parquet / Postgres / TS DB)

关键决策点 (Open Questions)

Q1. 主数据源选型

  • A) Tushare 单源:质量高、统一、要钱;fundamental + estimates 都有
  • B) akshare 单源:免费、聚合多源,但稳定性、口径一致性需要验证
  • C) 混合:Tushare 做 fundamental 和 estimates,akshare/通达信本地做行情冗余
  • D) 本地通达信为主:免费、低延迟,但 fundamental 与 estimates 缺口大

建议:方案 C。理由是 fundamental/estimates 必须高质量且口径一致(Tushare 强项),行情类多一个免费源做交叉验证。

Q2. 数据质量保证机制

  • 复权口径(前复权 / 后复权 / 不复权)由谁定?落库存哪一种?
  • 如何检测财报修正追溯调整
  • 一致预期数据(EPS estimates)的来源时间戳怎么存?
  • 跨源对账:同一字段两个源不一致怎么办?

Q3. 数据层分多少层 (Scalable Layering)

建议至少分 4 层:

  1. Raw 层 — 原始抓取,按源分区,永不修改 (audit trail)
  2. Normalized 层 — 字段标准化、单位统一、复权口径统一
  3. Curated 层 — 跨源对账、修正后的 "truth",给 Agent 用
  4. Feature 层 — 派生指标(ratios、滚动估值、行业分位数)

→ 需要确认这 4 层是否符合需求,或者要不要再分。

Q4. 存储介质

  • 价格:Parquet (列存) + DuckDB?还是直接 Postgres + TimescaleDB?
  • 财报:关系型必选(关联多)
  • Estimates:时序属性强,建议 Timescale 或 Parquet by snapshot date

与上层的接口 (Interface to Agent Layer)

数据层对 Agent / Skill 暴露的应该是 schema 稳定的查询接口,不是裸 SQL:

  • get_price(code, start, end, adjust='qfq')
  • get_fundamentals(code, period, statement)
  • get_consensus(code, as_of_date)

理由:屏蔽底层数据源切换,Agent 不用知道是 Tushare 还是 akshare。

下一步

  1. 用户挑 1-2 个最关心的 repo(建议 Tushare + tdx2db),我深度 fetch 分析
  2. 确认 Q1 主数据源选型
  3. 确认 Q3 分层方案
  4. 写正式的 design spec

Internal documentation