Files
etf/framework_v2/shared/factors/talib_base.py
aszerW 908b28473f 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: 完整策略对比验证

## 设计原则
- 按需抽象,不预先设计
- 职责分离,避免框架膨胀
- 测试驱动,每个组件必须有对比测试
- 渐进式迁移,验证通过再替换
2026-05-24 09:12:29 +08:00

56 lines
1.3 KiB
Python

"""
ta-lib 因子基类(通用)
所有 ta-lib 因子继承此类,只需指定函数和参数
"""
import talib
import pandas as pd
import numpy as np
from framework_v2.core import FactorBase
class TALibFactorBase(FactorBase):
"""
ta-lib 因子基类
子类只需实现:
- name: 因子名称
- _talib_func: 返回 ta-lib 函数
"""
category = "technical"
def __init__(self, period: int = 14, **params):
"""
初始化
Args:
period: 周期参数
**params: 其他参数
"""
super().__init__(period=period, **params)
self.period = period
def compute(self, data: pd.DataFrame) -> pd.Series:
"""
计算因子值
Args:
data: OHLCV 数据
Returns:
因子值序列
"""
close = data['close'].values.astype(float)
# 调用子类指定的 ta-lib 函数
result = self._talib_func(close, timeperiod=self.period)
return pd.Series(result, index=data.index, name=self.name)
@property
def _talib_func(self):
"""子类必须实现,返回 ta-lib 函数"""
raise NotImplementedError("Subclasses must implement _talib_func")