- financial 默认增量:按 A 股披露节奏判断已最新并跳过;--full 强制全量重拉 - Tushare fina_indicator 增加报告期窗口与 100 条/请求自动分页(修复老报告期静默截断) - 新浪兜底收紧为校验兜底:两源重叠历史一致才导入缺失键,行标记 source=sina; 财务可比字段取 eps/销售毛利率(ROE 两端口径不同不作依据),日线只比较最近重叠交易日 - CLI 输出逐只进度与导入内容描述(来源/行数/报告期与公告区间),失败股票留待重跑 - financial_indicator 增 source 列(迁移 d3f6c9a21b04);新增一致性/分页/服务测试
52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
"""MarketDataProvider(数据源抽象)。
|
|
|
|
业务层只依赖本 Protocol(AGENT.md §6),禁止在业务代码中 import
|
|
tushare / 新浪实现。数据源一律返回 domain.entities 中的归一化实体。
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import date
|
|
from typing import Protocol
|
|
|
|
from app.domain.entities.market import (
|
|
AdjustFactor,
|
|
DailyBar,
|
|
FinancialIndicator,
|
|
Stock,
|
|
TradingCalendar,
|
|
)
|
|
|
|
|
|
class MarketDataProvider(Protocol):
|
|
"""统一市场数据源接口。
|
|
|
|
实现约定:
|
|
- get_daily 返回**不复权**行情(复权经 AdjustFactor 显式计算,禁止静默改口径)
|
|
- get_financial 返回带 announce_date 的指标,供上层按 as_of 过滤
|
|
- 实现不得抛出裸连接异常以外的噪音;业务错误应转为 DataSourceError
|
|
"""
|
|
|
|
name: str
|
|
|
|
def get_stock_basic(self) -> list[Stock]: ...
|
|
|
|
def get_trade_cal(self, start: date, end: date) -> list[TradingCalendar]: ...
|
|
|
|
def get_daily(self, symbol: str, start: date, end: date) -> list[DailyBar]: ...
|
|
|
|
def get_adjust_factor(self, symbol: str, start: date, end: date) -> list[AdjustFactor]: ...
|
|
|
|
def get_financial(
|
|
self,
|
|
symbol: str,
|
|
start: date | None = None,
|
|
end: date | None = None,
|
|
) -> list[FinancialIndicator]:
|
|
"""财务指标快照。
|
|
|
|
start/end 为**报告期**窗口(对应 Tushare fina_indicator 的
|
|
start_date/end_date 参数,按报告期过滤);不传表示全量历史。
|
|
新浪接口不支持按窗口拉取,提供方会忽略窗口后由调用方自行过滤。
|
|
"""
|