主题
01 — 数据层 (Data Layer)
价格数据 + 基本面数据 + 数据质量保证 + 估值/估计
目标 (Goal)
为 A 股投研 Agent 提供一个可信、可追溯、可扩展的数据底座。无下单需求,重点在数据质量和分析友好性。
数据范围:
- 行情/价格数据:日线、分钟线、复权、停牌、ST 状态
- 基本面数据:财报三表、关键比率(P/E、P/B、ROE、ROIC 等)
- 估值与一致预期 (Estimates):卖方一致预期 EPS、目标价、评级分布
- 元数据:行业分类(申万 / 中信)、指数成分、股本变动、分红送配
待研究的 Repos / 数据源
一手数据源 (Primary Sources)
- [ ] Tushare — 标记为 high quality;商业化、要积分;接口最全
- [ ] 通达信财务数据 — 本地化、免费;格式私有
- [ ] akshare-api — 多源聚合的封装
实时/行情类
- [ ] easyquotation — 多渠道实时行情
- [ ] eltdx — 通达信本地数据读取
- [ ] pytdx3 — 通达信协议 Python 客户端
落库/ETL 参考
- [ ] tdx2db — 通达信 → 数据库的 ETL 思路
- [ ] tdx-local2 — 本地化方案
每个 repo 在评审时要回答的两个问题:
- 它用了什么 data source? (Tushare / akshare / 通达信本地 / 爬虫 / 其他)
- 它怎么把数据流通到上层? (内存 / 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 层:
- Raw 层 — 原始抓取,按源分区,永不修改 (audit trail)
- Normalized 层 — 字段标准化、单位统一、复权口径统一
- Curated 层 — 跨源对账、修正后的 "truth",给 Agent 用
- 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-2 个最关心的 repo(建议 Tushare + tdx2db),我深度 fetch 分析
- 确认 Q1 主数据源选型
- 确认 Q3 分层方案
- 写正式的 design spec