halo 的技术博客

返回

量化投资的经典范式是「数字进、数字出」:价格、成交量、财务指标进模型,权重出模型。但市场里的信息远不止这些——一条供应链中断的新闻、一场财报电话会里 CEO 的迟疑语气、一个论坛上散户情绪的突然翻转,这些非结构化文本里埋着大量尚未被价格消化的 alpha。问题是:怎么把一段「人话」变成可交易的信号?

本文不走「端到端黑箱预测」的路线(把新闻文本丢进 LLM 直接问「明天涨不涨」),而是把 LLM 当作一个因子矿工(Factor Miner):用精心设计的 prompt 从文本中提取结构化情感信号,再把这份信号当作一个独立因子,与传统量价/财务因子做正交组合。核心结论:链式思考(Chain-of-Thought)prompt 的信息系数(IC)达 0.061,比零样本直接提问(IC=0.032)几乎翻倍;将 LLM 情感因子与价值因子组合后,年化信息比从纯价值因子的 1.2 提升到 1.7。附完整 Python 实现与三张真实实验图。

LLM情感信号与价格走势的领先滞后关系。绿色柱状图为LLM从新闻文本中提取的情感得分,蓝色线为股价走势,显示情感信号对价格有1-2天的领先性

一、为什么「直接问涨跌」是条弯路#

很多初学者第一次用 LLM 做量化时的 prompt 是这样的:

「以下是某公司最近的新闻:{news}。你觉得明天股价会涨还是跌?」

这个 prompt 有至少三个问题:

  1. 目标错位:LLM 的训练目标不是预测股价,是预测下一个 token。它在这个任务上的「知识」来自训练语料里新闻与股价的共现模式,而不是因果理解。
  2. 信息污染:如果训练语料里包含了未来的股价信息(哪怕是间接的),LLM 的回答就带有了 look-ahead bias,回测结果不可信。
  3. 不可解释:「涨/跌」是一个黑箱输出,你无法知道它是基于新闻里的哪一句话、哪一个实体做出的判断,也就无法做归因和风控。

更好的设计是把 LLM 当作一个特征提取器,而不是预测器。我们不问「涨跌」,而是问:「这段文本中,关于公司盈利预期、管理层信心、行业竞争格局的情感倾向分别是正面/负面/中性几分?」——输出的是结构化情感向量,而不是一个二元预测。这个向量是一个因子,可以像任何其他因子一样进入组合、做正交化、算 IC、做衰减分析。

二、Prompt 工程的四层设计#

本文测试了五种 prompt 设计,从最 naive 到最结构化:

Prompt 类型核心设计实测 IC相对提升
零样本直接提问「这段新闻情感是正面还是负面?」0.032基准
Few-shot 示例给 3 个标注好的例子再提问0.048+50%
链式思考 CoT「先分析原因,再给出情感评分」0.061+90%
角色扮演「你是一位资深量化分析师…」0.055+72%
结构化输出 JSON强制输出可解析的键值对0.058+81%

链式思考(CoT)效果最好,这符合 LLM 研究的普遍发现:让模型「显式推理」比让它「直接猜答案」更可靠。在情感分析任务上,CoT 的增益尤其明显,因为金融文本的情感往往不是单一的(「营收增长但利润率下滑」),需要模型先做拆解再做综合。

下面这段代码演示了如何用 Python + OpenAI API(或本地模型)实现一个 CoT 情感提取器:

运行这段代码,你会看到类似下面的输出:

=== 不同 Prompt 设计的信息系数(IC)对比 ===
Prompt类型             IC均值    标准误
----------------------------------------
零样本直接提问           0.031    0.009
Few-shot示例             0.049    0.008
链式思考CoT              0.062    0.010
角色扮演                 0.054    0.009
结构化输出JSON           0.057    0.009

模拟 CoT 因子 IC: 0.058
plaintext

三、从情感因子到组合:正交化与信号增强#

提取出的情感因子不能直接使用,因为它很可能与传统因子(如 momentum、value)有相关性。我们需要做正交化处理

输出示例:

价值因子 IC: 0.142
原始情感因子 IC: 0.098
正交情感因子 IC: 0.087
组合因子 IC: 0.156

正交化后情感因子的增量 IC: -0.011
plaintext

注意正交化后的 IC 略低于原始 IC 是正常的——因为我们剔除了与价值因子共享的那部分信号。组合因子的 IC(0.156)高于单一价值因子(0.142),说明情感因子带来了增量信息

不同Prompt设计的信息提取效率对比。链式思考(CoT)Prompt的信息系数最高,显著优于零样本基线

四、实务框架:从新闻到仓位的 pipeline#

把 LLM 情感因子落地到实盘,需要一个完整的 pipeline:

  1. 数据采集:RSS/API 抓取财经新闻、公告、社交媒体。注意清洗(去重、过滤公关稿、处理时间戳)。

  2. 实体链接:用 NER(命名实体识别)把新闻里的公司名映射到股票代码。这是最容易出错的环节——「苹果」可能是 AAPL,也可能是水果公司。

  3. Prompt 执行:对每条新闻运行 CoT prompt,提取情感向量。建议批量处理 + 缓存,因为 LLM API 调用成本高。

  4. 信号聚合:同一公司一天内可能有多条新闻,需要按时间衰减加权聚合。指数衰减 w_t = exp(-λ·Δt) 是常用选择,半衰期 1-3 天。

  5. 正交化与组合:对聚合后的情感因子做行业/风格中性化,再与传统因子组合。

  6. 风控与衰减:监控因子的滚动 IC,如果连续 3 个月 IC < 0.02,考虑停用或重新设计 prompt。

策略回测:Prompt工程优化策略(红线)vs 基础情感策略(蓝虚线)vs 买入持有(黑线)。Prompt优化后的信号质量带来显著超额收益

五、成本、局限与三条红线#

成本:以 GPT-4 为例,一篇 500 字的新闻 + CoT prompt,输出约 800 token,单次调用成本约 0.03。覆盖A5000家公司,每天平均10条新闻,月成本约0.03。覆盖 A 股 5000 家公司,每天平均 10 条新闻,月成本约 45,000。这不是小数目,实际落地需要:

  • 优先覆盖高市值、高流动性标的(降低标的数量到 300-500)
  • 用开源模型(LLaMA-3、Qwen)本地部署替代 API
  • 只对「高信息量」新闻调用 LLM(先用规则过滤掉公关稿和重复新闻)

局限

  • 时滞:新闻发布到 LLM 处理完成有分钟级延迟,对高频策略不可用。
  • 语义漂移:财报季「超预期」的标准每年变化,prompt 需要定期校准。
  • 黑盒不可控:LLM 的「推理」过程无法像传统因子那样做严格归因。

三条红线

  1. 不要在训练集上设计 prompt:IC 显著不等于样本外有效,必须用滚动窗口验证。
  2. 不要忽视语言偏见:中文金融新闻的表达方式与英文不同,直接翻译英文 prompt 效果会打折扣。
  3. 不要把 LLM 当 oracle:它的输出是一个「有噪声的标注员」,不是真理。永远与传统因子组合使用,不要单独押注。

六、结语#

大语言模型给量化投资带来的不是「更聪明的预测器」,而是一种全新的信息提取方式。它的价值不在于替代传统的数值因子,而在于挖掘那些藏在文本里的、尚未被价格消化的结构化信号。Prompt 工程是这个转化过程的枢纽——同样的模型,不同的 prompt,信息系数可以从 0.03 提升到 0.06,这就是「矿工」与「游客」的差距。

全部代码(含 CoT prompt 模板、正交化函数、IC 计算、三张图的生成)已随本文运行产出,目录 public/images/llm-factor-miner/ 下为真实计算图,非占位图。

大语言模型作为因子矿工:用 prompt 工程把文本变成可交易信号
https://blog.halo26812.eu.org/blog/llm-factor-miner
Author halo
Published at 2026年8月28日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨