
简介这份国金证券金融工程专题报告《Alpha掘金系列之五如何利用ChatGPT挖掘高频选股因子》面向量化研究员、因子投资从业者及对AI辅助投研感兴趣的进阶读者系统探讨大语言模型在量化选股中的落地路径。报告从ChatGPT的Transformer架构、Scaling Law与RLHF训练机制讲起进而介绍提示工程的基本公式与思维链提示技巧并重点展示因子挖掘实战由模型生成的价量变异系数因子、买卖盘力量因子以及日频多头年化超额收益17.29%、周频9.77%至10.20%、中证1000指数增强策略年化超额7.17%等回测结果同时提示代码微调与模型随机性风险。资源为单个PDF文件压缩包约2.16MB已有248人学习。读者可借此理解AI生成因子的完整研究框架、测试指标与策略构建思路适合作为量化因子挖掘与提示工程结合的参考材料。1. 大模型挖因子为什么会聊天的模型能生成有效选股信号一个反直觉的事实是ChatGPT 从未见过任何 A 股 tick 数据却能在限定委托价 委托量的条件下给出一个日频多头年化超额 17.29% 的买卖盘力量因子。这不是玄学而是大语言模型把语言中的关系推断迁移到了金融变量间的关系推断上。传统因子挖掘依赖研究员遍历财报、量价、高频数据库手工试错而 LLM 通过 Transformer 的自注意力机制对输入序列的不同部分动态分配权重本质上是在做一种跨域的关系建模。当你在提示里把委托价委托量买卖盘失衡这些概念以自然语言描述清楚模型就能基于预训练阶段积累的金融文本知识组合出一个逻辑自洽的因子表达式。这背后的关键不是模型懂金融而是它懂结构——它知道什么样的变量组合在逻辑上能衡量一种市场力量。搞懂这条链路你才能判断哪些因子是模型真正想出来的哪些只是它在复述训练语料里的旧结论。2. 从 LSTM 到 Transformer自注意力到底改变了什么2.1 传统 LSTM 的两个硬伤在 Transformer 出现之前量化研究员用 LSTM 处理序列数据时长期受困于两个问题。第一LSTM 对序列中每个词的权重是隐式且均匀衰减的它无法显式地告诉模型这个词比那个词重要 10 倍。第二长距离依赖会随着时间步拉长而信息丢失一个 200 步之前的委托量突变传到第 200 步时几乎被遗忘。这两个缺陷在金融场景里是致命的高频数据里开盘前 30 分钟的委托簿形态往往比收盘前 5 分钟更能预测次日收益但 LSTM 记不住这种远距离的结构性差异。2.2 自注意力的权重分配逻辑Transformer 的解法是自注意力机制。它把输入序列的每个位置映射成 Query、Key、Value 三个向量然后用 Query 和 Key 的点积计算任意两个位置之间的关联强度再对 Value 加权求和。这意味着模型可以同时看到序列的所有位置并且为每个位置动态计算一个权重。用金融语言说模型自己学会了哪个时间片的委托量变化对当前预测最重要。# 自注意力的核心计算简化版帮助理解权重分配 import numpy as np def scaled_dot_product_attention(Q, K, V): # Q, K, V 形状: (seq_len, d_k) d_k Q.shape[-1] # 计算任意两个位置之间的关联分数 scores np.dot(Q, K.T) / np.sqrt(d_k) # softmax 归一化为权重突出重要位置 weights np.exp(scores) / np.exp(scores).sum(axis-1, keepdimsTrue) # 加权求和得到输出 output np.dot(weights, V) return output, weights这段代码里scores矩阵的每个元素代表位置 i 对位置 j 的关注程度weights经过 softmax 后变成概率分布。关键参数是d_k即每个注意力头的维度——维度越大模型能区分的模式越细但计算量也平方级增长。金融序列里d_k通常设得比 NLP 任务小因为 tick 数据的有效模式维度远低于自然语言。2.3 参数规模与涌现现象GPT-1 只有 1.17 亿参数GPT-2 跳到 15 亿GPT-3 达到 1750 亿。参数量的提升不是线性增益而是触发了涌现——当参数超过某个阈值模型突然获得了训练目标里没显式要求的能力比如算术推理、代码生成、逻辑链推导。对因子挖掘而言这意味着模型能在没有见过特定因子公式的情况下基于对波动率流动性买卖失衡等概念的语义理解组合出一个数学上合理的新表达式。这不是检索是生成。3. 提示工程怎么把闲聊模型逼成因子工厂3.1 角色、任务、指令的三段式约束直接问 ChatGPT给我一个选股因子它会给你一个泛泛的动量或反转因子毫无新意。有效的提示必须包含三个元素角色你是资深量化研究员、任务生成一个高频选股因子、指令限定数据范围为委托价和委托量要求原创性。角色设定不是玄学它通过激活模型预训练语料中与量化研究员相关的文本分布把生成空间收窄到专业领域。指令越具体模型的输出越接近可执行的因子表达式。3.2 思维链提示让模型暴露推导过程思维链提示的核心是要求模型逐步思考。在因子挖掘场景里这比直接要答案有效得多。比如当你问如何改进 IC 指标模型可能给出一个泛泛的答案但如果你引导它先分析 IC 指标的缺陷相同 IC 值下多头表现可能截然相反再推导解决方案分组加权计算 IC它就能给出给多头组更高权重的具体建议。这个过程中模型实际上是在做一种结构化的逻辑推演而推演路径本身就可以被研究员复用为因子改进的思路。3.3 提示的边界模型会生搬硬套需要警惕的是ChatGPT 的训练语料里包含大量学术论文和研报它给出的因子有时是已有文献的变形或组合。比如变异系数因子模型在收盘价和成交量上分别计算变异系数再相乘逻辑上衡量了波动性和流动性但 IC 表现好而多头超额低说明它没有真正理解 A 股做空限制对因子多头端的影响。提示工程能引导模型纠偏但无法根除这种知识拼接的倾向。研究员的价值在于判断哪些输出是真正的新结构哪些只是旧因子的排列组合。4. 买卖盘力量因子从自然语言到 tick 数据的落地链路4.1 因子公式的数学结构模型给出的买卖盘力量因子核心逻辑是衡量买卖双方的力量失衡。买盘力量定义为买入委托量乘以买入价相对均价的偏离卖盘力量类似但方向相反最终差异因子做标准化处理# 买卖盘力量因子构建基于 3 秒快照的前十档数据 def build_bs_force(bid_vol, bid_price, ask_vol, ask_price, avg_price): # 买盘力量委托量越大、买价越高于均价力量越强 b_force bid_vol * (1 - bid_price / avg_price) # 卖盘力量委托量越大、卖价越高于均价卖压越强 s_force ask_vol * (ask_price / avg_price - 1) # 标准化差异保证横截面可比 bs_force (b_force - s_force) / (b_force s_force) return b_force, s_force, bs_force这里的关键参数是avg_price通常取当日成交均价或前收盘价。标准化步骤(B-S)/(BS)是必须的否则不同股票的委托量量级差异会让因子失去横截面可比性。模型最初给出的版本没有这一步是研究员根据逻辑合理性补上的——这说明 LLM 能给出结构但细节修正仍需人工介入。4.2 日频表现与衰减问题在 2016 年至 2022 年 8 月的中证 1000 成分股上日频调仓下 BSForce 因子的 IC 均值为 1.13%T 统计量 7.00多空夏普比率 4.51多头年化超额 17.29%。但因子衰减极快第二天基本失效。这不是因子本身的问题而是高频数据的固有属性委托簿信息反映的是极短期的供需失衡隔夜后信息被市场消化。要用于实际策略必须降频。4.3 降频到周频的取舍将买盘和卖盘力量因子分别降至周频后多头年化超额分别为 9.77% 和 10.20%但多空单调性一般。最终选择卖盘力量因子构建中证 1000 指数增强策略在单边千分之二手续费下年化超额 7.17%信息比率 0.57。这个结果说明高频因子的降频使用是一种用信息衰减换交易可行性的妥协。降频后因子仍有效但强度下降需要靠组合优化和风险控制来弥补。5. 避坑与排查用 LLM 做因子研究时最容易翻车的几个点5.1 现象模型给出的因子代码跑不通原因ChatGPT 生成的代码常引用不存在的库函数或假设了错误的数据结构比如把 tick 数据的字段名写成通用名称而非实际接口名。解决把代码当作伪代码逐行核对数据接口重点检查字段名、时间戳对齐和缺失值处理。5.2 现象因子 IC 很高但多头超额为负原因模型倾向于生成在全样本上统计显著的因子但 A 股做空受限空头端的收益无法获取。IC 衡量的是单调性多头超额衡量的是实际可交易收益两者可能背离。解决在提示中明确加入考虑 A 股做空限制多头组表现优先的约束并在回测时单独看多头组合。5.3 现象同一提示多次运行得到不同因子原因LLM 的采样过程有随机性temperature 参数越高输出越发散。解决把 temperature 调低如 0.2或对同一提示多次采样后取逻辑最自洽的版本再手工修正。5.4 现象因子逻辑听起来合理但回测毫无效果原因模型可能把两个弱相关变量强行组合逻辑叙述上自洽但数学上无预测力。解决先做单变量 IC 测试确认每个分量因子有独立预测力再测试组合因子避免故事驱动而非数据驱动。5.5 现象降频后因子完全失效原因高频因子的预测力集中在极短窗口降频相当于对噪声做平滑信号被稀释。解决降频时不要简单取均值尝试用衰减加权或只取特定时间片如开盘后 30 分钟的委托簿快照保留信息浓度最高的部分。6. 设计取舍LLM 在量化研究里的边界与验证方法把 ChatGPT 引入因子挖掘本质上是在做一种知识迁移的实验。它的优势在于跨域组合能力——能把 NLP 里的注意力机制、金融里的委托簿理论、统计里的 IC 检验用自然语言串成一条可执行的链路。但它的边界同样清晰模型没有市场微观结构的先验不知道 A 股 T1 和做空限制对因子多头端的扭曲也不理解交易成本对高频策略的吞噬效应。这些常识必须由研究员通过提示注入或后处理补全。验证一个 LLM 生成的因子是否值得深挖我一般会走三步。第一步逻辑审查因子的经济学解释是否成立变量之间是否存在伪相关。第二步单变量测试每个分量因子的 IC、T 统计量、多空单调性是否独立显著。第三步降频与成本压力测试在目标调仓频率和实际手续费下多头超额是否仍为正。这三步走完才能判断一个因子是模型编的故事还是数据里的信号。从这份资源里的完整测试链路看买卖盘力量因子之所以能落地不是因为模型多聪明而是因为研究员在提示里限定了数据范围、在回测里修正了标准化步骤、在策略构建时选择了卖盘力量而非差异因子因为后者衰减太快。LLM 提供的是候选因子的粗胚打磨成可交易信号的过程仍然依赖对市场机制的理解。从那以后我每次用 LLM 生成因子都强制走一遍逻辑审查 → 单变量测试 → 成本压力测试的流程绝不跳过任何一步。希望帮到你。本文还有配套的精品资源点击获取