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

View File

@@ -0,0 +1,57 @@
"""
信号生成器抽象基类
"""
from abc import ABC, abstractmethod
import pandas as pd
class SignalGenerator(ABC):
"""
信号生成器抽象基类
所有信号生成器必须实现 generate 方法
"""
mode: str = "base"
def __init__(self, **params):
"""
初始化信号生成器参数
Args:
**params: 信号参数(如 select_num, rebalance_days 等)
"""
self._params = params
@abstractmethod
def generate(self, factor_data: pd.DataFrame) -> pd.DataFrame:
"""
生成交易信号
Args:
factor_data: 因子数据 DataFrame
Returns:
信号 DataFrame必须包含 'signal'
"""
pass
def validate_factor_data(self, factor_data: pd.DataFrame) -> bool:
"""
验证因子数据是否有效
Args:
factor_data: 因子数据
Returns:
True 如果数据有效
"""
if factor_data.empty:
return False
return True
def __repr__(self) -> str:
params_str = ', '.join([f"{k}={v}" for k, v in self._params.items()])
return f"{self.__class__.__name__}({params_str})"