""" 因子抽象基类。 所有因子必须继承 BaseFactor,实现 calculate(df) → pd.Series。 """ from abc import ABC, abstractmethod import pandas as pd class BaseFactor(ABC): """因子抽象基类。 属性: name: 因子名称,如 'momentum_20' category: 'technical' | 'fundamental' | 'sentiment' required_columns: 计算所需的 DataFrame 列名列表 """ name: str = "" category: str = "" @abstractmethod def calculate(self, df: pd.DataFrame) -> pd.Series: """计算因子值。 参数: df: 日线 DataFrame,index 为 trade_date, 列至少包含 OHLCV 等基础字段。 返回: pd.Series,index 与 df 对齐,值为因子值。 """ ... def get_required_columns(self) -> list[str]: """返回计算所需的列名列表。子类可覆盖。""" return ["close"] def __repr__(self) -> str: return f"{self.__class__.__name__}(name='{self.name}')"