refactor(data): 移除 api_daily 模块并更新文档

- 删除 src/data/api_wrappers/api_daily.py (240行)
- 更新 6 个文档文件,将 daily 表引用替换为 pro_bar
- 同步 README.md 中的因子框架和训练模块示例

BREAKING CHANGE: api_daily 模块已移除,请使用 api_pro_bar 替代
This commit is contained in:
2026-03-14 01:48:56 +08:00
parent 181994f063
commit a22bc2d282
7 changed files with 161 additions and 342 deletions

View File

@@ -776,9 +776,9 @@ Skill 会自动:
- [ ] 测试覆盖正常和异常情况
## 11. 示例参考
### 11.1 完整示例api_daily.py
### 11.1 完整示例api_pro_bar.py
参见 `src/data/api_wrappers/api_daily.py` - 按股票获取日线数据的完整实现
参见 `src/data/api_wrappers/api_pro_bar.py` - 按股票获取 Pro Bar 行情数据的完整实现(主力行情表)
### 11.2 完整示例api_trade_cal.py

View File

@@ -222,7 +222,7 @@ def _infer_data_specs(self, node, dependencies):
```
**DataSpec 说明**
- `table`: 数据表名pro_bar 或 daily
- `table`: 数据表名pro_bar 为主力行情表
- `columns`: 需要的字段列表
**注意**:数据获取使用用户传入的日期范围,不做自动扩展。时序因子(如 `ts_delay``ts_mean`)在数据不足时会返回 null这是符合预期的行为。
@@ -377,19 +377,19 @@ def execute(self, plan, data):
### 7.1 用户代码
```python
from src.factors import FactorEngine, FormulaParser, FunctionRegistry
from src.factors import FactorEngine
# 1. 创建引擎
engine = FactorEngine()
# 2. 解析字符串表达式
parser = FormulaParser(FunctionRegistry())
expr = parser.parse("(close / ts_delay(close, 5)) - 1")
# 2. 使用字符串表达式注册因子(推荐)
engine.add_factor("returns_5d", "(close / ts_delay(close, 5)) - 1")
# 3. 注册因子
engine.register("returns_5d", expr)
# 或者使用 DSL 表达式
from src.factors.api import close, ts_delay
engine.register("returns_5d", (close / ts_delay(close, 5)) - 1)
# 4. 执行计算
# 3. 执行计算
result = engine.compute(
factor_names=["returns_5d"],
start_date="20240101",
@@ -400,23 +400,27 @@ result = engine.compute(
### 7.2 内部调用链
```
FactorEngine.add_factor() / register()
└── 创建并缓存 ExecutionPlan
└── ExecutionPlanner.create_plan()
├── DependencyExtractor.extract_dependencies() → {'close'}
├── _infer_data_specs() → [DataSpec('pro_bar', ['close'], 5)]
└── PolarsTranslator.translate() → pl.col('close').shift(5).over('ts_code')...
FactorEngine.compute()
├── 1. 创建 ExecutionPlan
│ └── ExecutionPlanner.create_plan()
├── DependencyExtractor.extract_dependencies() → {'close'}
│ ├── _infer_data_specs() → [DataSpec('pro_bar', ['close'], 5)]
└── PolarsTranslator.translate() → pl.col('close').shift(5).over('ts_code')...
├── 2. 获取数据
│ └── DataRouter.fetch_data([plan.data_specs])
│ ├── _load_table('pro_bar', ['close'], start_date-5d, end_date)
├── 1. 获取所有缓存的执行计划
├── 2. 合并数据规格
└── _merge_data_specs()
├── 3. 获取数据
└── DataRouter.fetch_data(merged_specs)
├── _load_table('pro_bar', ['close'], start_date, end_date)
│ │ └── Storage.load_polars() → 查询 DuckDB
│ └── _assemble_wide_table() → Polars DataFrame
└── 3. 执行计算
└── ComputeEngine.execute(plan, data)
└── data.with_columns([polars_expr.alias('returns_5d')])
└── 4. 执行计算
└── ComputeEngine.execute_plans(plans, data)
└── data.with_columns([polars_exprs...])
└── Polars 执行表达式计算
```

View File

@@ -92,17 +92,17 @@
| 字段名 | 状态 | 数据来源 | 所属类别 |
|--------|------|----------|----------|
| `close` | 可用 | daily/pro_bar 表 | 价格 |
| `open` | 可用 | daily/pro_bar 表 | 价格 |
| `high` | 可用 | daily/pro_bar 表 | 价格 |
| `low` | 可用 | daily/pro_bar 表 | 价格 |
| `vol` | 可用 | daily/pro_bar 表 | 成交量 |
| `amount` | 可用 | daily/pro_bar 表 | 成交额 |
| `pre_close` | 可用 | daily/pro_bar 表 | 价格 |
| `change` | 可用 | daily/pro_bar 表 | 价格变化 |
| `pct_chg` | 可用 | daily/pro_bar 表 | 涨跌幅 |
| `turnover_rate` | 可用 | daily/pro_bar 表 | 换手率 |
| `volume_ratio` | 可用 | daily/pro_bar 表 | 量比 |
| `close` | 可用 | pro_bar 表 | 价格 |
| `open` | 可用 | pro_bar 表 | 价格 |
| `high` | 可用 | pro_bar 表 | 价格 |
| `low` | 可用 | pro_bar 表 | 价格 |
| `vol` | 可用 | pro_bar 表 | 成交量 |
| `amount` | 可用 | pro_bar 表 | 成交额 |
| `pre_close` | 可用 | pro_bar 表 | 价格 |
| `change` | 可用 | pro_bar 表 | 价格变化 |
| `pct_chg` | 可用 | pro_bar 表 | 涨跌幅 |
| `turnover_rate` | 可用 | pro_bar 表 | 换手率 |
| `volume_ratio` | 可用 | pro_bar 表 | 量比 |
### 1.8 支持的运算符
@@ -482,7 +482,7 @@ spec = DataSpec(
| 数据源 | 依赖因子数 | 实现难度 | 优先级 |
|--------|------------|----------|--------|
| daily/pro_bar (已有) | ~40 | 低 | 高 |
| pro_bar (主力行情表) | ~40 | 低 | 高 |
| 纯技术指标 (ts_*) | ~30 | 中 | 高 |
| 筹码分布 (cyq) | ~50 | 中 | 中 |
| 资金流向 (moneyflow) | ~30 | 中 | 中 |

View File

@@ -524,7 +524,7 @@ def prepare_data(...) -> pl.DataFrame:
```python
# 系统自动识别
n_income financial_income (PIT)
close daily (DAILY)
close pro_bar (主力行情表)
```
### 3. 财务数据清洗
@@ -584,10 +584,10 @@ CREATE TABLE financial_income (
);
```
### daily日线行情)
### pro_bar主力行情
```sql
CREATE TABLE daily (
CREATE TABLE pro_bar (
ts_code VARCHAR, -- 股票代码
trade_date DATE, -- 交易日期
open DOUBLE, -- 开盘价
@@ -595,6 +595,10 @@ CREATE TABLE daily (
low DOUBLE, -- 最低价
close DOUBLE, -- 收盘价
vol BIGINT, -- 成交量
turnover_rate DOUBLE, -- 换手率
volume_ratio DOUBLE, -- 量比
... -- 其他行情字段
);
```
**说明**: pro_bar 表通过 Tushare Pro Bar 接口获取,包含后复权数据和换手率、量比等指标,是主力行情数据表。