# 框架 V2 - 重构版本 ## 📋 设计理念 ### 三层架构 ``` framework_v2/ ├── core/ # 纯抽象接口(零实现) ├── shared/ # 通用实现(2+策略复用) └── tests/ # 框架测试 ``` ### 设计原则 1. **按需抽象**:不预先设计,只抽象已验证的通用逻辑 2. **职责分离**:数据获取、因子计算、信号生成、回测执行各司其职 3. **向后兼容**:与现有策略并行运行,验证一致后再替换 4. **测试驱动**:每个组件必须有对比验证测试 --- ## 📚 文档 - **[数据架构方案](DATA_ARCHITECTURE.md)** - 完整的数据架构设计(Schema、验证、性能优化) - **[跨市场对齐方案](ALIGNMENT_GUIDE.md)** - CrossMarketAligner 使用指南 - **[数据流完整推演](DATA_FLOW_DEMO.md)** - 从 OHLCV 到最终收益的 7 个阶段推演 - **[Aligner + Schema 整合方案](ALIGNMENT_SCHEMA_INTEGRATION.md)** - Pydantic Schema 与对齐器结合使用 - **[FlaskAPIFetcher 使用指南](FLASK_API_FETCHER_GUIDE.md)** - 通过 HTTP API 获取线上数据 --- ## 🏗️ 目录结构 ``` framework_v2/ ├── __init__.py ├── README.md │ ├── core/ # 核心抽象接口 │ ├── __init__.py │ ├── strategy.py # StrategyBase (ABC) │ ├── factor.py # FactorBase (ABC) │ ├── signal.py # SignalGenerator (ABC) │ ├── executor.py # Executor (ABC) │ └── data.py # DataFetcher (ABC) │ ├── shared/ # 通用实现 │ ├── __init__.py │ ├── factors/ │ │ ├── __init__.py │ │ ├── talib_base.py # TALibFactorBase (需要 talib) │ │ └── momentum.py # 动量因子(已验证✓) │ ├── data/ │ │ ├── __init__.py │ │ └── alignment.py # 跨市场对齐器(已验证✓) │ └── signals/ # 待实现 │ └── ... │ └── tests/ # 测试 ├── __init__.py └── test_momentum_parity.py # 因子对比测试(通过✓) ``` --- ## ✅ 已完成 ### 阶段1: 核心接口层 ✓ - [x] StrategyBase - 策略抽象基类 - [x] FactorBase - 因子抽象基类 - [x] SignalGenerator - 信号生成器抽象基类 - [x] Executor - 执行器抽象基类 - [x] DataFetcher - 数据获取器抽象基类 ### 阶段2: 通用因子层 ✓ - [x] MomentumFactor - 动量因子(完全复制现有逻辑) - [x] 对比验证测试(通过✓,差异 = 0) ### 阶段2.5: 数据对齐层 ✓ - [x] CrossMarketAligner - 跨市场数据对齐器 - [x] 解决 ffill 陷阱(价格 vs 收益率) - [x] 解决跨市场日历不对齐 - [x] 解决 NaN 传播问题 - [x] 完整测试套件(5/5 通过✓) --- ## 🎯 验证结果 ### MomentumFactor 对比测试 ``` ============================================================ MomentumFactor 对比测试 ============================================================ 1. 加载测试数据... ⚠ 未找到测试数据,使用模拟数据 2. 计算旧因子(strategies/shared/factors/momentum.py)... ✓ 旧因子计算完成 结果范围: -0.8515 ~ 8.5805 NaN 数量: 22 3. 计算新因子(framework_v2/shared/factors/momentum.py)... ✓ 新因子计算完成 结果范围: -0.8515 ~ 8.5805 NaN 数量: 22 4. 对比结果... ✓ 索引一致 最大差异: 0.000000e+00 平均差异: 0.000000e+00 ✓ 差异在容差范围内 (< 1e-10) ============================================================ ✓ 测试通过:新旧因子输出完全一致! ============================================================ ``` --- ## 📝 下一步计划 ### 阶段3: 信号层迁移 - [ ] TopNSelector - Top N 选股器 - [ ] DynamicThreshold - 动态阈值(V3逻辑) - [ ] RebalanceController - 调仓控制器 - [ ] 信号对比验证测试 ### 阶段4: 执行层迁移 - [ ] BacktestRunner - 回测执行器 - [ ] 收益计算对比测试 ### 阶段5: 数据层迁移 - [ ] RotationDataFetcher - 轮动策略数据获取器 - [ ] CrossMarketAligner - 跨市场对齐器 ### 阶段6: 策略组装 - [ ] RotationStrategyV2 - 新框架轮动策略 - [ ] 完整策略对比测试 --- ## 🔧 使用方法 ### 运行测试 ```bash # 运行因子对比测试 python framework_v2/tests/test_momentum_parity.py # 运行所有测试 python -m pytest framework_v2/tests/ ``` ### 使用新因子 ```python from framework_v2.shared.factors import MomentumFactor # 创建因子 factor = MomentumFactor(n_days=25, weighted=True, crash_filter=True) # 计算因子值 import pandas as pd data = pd.DataFrame({'close': [...]}, index=[...]) factor_values = factor.compute(data) ``` --- ## 📊 与旧框架对比 | 维度 | 旧框架 (framework/) | 新框架 (framework_v2/) | |------|---------------------|------------------------| | **架构** | 抽象+实现混杂 | 三层分离(core/shared/tests) | | **因子** | 独立实现 | TALibFactorBase + 定制继承 | | **信号** | 包含所有逻辑 | 拆分为 Signal + Threshold + Rebalance | | **数据** | 耦合在策略中 | DataFetcher 抽象 | | **测试** | 部分覆盖 | 每个组件必须有对比测试 | | **状态** | 生产环境 ✓ | 开发中 🚧 | --- ## ⚠️ 注意事项 1. **talib 依赖**:TALibFactorBase 需要安装 `ta-lib`,但未安装不影响 MomentumFactor 使用 2. **并行开发**:新框架与旧框架并行,不修改现有代码 3. **验证优先**:每个模块迁移后立即验证,确保结果一致 --- *创建日期: 2026-05-06* *版本: 2.0.0*