量化因子中心手册
因子开发
用公式或 Python 写自定义因子:两种编写方式的适用场景与语法、验证有效性的要点,以及从编写到仿真验证的完整流程。
因子是量化分析的特征指标,用来描述资产某个维度的特征——价值、动量、波动率等等。一个好的因子,应当在历史回测中对资产未来收益表现出区分能力(历史表现不代表未来)。
平台内置的因子覆盖不到你的想法时,就自己写。写好的因子可以应用于 AI 工作流与仿真验证模块,作为策略回测与信号生成的研究参考依据。
一、你能用到的四件事
- 基础因子复用:平台内置大量基础因子(量价、财务、情绪等),可以直接调用或二次修改。
- 自定义因子编写:提供标准化函数库,按语法规则写自己的因子,见 因子函数参考。
- 有效性验证:因子可以在图表中与价格走势叠加,直观查看关联度;也可以走 因子分析看板 的完整指标体系。
- 因子应用:因子可嵌入 AI 工作流,用于回测验证与仿真信号生成。
主站原来的「超级图表」入口已下线,图表能力并入了工作流应用。AI 工作流的入口在导航「产品 → 工具 → AI 工作流」,需登录。
二、两种编写方式
公式模式:没有编程基础,快速验证想法
用类似 Excel 的数学公式语言,语法简单直观,内置 RANK、MA、DELAY 等函数,覆盖多数常见因子,适合快速验证有效性。
一个 20 日动量因子:
RANK((CLOSE/DELAY(CLOSE,20))-1)
读法是从里往外:DELAY(CLOSE,20) 取 20 日前的收盘价,相除减一得到 20 日收益率,RANK 把它在截面上排成 [0,1] 的分位数。截面排名这一步几乎是必需的——不同股票的收益率量纲差异会让原始值不可比。
Python 模式:有编程基础,灵活定制
继承 Factor 基类写自定义因子类,Python 语法全支持,可以用循环、条件与自定义函数处理复杂逻辑。
class MomentumFactor(Factor):
def calculate(self, factors):
close = factors['close']
returns = (close / DELAY(close, 20)) - 1
return RANK(returns)
两种模式的函数库是同一套,公式里能用的算子在 Python 里同样可用。
| 公式模式 | Python 模式 | |
|---|---|---|
| 适合 | 一行能写清的截面表达式 | 带中间变量、条件分支、异常值处理的逻辑 |
| 门槛 | 无需编程基础 | 需要 Python 基础 |
| 上手速度 | 快 | 稍慢,但天花板高 |
三、写完之后:怎么验证
写出来只是第一步,因子有没有用要靠指标说话。完整的指标体系见 因子分析怎么读,这里只强调三条最容易忽略的:
- 先看方向再看强度。IC 为负不是失败,是反向因子;方向不稳定(累计 IC 忽上忽下)才是真问题。
- 检查是否混入未来信息。IC 自相关异常高(如 > 0.8)、或者指标好得不像话,先回头查因子表达式里有没有用到当期之后的数据——
FUTURE_RETURNS这类函数只应出现在评估环节,不能进因子本身。 - 换窗口复验。只在某一段区间、某一个股票池下有效的因子,多半是拟合了噪声。
四、从编写到仿真的完整流程
- 选或写因子:调用平台内置基础因子,或用公式 / Python 模式开发自定义因子。
- 接入工作流:把因子作为信号源嵌入 AI 工作流 / 策略。
- 验证有效性:通过历史回测与可视化分析,检验预测能力与稳定性。
- 仿真运行:在仿真交易模块选择该因子的工作流 / 策略,点【启动交易】配置交易参数并启动。
- 监控与复盘:系统实时监控因子值,触发阈值时执行对应指令;在日志模块可以查看因子触发记录。
以上流程止于仿真验证。平台不代客下单,所有真实交易动作由你在自有账户侧独立完成;回测与仿真结果不代表未来收益,也不构成投资建议。
跑通之后,把因子提交进 我的因子池,它会按固定窗口每日更新绩效指标。
五、常见问题
公式提示语法错误怎么办?
先确认函数名与参数个数:函数区分参数类型((X)、(X,N)、(A,B,N) 等),参数给少或给多都会报错;其次确认括号配对与逗号是中文还是英文——全角符号是最常见的坑。完整函数签名见 因子函数参考。
内置函数不够用,能自己扩展吗?
能。公式模式受限于内置算子,遇到需要循环、状态机或自定义统计的逻辑,切到 Python 模式,在 calculate 里自由实现,内置算子仍然可以调用。
IC 只有 0.01 出头,怎么优化?
按这个顺序试:一是做截面处理(RANK / ZSCORE 标准化,必要时做行业、市值中性化);二是调整观察窗口,用衰减图找信号最强的滞后期;三是加过滤条件剔除流动性差、异常波动的标的;四是把弱因子与其他维度的因子组合,单因子 IC 低不代表在组合里没有边际贡献。如果四条都试过仍然接近 0,这个逻辑大概率不成立,换方向比继续调参数划算。
