精华贴分享|【论文复现】使用LLM大模型生成因子
GPT-4模型与自主因子生成方法相结合,通过提供数据结构信息(如开盘价、收盘价、交易量等),让GPT生成新的因子,并直接输出计算代码。所有因子值min-max标准化,每天根据每个因子的历史累计回报动态调整因子的权重,也像上面静态因子那样加正负号,然后求加权平均数。一、理解数据,向GPT明确数据结构和类型(如股票的开盘价、收盘价、交易量等),以及生成因子的需求(如投资目标、交易频率等)。所有因子值m
本文来源于量化小论坛策略分享会板块精华帖,作者为豆汁爸爸,发布于2025年2月23日。
以下为精华帖正文:
Quantitative Finance 这个期刊不错,里面很多论文都可以免费下载,时常出现一些有意思能启发人的论文。
今天讲的这篇是使用GPT-4生成因子的论文。文章作者号称生成的某些因子能达到66%年化,4.49sharp
01
背景
自动因子挖掘这事不新鲜,无论是用GA,还是用RL已经有了很多相关论文。但这些方法的问题是完全靠数据驱动,在经济方面缺少令人信服的解释,另外样本外数据的稳定性也是最关心的问题。
GPT模型的优势
与传统的数据挖掘方法不同,GPT(如GPT-4)基于知识推理,能够生成具有经济解释的因子,而无需依赖大量数据输入。这为因子生成提供了一种新的思路。与传统的数据挖掘方法相比,GPT生成的因子具有更强的经济解释能力,能够为投资策略提供有价值的见解。
02
研究方法
GPT-4模型与自主因子生成方法相结合,通过提供数据结构信息(如开盘价、收盘价、交易量等),让GPT生成新的因子,并直接输出计算代码。这些代码可以直接在Python中运行,生成投资策略。
因子生成过程
首先将ChatGPT定位为金融专家目标是获取可观收益(意味着提示词要含有角色)。为了节约GPT的计算开销,只告知它数据存储结构,不涉及具体数据内容。
GPT在进行描述时会故意描述的很模糊避免输出错误信息,但在描述因子表达式时这种描述是不行的。所以要用推理模式。
避免让GPT直接参与因子值计算,只让它推导因子计算式。
prompt样例
数据
GPT4训练数据截止到2021.9,因子的测试数据是2021.10-2022.12. 股票市场为美股。
03
实验结果
单因子组合表现
作者对GPT生成的35个因子进行了实证测试,测试期为2021年10月至2022年12月,股票计算因子值以后前50%做多,后50%做空(相当于把市场所有股票都参与交易额,这得有多少资金量!)。下图选出来的因子有大量不能用的亏钱因子,不过也有赚钱的因子,比如因子4,13,28,35都非常不错。
结果显示,大多数因子在多-空(long-short)组合中表现良好,其中因子28的年化回报率达到66.16%,夏普比率(Sharpe Ratio)达到4.49。在多(long-only)策略中,因子28的年化回报率为53.899%,夏普比率为1.9339。
多因子组合表现
作者还测试了将35个因子组合在一起的多因子投资策略。
一共测了两种组合方法:
静态组合:所有因子值min-max标准化,根据上小节单因子测试结果确定因子正负号,反作用的因子加符号,把这些因子值求算数平均数。
动态组合:所有因子值min-max标准化,每天根据每个因子的历史累计回报动态调整因子的权重,也像上面静态因子那样加正负号,然后求加权平均数。
在静态多-空策略中,组合的年化回报率为39.728%,夏普比率为2.4854,最大回撤(Max Drawdown)为7.1795%。在静态多策略中,组合的年化回报率为45.161%,夏普比率为1.6295,最大回撤为25.439%。
在动态多权重的多-空策略中,组合的年化回报率为37%,夏普比率为3.09,最大回撤(Max Drawdown)为6.11%。在动态多权重多策略中,组合的年化回报率为34%,夏普比率为1.3,最大回撤为22.944%。
在动态多空权重的多-空策略中,组合的年化回报率为30.0%,夏普比率为2.4478,最大回撤(Max Drawdown)为12%。在动态多空权重多策略中,组合的年化回报率为30.2%,夏普比率为1.264,最大回撤为29.177%。
04
写提示词的原则
生成因子提示词的9条原则
一、理解数据,向GPT明确数据结构和类型(如股票的开盘价、收盘价、交易量等),以及生成因子的需求(如投资目标、交易频率等)。
二、让GPT参考已知的金融技术指标,如移动平均线(Moving Averages)、布林带(Bollinger Bands)、MACD等。
三、将不同的技术指标或基础因子进行组合,创建复杂的因子。例如,将动量(Momentum)和波动率(Volatility)结合。
四、生成的因子基于特定的金融理论或投资哲学,例如价值投资、成长投资或市场效率理论。
五、对价格、成交量或其他数据应用数学或统计变换,如标准化、归一化、对数变换等。
六、对数据进行分组(如按股票、按时间)并应用滚动计算(如滚动平均、滚动标准差)。
七、生成因子后,通过回测、样本外测试和统计分析来评估因子的有效性,并进行必要的调整。
八、利用特定行业的知识、市场条件或公司特性来启发新的因子。
九、生成的因子需要能够从可用数据中计算出来,对噪声具有鲁棒性,并且适用于实际交易场景。
具有经济数学的可解释性的3条原则
一、GPT利用基础数学和统计属性来分析不同指标如何有意义地组合。例如,将一个衡量趋势的指标与一个衡量波动率的指标结合,可能会提供关于趋势市场动量的见解。
二、基于历史数据和行业实践,GPT可以对某些指标在不同市场条件下的行为做出合理猜测。
三、考虑一些通用性方法,GPT可以应用标准的数学和统计技术,如归一化、加权和统计相关性。
输入进GPT用于组合的基本指标在论文的table7。
与GPT的对话过程
按照上面的原则跟GPT对话是这样:
给GPT输入数据,把上面已有的指标输入进去,让GPT生成一个因子的代码。
把代码放到自己本地的回测框架中跑一下得到结果。
根据结果反馈给GPT,例如这个因子信号太频繁,降低信号灵敏度等,让它生成下个因子。
05
因子的经济解释
例如,某些因子结合了变化率(ROC)、累积/分配线(ADL)和商品通道指数(CCI),能够反映价格变化的速度、资金流向和价格偏离历史平均水平的程度。把计算公式输入给GPT可以直接让它生成解释。(这个功能好像对行业内工作的人更有用,毕竟要和boss解释因子为啥好使)。
06
论文复现
因为我没有GPT账号,先用Deepseek玩一个玩具版本的因子生成。日后有钱了本地部署再微调用deepseek也方便。
经过推理后deepseek得到的结果如下:
设计原理
波动率调整系数:使用高频波动率对后续指标进行动态缩放,在低波动时期放大信号,高波动时期抑制噪声。
量价收敛:通过成交量动量(VMO)与价格动量的差值识别虚假突破。
自适应布林带:突破强度根据波动率动态调整带宽,防止在波动高峰期的假突破。
MACD动量分层:对MACD进行非线性变换,在趋势延续时增强因子强度,反转时快速衰减。
复合运算:采用乘积而非简单加权平均,要求三个维度同时发出正向信号。
动态标准化:每日横截面标准化确保因子中性化。
回测建议及历史表现
持仓周期:5-10日(因子半衰期经测试约7日)
组合构建:多空对冲或行业中性分层
风控机制:当市场整体波动率超过历史90%分位数时自动降低仓位
该因子在历史回测中(使用SP500成分股2018-2022数据)表现:
年化夏普比率:2.1-2.3
最大回撤:-12.7%(2020年3月)
月度胜率:68%
换手率:约6倍/月
我这次测试为了方便,使用了worldquant的快速表达式测试功能:
测试结果,(黄线是测试集数据)这个因子有一定的信号sharp0.35还是不太令人满意。持股换手率高达52%,说明开仓信号较为频繁。2022年测试数据的表现也比较差。
接下来根据测试结果反馈给deepseek,让它尝试改进
deepseek提出的改进
一、市场状态自适应机制
使用ADX指标动态识别趋势市(ADX>25)和震荡市
不同市场状态下切换参数:
趋势市:使用动量逻辑(20日动量)+标准MACD参数
震荡市:使用反转逻辑(10日反转)+快速MACD参数
二、波动率计算优化
引入成交量加权的HL波动率:(high/low -1)*log(volume)
波动率调整系数范围扩大到[0.3,3.0],增强极端行情适应性。
三、回撤控制模块
当市场20日均收益为负时,通过指数衰减因子强度:exp(-3 * market_ret<0)
在2020年3月和2022年下行阶段自动降低风险暴露。
四、换手率控制技术
5日信号平滑处理:adj_factor.rolling(5).mean()
交易成本惩罚项:1/(1+0.05*|Δfactor|),抑制小幅波动产生的交易。
五、非对称MACD增强
趋势市中:MACD在信号线上方时放大趋势强度(比率形式)
震荡市中:MACD在信号线下方时生成反转信号(负向绝对值)
上述改进如果全都加进去因子就太复杂了。我只选择了2,并且把计算所有均值是时间窗口加大,把因子值做了5日平滑。结果如下
Sharpe1.14 Turnover22.96% Fitness1.31 Returns30.10% Drawdown31.15% 各项指标均有显著改善。不足是2018-2019不赚钱了。
为了进一步改善,把因子作为y市值作为x进行线性回归,取残差作为新因子值,消除了市值影响。效果如下:
更多推荐
所有评论(0)