feat(framework_v2): 创建框架V2骨架 - 三层架构+因子验证通过

## 架构设计
- 三层架构:core(抽象接口) → shared(通用实现) → tests(验证测试)
- 5个核心抽象基类:StrategyBase, FactorBase, SignalGenerator, Executor, DataFetcher
- 零侵入:与现有框架并行开发,不修改生产代码

## 已完成
✓ 核心接口层(5个ABC类)
✓ 通用因子层(MomentumFactor完全复制现有逻辑)
✓ 对比验证测试(新旧因子输出差异=0,测试通过)

## 验证结果
- 最大差异: 0.000000e+00
- 平均差异: 0.000000e+00
- 容差: < 1e-10

## 下一步
- 阶段3: 信号层迁移(TopNSelector, DynamicThreshold, RebalanceController)
- 阶段4: 执行层迁移(BacktestRunner)
- 阶段5: 数据层迁移(DataFetcher实现)
- 阶段6: 完整策略对比验证

## 设计原则
- 按需抽象,不预先设计
- 职责分离,避免框架膨胀
- 测试驱动,每个组件必须有对比测试
- 渐进式迁移,验证通过再替换
This commit is contained in:
2026-05-24 09:12:29 +08:00
parent 226a27361f
commit 908b28473f
14 changed files with 928 additions and 0 deletions

180
framework_v2/README.md Normal file
View File

@@ -0,0 +1,180 @@
# 框架 V2 - 重构版本
## 📋 设计理念
### 三层架构
```
framework_v2/
├── core/ # 纯抽象接口(零实现)
├── shared/ # 通用实现2+策略复用)
└── tests/ # 框架测试
```
### 设计原则
1. **按需抽象**:不预先设计,只抽象已验证的通用逻辑
2. **职责分离**:数据获取、因子计算、信号生成、回测执行各司其职
3. **向后兼容**:与现有策略并行运行,验证一致后再替换
4. **测试驱动**:每个组件必须有对比验证测试
---
## 🏗️ 目录结构
```
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 # 动量因子(已验证✓)
└── tests/ # 测试
├── __init__.py
└── test_momentum_parity.py # 因子对比测试(通过✓)
```
---
## ✅ 已完成
### 阶段1: 核心接口层 ✓
- [x] StrategyBase - 策略抽象基类
- [x] FactorBase - 因子抽象基类
- [x] SignalGenerator - 信号生成器抽象基类
- [x] Executor - 执行器抽象基类
- [x] DataFetcher - 数据获取器抽象基类
### 阶段2: 通用因子层 ✓
- [x] MomentumFactor - 动量因子(完全复制现有逻辑)
- [x] 对比验证测试(通过✓,差异 = 0
---
## 🎯 验证结果
### 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*