- 新增因子基类 (BaseFactor, CrossSectionalFactor, TimeSeriesFactor) - 新增数据规格和上下文类 (DataSpec, FactorContext, FactorData) - 新增数据加载器 (DataLoader) 和执行引擎 (FactorEngine) - 新增组合因子支持 (CompositeFactor, ScalarFactor) - 添加因子模块完整测试用例 - 添加 Git 提交规范文档
4.2 KiB
4.2 KiB
因子真实数据测试报告
1. 测试概述
本测试使用 daily.h5 文件中的真实A股市场数据,对 ProStock 因子框架进行验证。测试对比了因子框架计算结果与 Polars 原生计算结果,验证因子计算的正确性。
测试数据
- 数据源:
data/daily.h5 - 时间范围: 2024-01-01 至 2024-04-30
- 股票数量: 20只
- 数据量: 1,560条记录
测试因子类型
- 时序因子 (TimeSeriesFactor): 移动平均线 (MA)
- 截面因子 (CrossSectionalFactor): PE排名 (PE_Rank)
- 结合因子 (CompositeFactor): 标量组合 (0.5 * MA) 和因子加法 (MA5 + MA10)
2. 测试结果
2.1 时序因子测试 - MA(5)
[时序因子 MA(5) 对比]
样本股票: 000001.SZ
有效数据点: 77
最大差异: 0.000000000000000
样本数据 (前5个):
Polars: 10.022000, Factor: 10.022000, Diff: 0.000000000000000
Polars: 10.046000, Factor: 10.046000, Diff: 0.000000000000000
Polars: 10.056000, Factor: 10.056000, Diff: 0.000000000000000
Polars: 10.072000, Factor: 10.072000, Diff: 0.000000000000000
Polars: 10.078000, Factor: 10.078000, Diff: 0.000000000000000
结论: ✅ 通过 - 因子框架计算的 MA(5) 与 Polars 原生计算完全一致
2.2 截面因子测试 - PE_Rank
[截面因子 PE_Rank 对比]
样本日期: 20240131
股票数量: 20
最大差异: 0.000000000000000
样本数据 (前5个):
000001.SZ: Polars: 0.050000, Factor: 0.050000
000002.SZ: Polars: 0.550000, Factor: 0.550000
000004.SZ: Polars: 0.300000, Factor: 0.300000
000005.SZ: Polars: 0.100000, Factor: 0.100000
000006.SZ: Polars: 0.400000, Factor: 0.400000
结论: ✅ 通过 - 因子框架计算的 PE_Rank 与 Polars 原生计算完全一致
2.3 结合因子测试 - 0.5 * MA(5)
[结合因子 0.5*MA(5) 对比]
公式: 0.5 * MA(5)
有效数据点: 77
最大差异: 0.000000000000000
样本数据 (前5个):
Polars: 5.011000, Factor: 5.011000, Diff: 0.000000000000000
Polars: 5.023000, Factor: 5.023000, Diff: 0.000000000000000
Polars: 5.028000, Factor: 5.028000, Diff: 0.000000000000000
Polars: 5.036000, Factor: 5.036000, Diff: 0.000000000000000
Polars: 5.039000, Factor: 5.039000, Diff: 0.000000000000000
结论: ✅ 通过 - 标量组合因子计算正确
2.4 结合因子测试 - MA(5) + MA(10)
[结合因子 MA(5) + MA(10) 对比]
有效数据点: 72
最大差异: 0.000000000000000
结论: ✅ 通过 - 因子加法组合计算正确
3. 综合测试汇总
============================================================
因子测试汇总
============================================================
MA(5): 最大差异 = 0.00e+00 通过
MA(10): 最大差异 = 0.00e+00 通过
MA(20): 最大差异 = 0.00e+00 通过
PE_Rank: 最大差异 = 0.00e+00 通过
============================================================
4. 测试结论
4.1 全部通过 ✅
所有5个测试用例均通过验证:
| 测试项目 | 因子类型 | 最大差异 | 状态 |
|---|---|---|---|
| MA(5) | 时序因子 | 0.00e+00 | ✅ 通过 |
| MA(10) | 时序因子 | 0.00e+00 | ✅ 通过 |
| MA(20) | 时序因子 | 0.00e+00 | ✅ 通过 |
| PE_Rank | 截面因子 | 0.00e+00 | ✅ 通过 |
| 0.5 * MA(5) | 结合因子 | 0.00e+00 | ✅ 通过 |
| MA(5) + MA(10) | 结合因子 | 0.00e+00 | ✅ 通过 |
4.2 关键发现
- 计算精度: 因子框架与 Polars 原生计算结果的差异为 0,表明计算精度完全一致
- 时序因子:
TimeSeriesFactor基类正确实现了股票级别的时序计算 - 截面因子:
CrossSectionalFactor基类正确实现了日期级别的截面计算 - 组合因子:
ScalarFactor和CompositeFactor正确实现了标量运算和因子组合
4.3 验证结论
ProStock 因子框架的计算逻辑与 Polars 原生计算完全一致,框架设计正确,可以用于实际量化投资研究。
5. 测试环境
- Python: 3.13.2
- Polars: 最新版本
- Pytest: 9.0.2
- 数据: daily.h5 (8,856,081 条记录)
报告生成时间: 2026-02-22