FactorExpression 安全公式 DSL
语言:简体中文 · English canonical
alpha_research.factor_expression 提供一个策略无关的因子公式层。它借鉴了量化平台常见的公式体验,但只解释经过白名单校验的表达式,不执行任意 Python,也不负责加载数据或写入研究产物。
基本用法
from alpha_research import parse_factor
factor = parse_factor("RANK(RETURNS(CLOSE, 20))")
factor.required_columns() # ("CLOSE",)
factor.lookback() # 20
factor.operators() # ("RANK", "RETURNS")
result = factor.evaluate(frame)
frame 必须是 pandas DataFrame。使用时间序列算子时,索引需要包含名为 symbol 和 date 的 MultiIndex 层,每个 symbol 的行必须按 date 升序排列,否则执行会被拒绝。
支持的算子
| 算子 | 说明 |
|---|---|
RANK(x) |
按 date 做横截面百分位排名 |
DELAY(x, n) |
每个 symbol 向后移动 n 个观测 |
RETURNS(x, n) |
x / DELAY(x, n) - 1 |
STDDEV(x, n) |
每个 symbol 的滚动样本标准差 |
CORRELATION(x, y, n) |
每个 symbol 的滚动相关系数 |
表达式支持 +、-、*、/ 以及一元正负号。窗口 n 必须是正整数常量,表达式的 lookback() 返回所有算子窗口中的最大值。
安全边界
公式通过 Python AST 解析,但 AST 只用于识别语法结构。可执行结构限于输入列、数值常量、白名单函数和基本算术。导入、属性访问、下标访问、关键字参数、lambda、eval、exec、双下划线名称和未来窗口都会被拒绝。
因此,FactorExpression 适合由研究员或 Agent 生成公式。它仍然需要接入调用方的数据版本、PIT 和研究证据契约后,才能用于正式研究结论。