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:
@@ -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 执行表达式计算
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user