ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ChatGPT量化因子挖掘实战:提示工程与高频选股因子流水线

ChatGPT量化因子挖掘实战:提示工程与高频选股因子流水线 简介这是一份面向金融工程与量化投资研究者的专题报告聚焦如何借助ChatGPT这一大语言模型挖掘高频选股因子。报告从大语言模型演进与RLHF机制讲起系统梳理提示工程的角色、任务、指令公式及思维链提示技巧并以因子挖掘为实战场景展示价量变异系数因子与买卖盘力量因子的构建与测试过程最终给出中证1000指数增强策略的回测结果与风险提示。资源包为单个PDF文件大小约2.16MB内容完整、结构清晰涵盖模型原理、提示方法、因子测试与策略回测等模块。目前已有247人学习下载适合希望将AI工具引入量化研究、提升因子挖掘效率的中高级从业者参考也可帮助读者理解ChatGPT在代码生成与策略构建中的能力边界与使用注意事项。1. 一份把 ChatGPT 拉进量化因子挖掘流水线的实战报告第一次看到这份《Alpha掘金系列之五如何利用ChatGPT挖掘高频选股因子》的时候我下意识觉得又是蹭大模型热度的标题党。直到翻到第 12 页那张买卖盘力量因子的多空净值曲线——日频多空夏普 4.51、多头年化超额 17.29%我才意识到这份报告真正值钱的地方不是ChatGPT 能写因子这个结论而是它把提示工程Prompt Engineering当成一条可复现的因子生产流水线来拆从角色设定、任务约束、指令细化到思维链提示Chain-of-Thought Prompting逐步纠偏最后落到中证 1000 指数增强策略上单边千分之二手续费下年化超额 7.17%、信息比率 0.57。它适合已经会写因子回测、但苦于因子同质化、想从高频委托价委托量里挖新东西的量化从业者也适合想搞清楚大模型提示词工程到底怎么落到实盘研究的人。下面我按自己复现这套流程的顺序把能抄的部分和翻车的地方都摊开讲。2. 提示工程落到因子挖掘角色、任务、指令三段式怎么设2.1 为什么标准提示公式必须先立住报告里反复强调的提示公式是作为一个【角色】按照这些指示生成【任务】【指令】。很多人第一次用 ChatGPT 挖因子直接甩一句给我一个选股因子得到的往往是动量、反转、换手率这类烂大街的东西。原因很简单模型没有角色约束就会从训练语料里最频繁出现的因子模板里采样出来的必然是大众货。角色设定的本质是给模型一个先验分布。当你写作为一名资深的量化研究员模型会激活语料里与量化研究相关的表达模式当你进一步写该因子必须具有原创性、有逻辑支撑、且业绩表现优异模型就开始在原创这个约束下搜索更冷门的组合方式。报告里图表 3 到图表 5 的演进过程就是这个逻辑第一版给的是泛泛的因子第二版限定数据字段后模型正确用上了逐笔成交数据第三版模型开始参考文献做变形组合。任务部分要写清楚生成什么指令部分要写清楚遵守什么。我一般会把指令拆成硬约束和软约束两类硬约束是数据范围比如只能用委托价和委托量、计算频率日频还是周频、是否允许降频软约束是逻辑合理性、横截面可比性、单调性预期。硬约束写死软约束留给模型发挥这样出来的因子既有创新性又不至于跑偏到没法回测。2.2 思维链提示怎么把 IC 指标的坑逼出来报告里最精彩的一段是 2.3 节用思维链提示让 ChatGPT 自己发现 IC 指标的缺陷。背景是两个因子 IC 值分别是 0.22 和 0.25但 IC 低的那个多头表现反而更好IC 高的那个多头组最差。这是 IC 作为秩相关系数的天然盲区——它只看整体单调性不看分组贡献。直接问怎么改进 IC 指标ChatGPT 给不出有价值的答案。但用思维链提示分步引导后模型先给出每组内分别计算 IC 再求均值的方案逻辑有漏洞直接指出漏洞后模型修正为计算加权平均 IC再提示 A 股做空限制模型最终给出给做多组赋予更高权重的答案。这个过程说明思维链提示不是让模型一次给对而是通过多轮纠偏把模型的推理链逼到正确方向。实操上我一般这样组织思维链提示你是一名资深量化研究员。请按以下步骤思考每步只输出该步结论 第一步IC 指标秩相关系数在什么情况下会失效举一个具体数值例子。 第二步如果两个因子 IC 相同但分组收益差异很大说明 IC 忽略了什么信息 第三步在 A 股无法自由做空的约束下改进 IC 指标应该偏向哪一端 第四步给出一个可计算的加权 IC 公式并说明权重怎么定。这段提示的关键是每步只输出该步结论防止模型跳步。参数上温度temperature建议调到 0.3 以下减少随机性如果平台支持开启逐步推理模式。注意思维链提示对数学推理类任务提升明显但对纯创意生成类任务反而会限制发挥因子挖掘属于前者所以适用。2.3 把提示词固化成可复用的因子生成模板报告里 ChatGPT 生成的因子不是一次成型的而是经过多轮提示迭代。我一般会把最终有效的提示词固化成模板方便批量生成候选因子# 因子生成提示词模板Python 字符串拼接 FACTOR_PROMPT_TEMPLATE 作为一名资深的量化研究员请生成一个选股因子。 【数据范围】只能使用以下字段{allowed_fields} 【计算频率】{frequency} 【硬性要求】 1. 因子必须具有原创性不能是动量、反转、换手率、市值等常见因子 2. 因子必须有明确的经济逻辑支撑用一句话说明逻辑 3. 因子计算过程必须可复现给出完整公式 4. 如果涉及降频说明降频方法均值/中位数/加权。 【输出格式】 - 因子名称 - 经济逻辑 - 计算公式 - 降频方法 # 调用示例限定高频委托数据 prompt FACTOR_PROMPT_TEMPLATE.format( allowed_fields委托价bid/ask、委托量bidvol/askvol, frequency日频可降为周频 )这段模板的逻辑是把报告里散落在图表 3 到图表 5 的提示要点结构化。参数说明allowed_fields控制数据边界防止模型用上你拿不到的字段frequency控制调仓频率预期输出格式固定成四段方便后续解析。我一般会跑 20 到 30 次生成挑出逻辑自洽的 5 到 8 个进回测命中率大概两三成——这个比例已经比人工拍脑袋想因子高不少了。3. 两类因子的构建与回测从变异系数到买卖盘力量3.1 周频变异系数因子IC 好看但多头拉胯的典型报告 3.1 节让 ChatGPT 在中低频量价数据上生成因子模型给出的是价格变异系数和成交量变异系数相乘的组合因子。变异系数的定义是标准差除以均值衡量的是相对波动。模型的原意是价格波动越低、成交量波动越低股票越好这符合低波动异象。构建公式如下import numpy as np import pandas as pd def build_cv_factors(df, window5): 构建变异系数因子 df: 包含 close收盘价、volume成交量的日频数据按股票分组 window: 滚动窗口报告用 5 日 # 价格变异系数 LI std(price) / mean(price) df[LI] df.groupby(stock)[close].transform( lambda x: x.rolling(window).std() / x.rolling(window).mean() ) # 成交量变异系数 VLI std(vol) / mean(vol) df[VLI] df.groupby(stock)[volume].transform( lambda x: x.rolling(window).std() / x.rolling(window).mean() ) # 组合因子 df[LIxVLI] df[LI] * df[VLI] df[LI2VLI] df[LI] / df[VLI] return df参数说明window5对应报告里的 5 日滚动groupby(stock)保证每只股票独立计算避免横截面污染。回测区间报告用的是 2016 年至 2022 年 8 月中证 1000 成份股周度调仓每周初开盘价买入、每周最后交易日收盘价卖出。结果报告图表 17 和 19 写得很清楚四个因子 IC 的 T 值都大于 2IC 均值从 2.79% 到 5.36%但多头组合年化超额收益最高只有 VLI 的 2.75%LI 甚至是 -1.09%。这就是典型的IC 好看但多头拉胯——因子整体单调性有但多头端不够强说明因子的预测能力集中在空头端而 A 股做空受限实际用不上。这个坑我在复现时也踩过后面第 5 章会专门讲怎么排查。3.2 高频买卖盘力量因子委托价委托量怎么变成选股信号报告 3.2 节是整篇的核心。限定 ChatGPT 只能用委托价和委托量用思维链提示引导模型给出买卖盘力量因子。原始逻辑是买盘力量等于买量乘以买价相对中间价的偏离卖盘力量等于卖量乘以卖价相对中间价的偏离两者相减再除以两者之和做标准化。构建公式def build_force_factors(tick_df): 构建买卖盘力量因子 tick_df: 3 秒快照数据含 bid_price前十档买价、bid_vol、 ask_price前十档卖价、ask_vol、price最新价 # 前十档买价均值、买量均值 bid_price_mean tick_df[bid_price].mean(axis1) bid_vol_mean tick_df[bid_vol].mean(axis1) ask_price_mean tick_df[ask_price].mean(axis1) ask_vol_mean tick_df[ask_vol].mean(axis1) price tick_df[price] # 买盘力量买量 * (1 - 买价/最新价) BForce bid_vol_mean * (1 - bid_price_mean / price) # 卖盘力量卖量 * (卖价/最新价 - 1) SForce ask_vol_mean * (ask_price_mean / price - 1) # 买卖盘力量差异标准化到 [-1, 1] BSForce (BForce - SForce) / (BForce SForce 1e-8) return BForce, SForce, BSForce参数说明1e-8是防止分母为零的极小量前十档取均值是报告的做法也可以改成加权越靠近盘口权重越高但报告没写我一般保持均值。每个交易日对每只股票求均值得到日频因子。回测结果报告图表 22 和 24日频下 BSForce 的 IC 均值 1.13%、T 值 7.00多空夏普 4.51、多头年化超额 17.29%SForce 的 IC 均值 -1.02%、T 值 -2.87多头年化超额 6.57%BForce 的 IC 不显著但多头年化超额 11.17%。注意 BSForce 衰减极快第二天基本失效所以报告降到周频只测 BForce 和 SForce多头年化超额分别是 9.77% 和 10.20%。3.3 中证 1000 指数增强策略的落地参数报告最终用卖盘力量因子构建中证 1000 指数增强策略单边千分之二手续费下年化超额 7.17%、信息比率 0.57。这个数字不算惊艳但考虑到是纯高频因子降频后的结果且只用了委托价委托量两个维度已经能说明问题。策略落地的关键参数我整理成表参数项报告取值说明股票池中证 1000 成份股小盘股高频因子有效性更高调仓频率周频日频成本太高周频平衡收益与成本买入价格每周首个交易日开盘价避免用收盘价造成前视偏差手续费单边千分之二报告明确假设因子SForce卖盘力量BSForce 衰减太快周频失效年化超额7.17%扣费后信息比率0.57超额收益/跟踪误差这里有个容易忽略的点报告用的是每周第一个交易日开盘价成交而不是收盘价。很多人回测图省事用收盘价会高估收益因为因子在收盘时已经包含了当天信息。开盘价成交更接近实盘但要求你在开盘前就完成选股实操上一般用前一交易日收盘后的数据算因子次日开盘执行。4. 避坑与排查ChatGPT 因子挖掘的五个血泪教训4.1 现象模型给的因子公式字段名对不上原因ChatGPT 训练语料里的字段命名五花八门它不知道你的 tick 数据具体叫什么。报告图表 20 到 21 里模型给的公式用的是通用命名直接套你的数据会报 KeyError。解决在提示词里显式列出你的字段名比如买价字段名为 bid_price_1 到 bid_price_10。我一般会把数据字典直接贴进提示词让模型照着字段名写公式。这一步不做后面全是玄学报错。4.2 现象因子 IC 显著但多头超额为负原因报告 3.1 节的变异系数因子就是典型。IC 衡量的是整体秩相关如果因子在空头端区分度远高于多头端IC 会显著但多头赚不到钱。A 股做空受限空头端的预测能力用不上。解决回测时不要只看 IC必须看十分位分组的多头组超额和单调性。我一般会画分组收益柱状图如果多头组不是最高或次高这个因子直接放弃。报告里 LI 因子 IC 均值 -5.36%、T 值 -8.07看着很显著但多头年化超额 -1.09%就是这个问题。4.3 现象高频因子日频很强降周频就失效原因报告里 BSForce 日频多空夏普 4.51但衰减极快第二天基本失效。高频因子的信息半衰期短降频时如果用简单均值会把有效信息平均掉。解决降频方法要选对。报告对 BForce 和 SForce 降周频用的是均值效果尚可但 BSForce 因为衰减太快均值也救不回来。我一般会试三种降频均值、中位数、最后一天值看哪种 IC 衰减最慢。如果三种都救不回来说明因子本身不适合周频别硬降。4.4 现象ChatGPT 给的代码能跑但结果不对原因报告明确提醒使用时需要注意代码细节确保其符合实际需求。模型给的代码常见问题包括rolling 窗口没按股票分组、除零没处理、买卖方向搞反、标准化用了全样本而非横截面。解决模型给的代码必须逐行审。重点查四处groupby 有没有、除零有没有保护、买卖方向对不对、标准化是时序还是横截面。我一般会让模型逐行解释代码解释过程中它自己就能发现逻辑漏洞。报告说对模型所给代码进行微调可以大幅提升研究效率这个微调不是改语法是改逻辑。4.5 现象同一提示词多次运行结果差异大原因ChatGPT 本身有随机性报告风险提示第一条就写了模型具有一定的随机性在部分情况下可能回答错误。温度参数、采样策略都会影响输出。解决把温度调到 0.2 到 0.3同一提示词跑 5 次以上取逻辑自洽且能回测通过的。我一般会建一个候选因子池每次生成都存进去回测后按 IC、多头超额、换手率三个维度排序。不要指望一次生成就能用报告里的买卖盘力量因子也是多轮引导后才成型的。5. 进阶技巧把提示词工程固化成因子流水线复现完整份报告后我最大的体会是ChatGPT 挖因子的价值不在于它一次能给出多好的因子而在于它能把想因子这个环节的试错成本压到极低。以前一个研究员一周能想 3 到 5 个因子现在用提示词模板批量生成一天能出 20 到 30 个候选回测筛完剩 5 到 8 个效率提升是实打实的。我现在的做法是把整条流水线拆成四段每段都有固定的提示词模板和验收标准阶段提示词要点验收标准因子生成角色数据范围原创性约束输出格式逻辑自洽公式可复现代码生成贴数据字典要求逐行注释能跑通字段名对得上逻辑审查让模型自己找漏洞思维链纠偏无前视偏差无除零回测筛选不依赖模型纯量化流程IC T 值2多头超额5%最后一段回测筛选必须脱离 ChatGPT用你自己的回测框架跑。报告里所有因子测试结果都是通过历史数据统计、建模和测算完成模型只负责生成想法验证必须靠数据。这一点想清楚就不会被模型的自信回答带偏。还有一个细节报告里 ChatGPT 生成的因子明显参考了现有文献比如变异系数因子对应低波动异象买卖盘力量因子对应订单流不平衡。模型的原创本质是已有知识的变形组合所以提示词里限定参考但变形比限定完全原创更实际。我一般会写在现有因子基础上做变形或组合说明参考了哪类逻辑这样出来的因子既有新意又有理论支撑。从那以后我每次用大模型生成因子都强制走一遍生成→代码→审查→回测四段流水线任何一段没过就不进候选池。这套流程帮我挡掉了至少一半看着漂亮但一测就废的因子。希望帮到你。本文还有配套的精品资源点击获取
返回列表