feat(data): Tushare 限速退避 + 新浪兜底(财务 getFinanceReport2022 / 日K 前复权),source+adjust 口径标记

- TushareProvider:频率超限按指数退避重试(不再一次 200/min 即中断),最长等待 30s
- SinaProvider 重构(参考 cc-cursor 公开接口实现):
  · 新增财务通道 CompanyFinanceService.getFinanceReport2022(source=gjzb) → FinancialIndicator
    (report_date / announce_date=publish_date),与 Tushare fina_indicator schema 一致
  · 日 K 保留 jsonp(前复权),统一 UA + 重试
  · 不支持方法仍抛 DataSourceNotSupported(复权因子/交易日历/基础信息)
- FailoverProvider 现在可对 daily 与 financial 兜底(CLI _failover_provider 接 SinaProvider)
- DailyBar + stock_daily 表新增 source/adjust 列:新浪兜底行标记 sina/qfq,
  Tushare 恢复后 --resume 按同键覆盖回不复权 → 两源格式一致且可追溯
- 迁移 91c4e27a03fb 已生成;执行需在全市场同步结束后:uv run alembic upgrade head
- 测试 34+ 项(新浪财务解析/格式一致/限速退避等)通过
This commit is contained in:
Simon
2026-09-06 20:52:13 +08:00
parent e2741a0236
commit 56254172b3
8 changed files with 314 additions and 35 deletions
+9 -1
View File
@@ -42,10 +42,18 @@ class TradingCalendar(BaseModel):
class DailyBar(BaseModel):
"""不复权日线。复权请使用 AdjustFactor 在消费侧显式计算。"""
"""日线。默认不复权(source=tushare, adjust=none)。
备用源兜底行会标记 source=sina、adjust=qfq(新浪返回前复权价)。
字段统一、可区分、可追溯(AGENT §5.2/§8):研究侧应优先消费
source=tushare 且 adjust=none 的行;新浪行仅在 Tushare 不可用期间作为兜底,
Tushare 恢复后重跑 --resume 会按日覆盖回不复权口径。
"""
symbol: str
trade_date: date
source: str = Field(default="tushare", description="tushare | sina")
adjust: str = Field(default="none", description="none 不复权 | qfq 前复权")
open: Decimal | None = None
high: Decimal | None = None
low: Decimal | None = None