简介这份国金证券金融工程专题报告《Alpha掘金系列之五如何利用ChatGPT挖掘高频选股因子》面向量化研究员、金融工程从业者及对AI选股感兴趣的进阶投资者系统探讨大语言模型在因子挖掘中的落地路径。报告从ChatGPT的Transformer架构、Scaling Law与RLHF训练机制讲起进而介绍提示工程的基本公式与思维链提示技巧并给出周频价量变异系数因子、高频买卖盘力量因子的完整构建与测试结果最终以卖盘力量因子搭建中证1000指数增强策略在单边千分之二费率下实现7.17%的年化超额收益与0.57的信息比率。资源为1个PDF文件压缩包约2.16MB内容含模型原理、提示工程指南、因子实战与代码测试等章节结构完整、图表丰富。目前已有248人学习下载适合希望将ChatGPT引入量化研究流程、理解因子构建与策略回测细节的读者参考。1. 大模型挖因子为什么“会聊天”的模型能吐出可回测的选股信号一个反直觉的事实是让 ChatGPT 去挖选股因子它给出的公式往往并不复杂甚至简单到让人怀疑——价量变异系数、买卖盘力量差这些构造方式在传统因子研究里都能找到影子。但真正值得琢磨的不是公式本身而是它为什么能在没有见过 A 股 tick 数据、没有跑过回测的前提下组合出一套逻辑自洽、且在日频上做出 17.29% 多头年化超额收益的因子框架。这背后涉及大语言模型的涌现能力、提示工程对输出空间的约束以及量化研究里“因子逻辑”与“数据字段”之间的映射关系。搞懂这条链路比记住某个因子公式重要得多——因为公式会失效但“怎么让模型稳定产出可验证假设”这件事才是能复用的底层能力。2. 从 Transformer 到 RLHF模型凭什么能“理解”因子逻辑2.1 自注意力机制让“委托量”和“收益率”产生关联传统 LSTM 在处理金融文本或因子描述时有两个硬伤一是无法区分不同词的重要性二是长距离信息容易丢失。Transformer 的自注意力机制给输入序列的每个位置分配不同权重这意味着当提示里同时出现“委托价”“委托量”“买卖盘失衡”这些词时模型能动态判断哪些词对当前任务更关键。常见的实现思路是自注意力把每个 token 映射成 Query、Key、Value 三个向量通过点积计算 token 之间的相关性权重再加权求和。放到因子挖掘场景里当你写“用委托量和委托价构建一个衡量买卖盘力量差异的因子”模型内部会把“委托量”和“买卖盘力量”的关联权重调高把“价”和“差异”的关联权重调高最终生成的公式里就会出现BVol * (1 - price_bid/price)这类结构。这不是模型“懂金融”而是注意力机制在大量文本预训练后已经学会了这些词在统计上的共现模式。2.2 RLHF 三步训练为什么模型给出的因子“像人写的”RLHF 的核心不是让模型更聪明而是让它更符合人类偏好。训练分三步第一步聘请标注员对指令进行标注微调模型第二步对模型多个输出排序训练一个打分模型第三步用打分模型继续优化输出。这套机制对因子挖掘的意义在于模型在预训练阶段已经见过大量金融研报、量化论坛讨论和学术论文它知道“一个好的因子”通常具备哪些文本特征——有逻辑支撑、有明确的数据字段、有可计算的公式。RLHF 进一步强化了这种偏好使得模型在收到“请给出一个原创选股因子”的提示时不会随机拼凑而是倾向于输出结构完整、变量定义清晰、甚至附带降频方法的答案。但要注意这种“像人写的”并不等于“能赚钱”它只是让输出更接近研究员的表达习惯逻辑漏洞依然需要人工排查。2.3 涌现现象与提示工程参数规模到了能力才“跳”出来Scaling Law 描述的是模型性能随参数量、数据量和计算量增长而提升的规律。GPT-3 的 1750 亿参数相比 GPT-2 的 15 亿带来的不只是量变——模型开始具备 Few-shot learning 能力给几个示例就能举一反三。这意味着你不需要为每个因子任务重新训练模型只需要在提示里给出足够的约束条件。提示工程的基本公式是“角色 任务 指令”。比如“作为一名资深量化研究员请给出一个基于高频数据的选股因子该因子必须使用委托价和委托量且具有原创性”。角色设定约束了输出风格任务描述锁定了数据范围指令部分则进一步限制因子的构造逻辑。实测中不加约束时模型会给出泛泛的动量或反转因子加上“必须使用委托价和委托量”后它才会转向买卖盘力量这类高频专属结构。这就是提示工程在因子挖掘里的实际作用不是让模型变聪明而是把它的输出空间压缩到你可验证的范围内。3. 思维链提示怎么让模型一步步推出“加权 IC”这种非显然答案3.1 IC 指标的盲区相同 IC 值多头表现可能完全相反IC 作为因子评价指标有一个被广泛讨论的漏洞两个因子 IC 值相近但因子值与收益率的相关性在不同分组区间内差异很大。极端情况下A 因子 IC 为 0.22多头组表现最好B 因子 IC 为 0.25多头组反而最差。如果只看 IC 排序你会选 B但实际投资中 A 才是能赚钱的那个。这个问题的本质是 IC 假设了因子与收益率的线性单调关系而真实市场里因子在不同分位上的预测能力是不对称的。A 股有做空限制多头组的权重理应更高但标准 IC 对所有分组一视同仁。直接问 ChatGPT “怎么改进 IC 指标”它给出的回答往往停留在“分组计算再平均”这种层面没有触及加权逻辑。3.2 分步引导从“分组平均”到“多头加权”的推理路径思维链提示的做法是把复杂问题拆成多个步骤引导模型逐步思考。实测中第一轮提示后ChatGPT 给出了“每组内分别计算 IC 值再求均值”的方案——这解决了分组差异问题但没有解决权重问题。第二轮直接指出“A 股做空受限多头组应该更重要”模型才修正为“计算加权平均 IC给做多组赋予更高权重”。这个过程的机制在于思维链把模型的单次生成变成了多步推理每一步的输出成为下一步的输入模型在每一步都能根据新信息纠偏。对于量化研究来说这意味着你可以用对话的方式把研究员脑子里的隐性知识——比如“A 股不能随便做空”“多头组才是实际收益来源”——逐步注入到模型的推理过程中最终得到一个逻辑上更合理的改进方案。3.3 思维链的边界模型会“生搬硬套”需要人工兜底思维链不是万能的。模型在预训练时接受了海量文本其中很多金融讨论来自成熟市场默认可以做空、交易成本极低、流动性充足。当它把这些假设套到 A 股场景时就会出现“生搬硬套”。比如它可能建议用多空组合的夏普比率来筛选因子但 A 股实际只能做多空头组的表现再差也不影响策略收益。另一个边界是数值计算。思维链能引导模型给出公式结构但公式里的参数——比如滚动窗口取 5 天还是 10 天、标准化用 z-score 还是 rank——模型无法通过推理确定必须靠回测验证。所以思维链的正确用法是用它来生成假设和逻辑框架用回测来筛选参数和验证有效性。两者缺一不可。4. 买卖盘力量因子从 tick 数据到 17.29% 超额收益的实现细节4.1 因子构造委托价与委托量的标准化处理模型给出的原始因子思路是买盘力量等于买入委托量乘以买入委托价卖盘力量等于卖出委托量乘以卖出委托价两者相减得到买卖盘力量差异。但这个版本有一个明显问题——不同股票的委托量量级差异巨大直接相减得到的因子在横截面上不可比。修正后的公式引入了标准化# 买盘力量买入委托量乘以买入价相对中间价的偏离 # price_bid 为前十档买入委托均价price 为当前成交价 BForce BVol * (1 - price_bid / price) # 卖盘力量卖出委托量乘以卖出价相对中间价的偏离 # price_ask 为前十档卖出委托均价 SForce SVol * (price_ask / price - 1) # 买卖盘力量差异归一化到 [-1, 1] 区间 BSForce (BForce - SForce) / (BForce SForce)BVol和SVol分别是前十档买入和卖出委托量的均值price_bid和price_ask是前十档委托价的均值price是当前快照的成交价。买盘力量的逻辑是买入委托量越大、委托价越接近成交价说明买盘越强卖盘力量同理。BSForce做归一化是为了消除量纲影响让不同股票之间可以横向比较。4.2 日频测试BSForce 夏普 4.51但衰减极快在 2016 年 1 月至 2022 年 8 月、中证 1000 成分股范围内以次日开盘价买入进行日频调仓测试结果如下因子IC 均值IC T 统计量多空年化收益多空夏普多头年化超额BForce-0.24%-0.6118.74%0.9611.17%SForce-1.02%-2.874.06%0.226.57%BSForce1.13%7.0037.00%4.5117.29%BSForce 的多空夏普达到 4.51最大回撤仅 4.88%说明因子在日频上区分度极强。但问题在于衰减速度BSForce 在第二天基本失效这意味着日频调仓才能捕获大部分收益而日频调仓的交易成本会吃掉大量超额。4.3 降频到周频SForce 反而更稳健考虑到交易成本把因子降到周频测试。由于 BSForce 衰减太快降频后表现大幅下滑反而 SForce 和 BForce 更稳健。周频下SForce 多头年化超额 10.20%BForce 为 9.77%虽然多空单调性一般但多头组合表现尚可。用 SForce 构建中证 1000 指数增强策略在单边千分之二手续费率下年化超额收益 7.17%信息比率 0.57。这个结果说明高频因子的价值不一定在于日频交易降频后如果逻辑仍然成立反而能在控制成本的前提下获得可接受的超额收益。关键在于判断因子的衰减是“信息消失”还是“信息被噪声掩盖”——前者降频无效后者降频后信噪比反而提升。5. 避坑指南用大模型挖因子时最容易翻车的五个地方5.1 现象模型给出的因子公式字段名对不上原因ChatGPT 预训练时见过的金融数据字段命名五花八门它生成的公式里可能用bid_volume而你的数据库里字段叫BVol。模型不知道你的实际数据结构它只是按统计规律拼凑变量名。解决在提示里明确给出字段字典比如“可用字段包括BVol买入委托量、SVol卖出委托量、price_bid买入委托均价、price_ask卖出委托均价”。字段定义越精确模型输出越接近可直接运行的代码。5.2 现象因子逻辑自洽但回测一跑就亏原因模型生成因子时依据的是文本层面的逻辑连贯性不是市场有效性。它可能给出一个“买盘力量强则未来收益高”的因子但实际市场里买盘力量强往往意味着短期超买次日反而回落。解决把模型输出当作假设不是结论。先跑 IC 和分组测试再看多空单调性和多头超额。逻辑再漂亮回测不通过就放弃。5.3 现象思维链提示后模型给出的改进方案仍然有漏洞原因思维链能引导模型分步推理但模型每一步的推理都基于预训练知识如果预训练语料里缺少 A 股做空限制、涨跌停制度这些约束它就不会主动考虑。解决在思维链的每一步都加入领域约束。比如在问“怎么改进 IC”之前先告诉模型“A 股只能做多做空成本极高涨跌停时无法成交”。把约束前置比事后纠正更有效。5.4 现象模型给出的代码能跑但结果和预期差很远原因模型生成的代码通常在语法层面正确但在细节上容易出错。比如 rolling window 的min_periods参数没设导致前几期全是 NaN或者标准化时用了全样本均值引入了未来信息。解决代码必须逐行审查重点检查三类问题时间窗口对齐、缺失值处理、前视偏差。模型不知道你的数据频率和调仓时点这些必须人工确认。5.5 现象同一个提示两次运行结果不一样原因大语言模型生成具有随机性temperature 参数大于零时每次采样结果都不同。这在因子挖掘里既是优点也是缺点——优点是可以生成多个候选因子缺点是难以复现。解决把 temperature 调低甚至设为 0让输出尽量确定。如果平台支持固定随机种子。对于重要的因子生成任务保存完整的提示词和输出记录方便后续复现和对比。6. 设计取舍大模型挖因子的能力边界与验证习惯大模型在因子挖掘里的定位不是替代研究员而是把“提出假设”这一步的效率提升一个量级。传统流程里研究员需要阅读大量文献、手动尝试各种字段组合才能找到一个有逻辑支撑的候选因子。大模型把这个过程压缩到几次对话但它给出的因子仍然需要经过完整的回测验证、参数调优和稳健性检验。这里有一个关键取舍模型的创造力来自预训练语料的广度但它的局限性也来自同一处——它见过的金融数据以美股和成熟市场为主对 A 股的制度约束、交易规则、投资者结构理解有限。所以用模型挖因子时提示工程的重点不是“让模型更聪明”而是“把 A 股的约束条件翻译成模型能理解的提示”。约束越具体输出越可用。另一个取舍是因子复杂度与可解释性。模型可以生成非常复杂的公式嵌套多层运算但复杂不等于有效。实测中表现最好的 BSForce 公式只有三行逻辑清晰到可以手算验证。反而是一些嵌套了五六层的因子回测表现平平且难以判断失效原因。我一般会优先选择逻辑链短、变量少的因子因为这类因子在样本外更稳健失效时也更容易归因。验证习惯上从那以后我每次拿到模型生成的因子都强制走一遍固定流程先检查字段名和公式语法再跑 IC 和分组测试然后看多空单调性和多头超额最后做分年度和分市值组的稳健性检验。任何一步不通过就回到提示阶段重新约束而不是直接调参数硬拟合。这套流程看起来繁琐但能过滤掉大部分“看起来很美”的因子省下大量无效回测时间。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?