feat: 新增因子装饰器系统和完整因子文档
- 添加因子表达式文档,收录180+个因子及数学表达式 - 添加因子实现分析报告,明确ts_*与cs_*算子分类 - 实现装饰器系统:@time_series/@cross_section/@element_wise - 优化API和翻译器以支持新架构
This commit is contained in:
57
src/factors/decorators.py
Normal file
57
src/factors/decorators.py
Normal file
@@ -0,0 +1,57 @@
|
||||
"""函数装饰器 - 用于标记因子函数类型并自动注入 over 处理。
|
||||
|
||||
提供三种装饰器:
|
||||
- @time_series: 时序因子,自动添加 .over("ts_code")
|
||||
- @cross_section: 截面因子,自动添加 .over("trade_date")
|
||||
- @element_wise: 元素级运算,不添加 over
|
||||
"""
|
||||
|
||||
from functools import wraps
|
||||
from typing import Callable
|
||||
|
||||
|
||||
def time_series(func: Callable) -> Callable:
|
||||
"""标记为时序因子,自动添加 .over('ts_code')。
|
||||
|
||||
用于 ts_* 函数,如 ts_mean, ts_std, ts_corr 等。
|
||||
每个时序计算都按股票代码分组,防止跨股票串数据。
|
||||
"""
|
||||
|
||||
@wraps(func)
|
||||
def wrapper(self, node):
|
||||
expr = func(self, node)
|
||||
return expr.over("ts_code")
|
||||
|
||||
wrapper._factor_type = "ts"
|
||||
return wrapper
|
||||
|
||||
|
||||
def cross_section(func: Callable) -> Callable:
|
||||
"""标记为截面因子,自动添加 .over('trade_date')。
|
||||
|
||||
用于 cs_* 函数,如 cs_rank, cs_zscore 等。
|
||||
每个截面计算都按交易日分组,在同一天的所有股票间计算。
|
||||
"""
|
||||
|
||||
@wraps(func)
|
||||
def wrapper(self, node):
|
||||
expr = func(self, node)
|
||||
return expr.over("trade_date")
|
||||
|
||||
wrapper._factor_type = "cs"
|
||||
return wrapper
|
||||
|
||||
|
||||
def element_wise(func: Callable) -> Callable:
|
||||
"""标记为元素级运算,不添加 over。
|
||||
|
||||
用于数学函数,如 log, exp, sqrt, cos, sin 等。
|
||||
这些函数对每个元素独立计算,不需要分组。
|
||||
"""
|
||||
|
||||
@wraps(func)
|
||||
def wrapper(self, node):
|
||||
return func(self, node)
|
||||
|
||||
wrapper._factor_type = "element"
|
||||
return wrapper
|
||||
Reference in New Issue
Block a user