本部分围绕29个日频低频量价Seed因子的LLM-MCTS迭代结果展开。实验数据为A股日频行情数据,输入字段主要包括open、high、low、close、vwap、volume、amount等量价变量;每个Seed单独作为MCTS根节点,LLM在当前节点公式、父路径、评测反馈和可用算子约束下生成候选公式,MCTS根据reward、UCT与回传结果决定后续搜索方向。后文先介绍原始Seed与算子体系,再以vstd20案例展示前两层搜索过程,最后汇总29个因子的整体改进效果。
评测口径方面,样本内区间为2019-01-01至2023-12-31,样本外区间为2024-01-01至2026-05-27;收益标签为未来5个交易日close-to-close收益,RankIC/RankIR按周度截面计算。Stage1在样本内进行LLM-MCTS搜索,股票池采用按成交额分层抽样(5组、随机种子42,主批次抽样比例20%),以降低搜索成本;Stage2将候选放回全市场,在样本内复评并在样本外验证。
本文以29个Alpha158风格低频量价Seed为起点,在给定的算子和变量中进行LLM-MCTS搜索。Seed提供初始经济假说,算子定义可改写的公式空间,大语言模型提供改进的候选因子和负责逻辑约束,从而保证候选因子可计算、可复现、可解释。
数据层面,实验仅使用日频量价字段,包括开盘价,收盘价,最高/最低价,成交均价,成交价和成交额,不引入行业、基本面、分析师预期等基本面信息,所以可以认为是低频的价量信息。
原始Seed的窗口统一为20个交易日,即公式中的%d在本实验中均取20。统一窗口有助于比较不同公式结构的改进效果,也使样本内外IC、IR的差异更多反映因子逻辑本身。
算子体系覆盖滞后、滚动统计、回归相关、条件判断、成交加权、真实波幅和分域处理等类型。LLM只能在这些算子内提出候选公式,MCTS再根据回测反馈选择扩展方向,因此搜索空间既保持开放性,也受到金融逻辑和代码语法的共同约束。
本节以vstd20为例展示LLM-MCTS的实际迭代过程。该Seed的原始公式为Std($volume,%d)/($volume+1e-12),其中%d=20,含义是用过去20日成交量标准差刻画成交量波动,再用当日成交量做归一化。它描述的是成交活跃度的不稳定性,但由于分母依赖当日成交量,容易受到单日放量或缩量扰动。
因此,vstd20的优化不是脱离原始逻辑重新造因子,而是围绕“成交量不稳定、资金流冲击、量价确认、分域标准化”逐步展开。LLM负责提出符合该逻辑的候选公式和经济解释,MCTS负责根据真实评测分数与UCT机制决定继续深挖哪条路径。
整个搜索过程可以概括为“选择、扩展、评测、回传”。选择阶段由MCTS根据UCT选择当前最值得扩展的节点;扩展阶段由LLM根据Seed逻辑、历史路径和允许算子提出候选;评测阶段计算RankIC、RankIR、覆盖率、换手、多样性和过拟合惩罚;回传阶段更新节点visits与best_reward,影响下一轮搜索。
具体到数值计算,MCTS使用mcts_reward衡量单个候选本身的质量,再用UCT决定下一轮从哪个节点继续扩展。reward是候选的静态评测分数,UCT是在reward基础上加入访问次数惩罚后的路径选择分数。两者的区别在于:reward回答“这个公式好不好”,UCT回答“下一步还要不要继续沿这条路径试”。
第一层优化从root开始。此时搜索树没有子节点,MCTS必然选择root扩展;LLM收到原始公式后,围绕成交量不稳定这一主线生成5条方向:分母稳健化、价量同步、单位成交量冲击、成交确认和分域标准化。其中vstd2mean将分母从当日成交量改为20日均量,保留原逻辑但显著提升稳定性,因此成为第一层胜出分支。
以第一层胜出的vstd2mean为例,它的absRankIC=0.0437、absRankIR=0.5879。虽然absRankIC仍略低于0.05的目标中心,但已远高于原始seed;同时该公式覆盖率高、过拟合惩罚低、与已有有效候选不重复,因此reward达到第一层最高。
第二层优化不再从原始Seed出发,而是沿vstd2mean继续扩展。LLM在“成交量变异系数更稳健”这一局部结论上继续提出5个候选:价量相关交互、成交额变异系数、成交额分域标准化、隔夜跳空尺度和价格波动压缩。这一层展示了LLM的核心作用:它不是随机拼接算子,而是沿已验证的节点逻辑继续提出可解释的经济假说。
第二层中amount_cv的absRankIC=0.0491、absRankIR=0.6490,已经显示出很强的候选价值;但它与vstd2mean同属“变异系数”结构,diversity_score只有0.0249,因此搜索阶段reward被多样性项压低。相比之下,vol_cv×price_volume_corr的IC/IR略弱,但多样性更高,reward反而略高。这说明Stage1的MCTS并非只按IC/IR排序,而是在有效性、稳定性和候选差异度之间做平衡。
以第二层的vol_cv×PVCorr为例,其公式逻辑是“成交量变异系数×价量相关性”。它试图回答:成交量本身不稳定时,如果这种不稳定还伴随价格同步变化,是否意味着更强的交易冲击或情绪扰动。这个候选的absRankIC=0.0489,已经接近0.05的目标中心;但由于它与已有候选相关性较高,diversity_score只有0.3292。
第二轮结束后,vstd2mean分支已经被访问6次,探索项下降;其他第一层兄弟分支仍只访问1次,探索项较高。因此下一轮UCT不再选择当前best_reward最高的vstd2mean,而是转向vol_price_sync。这是MCTS相比贪心搜索最关键的差异:它会利用高分路径,但不会让搜索过早坍缩到单一结构。
需要注意,第二轮结束后的下一步选择发生在root层。虽然vol_cv×PVCorr在vstd2mean分支内部仍有较高节点内UCT,但MCTS必须先在root的第一层子节点之间做选择。此时vstd2mean整个分支已被访问6次,root层探索项被压低;vol_price_sync只访问1次,探索项显著更高,因此成为第三轮最终选中的扩展分支。
从最终样本外结果看,LLM在第二层提出的amount_cv方向被证明非常重要。它保留“标准差/均值”的变异系数结构,但将成交量替换为成交额,使因子从“股数成交不稳定”转为“资金规模进出不稳定”。最终代表性公式为-1*Div(Std($amount,%d),Add(Mean($amount,%d),1e-12)),样本外absRankIC提升至0.0549,absRankIR提升至0.8104,明显优于原始seed。
因此,vstd20案例展示了本文框架的完整分工:LLM提供可解释的候选方向和逻辑假说,MCTS用真实评测结果管理搜索路径,diversity与UCT防止候选过度集中,最终再通过样本外验证筛选真正稳健的改进因子。
本节从两个互补口径评估LLM-MCTS对29个日频价量Seed的整体优化效果。第一类是正式选择口径:仅根据样本内评价选择最终因子,再观察样本外表现,因而更接近真实研究流程下的可复现结论。第二类是候选池诊断口径:统计搜索过程中已经通过样本内保留条件的候选,在样本外是否存在更优解,用于衡量搜索空间中是否被LLM-MCTS挖掘出具有外推潜力的方向。
从正式选择口径看,29个Seed的最终入选因子在样本内全部优于原因子,其中19个在样本外仍优于原因子,说明该框架能够较稳定地把原始单一价量定义改造成更强的表达式。这一结果提示:样本内最优并不必然等于样本外最优,后续应进一步加强稳健性筛选、复杂度惩罚和跨样本一致性约束。
从候选池诊断口径看,564个样本内保留候选中,有425个候选在样本外也优于其对应Seed;以每个Seed的样本外最优候选观察,29个Seed均能找到样本外优于原因子的候选,其中9个Seed存在达到OOS目标线的候选。该结果说明LLM-MCTS的生成与搜索过程确实扩大了有效因子空间,但也说明最终选择规则仍需要在“不使用样本外信息”的约束下更好地识别这些稳健方向。
下表展示部分Seed的代表性候选表现,其中OOS absIC和OOS absIR分别衡量样本外周度RankIC的绝对强度和稳定性,OOS提升则表示该候选相对原因子在样本外的增量。该表的含义是:即使最终入选仍应坚持“样本内选择、样本外只验证”,所有的Seed均搜索到样本内外均显著优于Seed的因子。
本节选取std20、cntn20与rank20三个Seed。三个案例分别代表波动率改造、下跌频率逻辑重构、价格位置反转增强三类路径。它们的共同特征是:改进表达式不是简单堆叠算子,而是在LLM给出的金融假说约束下,对原始Seed的信息维度、成交确认方式或反转条件进行结构化替换。
std20:从收盘价波动率到成交确认的真实波幅
原因子刻画收盘价标准差相对价格水平,主要描述close-to-close维度的价格波动强弱。它的优点是定义简单,但只使用收盘价序列,容易遗漏日内最高价、最低价和隔夜跳空带来的真实波动。改进因子把波动率代理从“收盘价标准差”替换为“成交量加权真实波幅”,同时沿用原因子的负号方向,使因子继续表达低波动/波动冲击控制逻辑,而不是转向价格均值回复或动量逻辑。
原因子公式:
-1*Std($close,%d)/$close
改进后公式:
-1*EMA(Greater($high-$low,Greater(Abs($high-Ref($close,1)),Abs($low-Ref($close,1))))*$volume,%d)/EMA($volume,%d)/$close
因子可以先化简成:-[EMA(TrueRange*volume,d)/EMA(volume,d)]/close,即“取负后的成交量加权真实波幅占价格比例”。
其中,TrueRange=max(high-low,abs(high-Ref(close,1)),abs(low-Ref(close,1)))。high-low捕捉日内振幅;abs(high-昨日收盘价)和abs(low-昨日收盘价)捕捉隔夜跳空后最高价、最低价相对前收盘的冲击。三者取最大值后,因子不再只看收盘点位,而是尽量覆盖日内波动和隔夜缺口。
TrueRange*volume表示“有成交量参与的真实波动”。如果某天真实波幅很大但成交量很低,其权重不会被过度放大;如果大波幅同时伴随高成交量,则更可能代表真实资金冲击或市场分歧。
EMA(TrueRange*volume,d)/EMA(volume,d)是最近d日成交量加权平均真实波幅,用EMA强调近期状态,并通过除以EMA(volume,d)消除原始成交量规模差异。最后再除以close,是为了把绝对波幅转成相对价格尺度,便于不同价格水平股票之间横截面比较。
公式前面的-1保留了原因子方向:因子值越高,通常代表成交量加权真实波幅相对价格越低;因子值越低,则代表近期出现放量大波动、隔夜缺口或日内冲击更强。这里的核心不是“放量超跌”,而是用更完整的真实波幅替代收盘价标准差,并用成交量确认波动是否具有交易意义。
综合来看,该改进因子可以理解为“成交确认后的低真实波幅因子”。它保留了std20的波动率大逻辑,但把单一收盘价波动扩展为包含日内区间、隔夜跳空和成交参与度的真实波幅度量,因此比原始Std(close,d)/close更贴近市场实际承受的价格冲击。
从机制上看,std20的改进重点是把“收盘价标准差”替换为“成交量加权真实波幅”。LLM在这里提出的是波动率度量升级假说,MCTS通过样本内外评测确认该真实波幅代理是否比原始close-to-close波动更有效。
cntn20:从下跌天数到成交量加权负乖离
原因子只统计过去窗口内下跌日占比,核心信息是“下跌发生了多少次”。这种定义容易把无量阴跌、正常回调和真实资金压力混在一起,也无法区分轻微下跌与深度折价。改进因子把下跌频率逻辑重构为“成交量加权的负乖离”:价格相对均线越低、且下跌位置成交量越高,因子值越高。因此,该路径不是简单增加一个成交量项,而是把原来的计数型信号升级为强度型、资金确认型的均值回复信号。
原因子公式:
Mean($close
改进后公式:
Div(EMA(Mul(Sub(Mean($close,%d),$close),$volume),%d),EMA($volume,%d))
因子可以先化简成:EMA((Mean(close,d)-close)*volume,d)/EMA(volume,d),即最近d日“成交量加权的价格负乖离”。
其中,Mean(close,d)-close衡量当前价格低于近期价格中枢的幅度;该项为正,说明价格处在均线下方,折价越深数值越大。乘以volume后,只有伴随较高成交量的负乖离才会被显著放大;再除以EMA(volume,d),则把原始成交量规模归一化为成交量加权的平均偏离。
高因子值通常对应:价格明显低于近期均线,且这种低位偏离发生在成交量较高的阶段。它可以理解为“放量低位折价”或“有交易确认的超跌状态”,隐含逻辑是恐慌抛压、流动性冲击或资金换手后,价格存在向均值回归的可能。
低因子值或负值通常对应:价格接近或高于近期均线,或者低位偏离缺乏成交量确认。相比原始cntn20只看下跌天数,改进因子更强调“跌得有多深、是否有量、是否持续”,因此更容易过滤无量噪声和普通技术性回调。
从机制上看,cntn20的改进重点是把“下跌次数”转换成“放量负乖离强度”。LLM在这里提出的是有资金参与的超跌反转假说,MCTS则用样本内外RankIC/IR验证该假说是否真正优于原始计数逻辑。
rank20:从价格时序排名到放量反转确认
原因子用收盘价在过去窗口内的时序排名刻画相对位置,本质上是价格位置反转信号:价格越低,未来越期待均值回复。但单纯排名只描述“低不低”,并不区分低位是否伴随成交量、是否代表真实资金冲击。改进因子把价格位置信号改写为成交量加权的价格偏离,并进一步乘以当日相对成交量,强调“放量确认的低位偏离”。
原因子公式:
-1*Rank($close,%d)
改进后公式:
Mul(Mul(-1,Div(EMA(Mul(Sub($close,Mean($close,%d)),$volume),%d),EMA($volume,%d))),Div($volume,Mean($volume,%d)))
因子可以先化简成:-[EMA((close-Mean(close,d))*volume,d)/EMA(volume,d)]*[volume/Mean(volume,d)],即“取反后的成交量加权价格偏离”乘以“当日成交量放大倍数”。
其中,close-Mean(close,d)衡量收盘价相对近期价格中枢的偏离:为正表示价格高于均线,为负表示价格低于均线。乘以volume并用EMA平滑后,再除以EMA(volume,d),得到最近一段时间的成交量加权平均偏离。
公式前面的负号把方向调整为反转逻辑:如果价格在有成交量参与的情况下低于均线,原始偏离为负,取反后因子值变高。最后的volume/Mean(volume,d)是当日量能确认项,当日越放量,低位偏离或高位过热的信号越被放大。
高因子值通常对应:近期价格低于均线,低位偏离有成交量参与,且当日成交量也明显高于自身均量。这可以理解为“放量超跌”状态,可能反映短期过度反应、恐慌交易或抛压释放后的均值回复机会。
低因子值或负值通常对应:价格在放量状态下高于均线,反转视角下更像短期过热。相比原始rank20只用价格排序,改进因子同时引入偏离幅度、历史成交确认和当日成交确认,因而更强调低位信号的质量而不是单纯低位本身。
从机制上看,rank20的改进重点是把“价格处于低位”进一步约束为“放量确认的低位”。这一处理保留了原Seed的反转大逻辑,同时用成交量强度提高信号信噪比,使低位排名不再等同于无条件买入信号。