Files
ProStock/tests/factors/factor_test_report.md
liaozhaorun 0a16129548 feat(factors): 添加因子计算框架
- 新增因子基类 (BaseFactor, CrossSectionalFactor, TimeSeriesFactor)
- 新增数据规格和上下文类 (DataSpec, FactorContext, FactorData)
- 新增数据加载器 (DataLoader) 和执行引擎 (FactorEngine)
- 新增组合因子支持 (CompositeFactor, ScalarFactor)
- 添加因子模块完整测试用例
- 添加 Git 提交规范文档
2026-02-22 14:41:32 +08:00

4.2 KiB
Raw Blame History

因子真实数据测试报告

1. 测试概述

本测试使用 daily.h5 文件中的真实A股市场数据对 ProStock 因子框架进行验证。测试对比了因子框架计算结果与 Polars 原生计算结果,验证因子计算的正确性。

测试数据

  • 数据源: data/daily.h5
  • 时间范围: 2024-01-01 至 2024-04-30
  • 股票数量: 20只
  • 数据量: 1,560条记录

测试因子类型

  1. 时序因子 (TimeSeriesFactor): 移动平均线 (MA)
  2. 截面因子 (CrossSectionalFactor): PE排名 (PE_Rank)
  3. 结合因子 (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 关键发现

  1. 计算精度: 因子框架与 Polars 原生计算结果的差异为 0表明计算精度完全一致
  2. 时序因子: TimeSeriesFactor 基类正确实现了股票级别的时序计算
  3. 截面因子: CrossSectionalFactor 基类正确实现了日期级别的截面计算
  4. 组合因子: ScalarFactorCompositeFactor 正确实现了标量运算和因子组合

4.3 验证结论

ProStock 因子框架的计算逻辑与 Polars 原生计算完全一致,框架设计正确,可以用于实际量化投资研究。


5. 测试环境

  • Python: 3.13.2
  • Polars: 最新版本
  • Pytest: 9.0.2
  • 数据: daily.h5 (8,856,081 条记录)

报告生成时间: 2026-02-22