基于LLM的小市值量化框架:新闻情绪与技术信号融合实践

LLM小市值量化交易
于 2026-08-30 03:53:15 修改
·本内容遵循CC 4.0 BY-SA版权协议

从新闻情绪到交易信号:基于LLM的小市值量化框架实践解析

如果你做过小市值股票的量化研究,大概率会碰到一类很典型的困惑:技术指标在大部分时间都有效,但一旦遇到突发新闻或市场情绪转向,价格行为会瞬间脱离历史统计规律。过去我们处理这种问题,主要靠人工盯盘、事件驱动模型或简单的关键词情绪打分,但前两者成本太高,后者又过于粗糙。现在,Large Language Model的介入,让一条新的路径变得可行:让模型直接阅读新闻、理解宏观数据,再把它们和技术指标压缩成统一的交易信号。

这篇文章不打算复述“LLM很强大”这类空话,而是围绕一个具体的项目主题展开:如何构建一个由LLM驱动的小市值交易辅助框架,把金融新闻情绪、宏观经济指标与技术信号整合到一个可验证的系统中。我会把这个框架拆成数据层、LLM处理层、信号合成层和回测层,并给出可以直接参考的Python代码和工程建议。需要提前说明的是,这更多是一套研究与实践框架,不是“输入代码就能稳定盈利”的银弹;真正的难点往往不在模型调用,而在数据对齐、信号归因和回测防过拟合。

如果你正准备做类似的方向,建议先看完整体架构,再决定要从哪一层入手。下面我们从“为什么是小市值”这个问题开始。

1. 为什么小市值是LLM量化最值得先试的场景

小市值股票天然存在严重的信息不对称。机构研究覆盖少,公开研报有限,交易者更多依赖新闻、社交媒体和盘口情绪做决策。这种环境下,传统量价因子虽然仍有统计意义,但容易在消息驱动的跳空行情中失效。原因是技术指标本质上是过去价格的滞后函数,它无法在信息出现的瞬间评估“这条新闻到底有多重要”、对哪家公司影响多大、市场会按什么路径消化。

而LLM的优势恰好落在非结构化文本理解上。它可以做情绪极性判断、实体识别、事件分类、甚至根据宏观数据推断政策导向。对小市值公司来说,一条区域政策、一次行业展会、一份订单公告,都可能成为短期价格的重要驱动。传统关键词匹配无法区分“合同纠纷败诉”和“合同中标公告”的差别,但LLM在语义层面可以做到。

更关键的是,小市值股票的数据量相对集中,新闻数量远少于大盘蓝筹,这使得我们可以在有限成本内完成全文级分析,而不需要像处理全市场新闻那样做高成本抽样。也就是说,小市值场景是LLM从“概念演示”走向“可回测策略”的一个比较现实的切入口。

当然,小市值也有自己的麻烦:流动性差、冲击成本高、财务数据容易造假、涨跌停和停牌规则会改变收益分布。所以,把LLM接入交易系统之前,必须先想清楚它的输出到底扮演什么角色。我倾向于把它定位为“信号增强器”而非“交易决策器”,最终下单还是由规则引擎或人审核完成。

2. 系统整体架构与数据流设计

整个框架可以拆成五个部分:数据接入层、LLM处理层、特征融合层、信号生成层和回测/风控模块。每个部分之间通过标准化的中间文件或消息队列连接,避免LLM调用阻塞整个流程。

数据流的逻辑是这样的:先收集当日新闻、宏观指标、行情快照和技术指标,形成三条独立的时间线;接着把新闻文本和宏观事件发送给LLM,让模型输出结构化结果,例如情绪分数、影响实体、事件类别;然后把这些结构化结果与技术指标在时间戳上对齐,构成一个多维特征矩阵;最后通过规则或轻量模型合成交易信号,送入回测框架。

TEXT
新闻采集 -> 清洗去重 -> LLM结构化 -> 情绪/事件特征
宏观数据 -> 日期对齐 -> LLM摘要+标签 -> 宏观状态特征
行情数据 -> 技术指标计算 -> 量价特征
\
所有特征按股票ID+交易日期对齐 -> 信号合成 -> 策略判断 -> 回测评估

这里最容易被低估的是“时间对齐”。LLM处理新闻有延迟,不同数据源的发布时间戳各不相同,如果直接按自然日合并,就会引入未来数据偏差。更稳妥的做法是使用“可获取时间”(available time)来标记信息,而不是发布时间。例如某条新闻在下午2点35分出现在API响应中,那么只有2点35分之后的bar才能使用这条特征。这个细节决定了回测结果是否可信。

另一个容易被忽略的设计是失败降级。LLM服务可能出现超时、限额或内容审核拒绝。框架里必须预留一个规则兜底分支:当LLM不可用时,可以退回到关键词情绪分数或中性信号,而不是让整个系统停摆。下面我会把每一层的关键实现拆开讲。

3. 数据层:新闻情绪、宏观指标与技术信号的预处理

数据层是整个项目的地基。在这个阶段,我们需要的不是把所有数据都接进来,而是先定义“一条有效事件信息”的最小字段集合。推荐至少包含:股票代码、事件时间戳、事件级别(公司/行业/宏观)、事件类型(公告/新闻/政策/分析师评级)、原始文本、来源、经过清洗的文本,以及一条唯一的ID。这对后面的LLM批处理和缓存都有帮助。

3.1 新闻数据采集与清洗

新闻数据来源可以是公开API、爬虫抓取或商业数据源。需要注意版权和合规问题,本文只讨论处理流程。采集后的原始文本通常包含HTML标签、无关导航内容、重复转载和营销性文字。清洗步骤一般包括:

  • 去除HTML标签、URL、多余空白字符
  • 提取正文主体,去掉标题重复句子
  • 识别并合并同一事件的转载新闻,保留最早来源
  • 过滤掉包含“推荐”“广告”“点击领取”等噪声文本

清洗后的新闻要存成标准格式,例如JSON或Parquet。下面是一个清洗后的新闻记录示例:

JSON
{
"news_id": "NEWS-20250315-000123",
"stock_code": "SZ300123",
"available_time": "2025-03-15 14:35:00",
"event_level": "company",
"event_type": "contract_win",
"title": "某科技公司中标智慧城市建设项目",
"content": "公司公告称,近日收到中标通知书,项目金额约1.2亿元,占上一年度营收的15%。"
}

这里“available_time”是系统真正拿到这条数据并可以触发策略的时间,不是公告发布的时间。如果公告在盘中发布,但数据源延迟20分钟,那么策略只能在延迟后的时间点使用它。

3.2 宏观指标处理

宏观指标包括利率、PMI、CPI、社融、工业增加值等,通常按月或按季发布。它们本身频率很低,但对小市值股票的影响往往通过流动性和风险偏好传导。处理宏观指标时要额外注意“发布时点的滞后性”,也就是指标通常对应上个月或上个季度的情况。所以不能把2025年3月中旬公布的2月PMI当作3月初已知信息来模拟决策。

更实用的做法是把宏观指标做成状态变量,比如“利率处于上升通道”“PMI连续三个月大于50”,再让LLM对这些状态做情景化解释,而不是把原始数值直接塞给模型。这样可以降低模型对噪声数字的敏感度,同时让特征更具可解释性。

3.3 技术指标计算

技术指标是模型特征框架里相对成熟的部分。常用的小市值短期信号包括:动量(过去5日、10日收益率)、波动率(ATR或历史波动率)、成交量变化(量比)、相对强弱(RSI)、移动平均线偏离度等。下面是一个使用Pandas计算常用技术指标的示例:

PYTHON
import pandas as pd
import numpy as np
 
def calc_technical_features(df: pd.DataFrame) -> pd.DataFrame:
"""
df 必须包含列:date, open, high, low, close, volume
返回新增技术特征后的 DataFrame
"""
result = df.copy()
result = result.sort_values("date").reset_index(drop=True)
 
# 动量因子
result["ret_5"] = result["close"].pct_change(5)
result["ret_10"] = result["close"].pct_change(10)
 
# 波动率因子:ATR 14
high, low, close = result["high"], result["low"], result["close"]
tr = np.maximum(high - low, np.maximum(abs(high - close.shift(1)), abs(low - close.shift(1))))
result["atr_14"] = tr.rolling(14).mean()
 
# RSI 14
delta = result["close"].diff()
gain = delta.where(delta > 0, 0.0)
loss = -delta.where(delta < 0, 0.0)
avg_gain = gain.rolling(14).mean()
avg_loss = loss.rolling(14).mean()
rs = avg_gain / avg_loss
result["rsi_14"] = 100 - (100 / (1 + rs))
 
# 量比:当前成交量相对 5 日均量
result["volume_ratio"] = result["volume"] / result["volume"].rolling(5).mean()
 
return result

注意,所有技术指标计算都要在历史数据上“滚动”完成,不能使用未来信息。pandas的rolling默认就是滑动窗口,但需要确认窗口内是否包含当前值。按需调整。

4. LLM模块设计:从一篇新闻到结构化信号

LLM在这个框架中的核心任务不是“预测明天会涨还是会跌”,而是把一个非结构化文本转换成可以进入因子库的结构化信号。你可以把它理解为:让模型扮演一个金融信息抽取员,输出情绪极性、事件影响方向、受影响实体,以及置信度。

4.1 Prompt设计思路

Prompt设计决定了输出质量的稳定性。一个比较可靠的模式是:先给模型设定角色与任务,再给出输出格式约束,最后是文本内容。输出格式强烈建议使用JSON,并且要求模型只输出JSON,不要额外解释。下面是一个可用的Prompt模板:

TEXT
你是一名金融新闻分析助手。请阅读以下公司新闻,输出结构化分析结果。
 
要求:
1. 判断新闻情绪:positive / neutral / negative
2. 给出情绪强度,取值 0.0 到 1.0,1.0 表示情绪极强
3. 判断事件类型,可选项为:订单合同、业绩变动、股权变动、政策影响、行业趋势、管理层变动、违规处罚、其他
4. 判断该新闻对该公司短期股价的潜在影响方向:positive / neutral / negative
5. 提取新闻中涉及的主营业务关键词,最多3个
 
严格输出 JSON 格式,不要输出其他内容:
{
"sentiment": "positive",
"sentiment_score": 0.85,
"event_type": "订单合同",
"short_term_impact": "positive",
"business_keywords": ["智慧城市", "安防", "数据服务"]
}
 
新闻内容:
{news_content}

这里的一个关键设计是“短期影响方向”与“情绪”分离。情绪可能是正面的,但“利润预增公告”对股价的影响方向和“公司中标项目”的影响方向不完全一样。分开判断可以给后续因子合成更多自由度。

4.2 调用LLM并解析结果

无论使用OpenAI兼容接口、国产大模型API,还是本地部署的开源模型,调用方式基本类似。下面以Python调用一个兼容OpenAI Chat Completions格式的API为例:

PYTHON
import os
import json
from openai import OpenAI
 
client = OpenAI(
api_key=os.getenv("LLM_API_KEY"),
base_url=os.getenv("LLM_BASE_URL", "https://api.example.com/v1")
)
 
def analyze_news(news_text: str, model: str = "gpt-4o-mini") -> dict:
prompt = f"""
你是一名金融新闻分析助手。请阅读以下公司新闻,输出结构化分析结果。
 
要求:
1. 判断新闻情绪:positive / neutral / negative
2. 给出情绪强度,取值 0.0 到 1.0,1.0 表示情绪极强
3. 判断事件类型,可选项为:订单合同、业绩变动、股权变动、政策影响、行业趋势、管理层变动、违规处罚、其他
4. 判断该新闻对该公司短期股价的潜在影响方向:positive / neutral / negative
5. 提取新闻中涉及的主营业务关键词,最多3个
 
严格输出 JSON 格式,不要输出其他内容:
{{
"sentiment": "positive",
"sentiment_score": 0.85,
"event_type": "订单合同",
"short_term_impact": "positive",
"business_keywords": ["智慧城市", "安防", "数据服务"]
}}
 
新闻内容:
{news_text}
"""
response = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": "You are a precise financial information extractor."},
{"role": "user", "content": prompt}
],
temperature=0.0,
response_format={"type": "json_object"}
)
content = response.choices[0].message.content
return json.loads(content)

这段代码里temperature设置为0,目的是让输出尽量稳定,减少随机性对信号的影响。response_format要求JSONObject,并不是所有API都支持,使用前需要确认供应商能力;如果不支持,可以用正则从字符串中抽取JSON块。

解析结果后,还需要检查字段是否完整,比如sentiment是否只包含三个枚举值、sentiment_score是否在0到1之间。如果模型返回的JSON格式不符合预期,最简单的方法是把该条新闻丢进“待人工复核”列表,而不是强行解析。

4.3 批量处理与缓存策略

小市值策略的新闻数量可能每天有几百到几千条,逐条调用API会带来延迟和成本问题。可用的方式是做“批量+缓存”:

  • 对同一事件主体的新闻在短时间内去重,避免重复调用
  • 对同一文本的哈希值建立缓存,如果之前分析过且模型版本未变,直接复用结果
  • 非实时研究场景可以使用离线批处理,把分析结果写入数据库,回测时只读取

下面是一个简单的批次处理函数,用来控制并发和失败重试:

PYTHON
import time
from tenacity import retry, stop_after_attempt, wait_exponential
 
@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10))
def analyze_news_with_retry(news_text: str):
return analyze_news(news_text)
 
def analyze_news_batch(news_list):
results = []
for idx, news in enumerate(news_list):
try:
result = analyze_news_with_retry(news["content"])
results.append({**news, **result})
except Exception as e:
result = {
"sentiment": "neutral",
"sentiment_score": 0.5,
"event_type": "unknown",
"short_term_impact": "neutral",
"business_keywords": []
}
results.append({**news, **result, "error": str(e)})
# 控制请求频率,避免触发限流
time.sleep(0.1)
return results

在生产环境中,更推荐用消息队列(如Redis Stream或RabbitMQ)来异步消费新闻任务,但研究阶段用简单列表循环即可。

5. 信号合成:把LLM输出与技术指标变成可交易的分数

得到LLM的结构化输出后,还不能直接下单。我们需要把这些输出与现有技术指标放在同一个特征空间里,再通过规则或模型合成一个“信号强度分数”。这里要注意一个问题:LLM输出的情绪分数是横截面特征,需要与其他股票在同一时期比较,才能体现相对强弱。换句话说,情绪分数0.8在今天是高位还是低位,取决于今天整个市场或同行业股票的情绪分布。

5.1 构建特征函数

下面这个函数展示如何把三条数据源压缩成一个综合因子。它综合了情绪得分、事件类型的先验影响、宏观状态、以及技术指标中的动量与成交量确认。权重初始值来自经验,后续可以用历史数据做优化。

PYTHON
def compute_combined_factor(row):
"""
row 必须包含字段:
- sentiment_score: float
- short_term_impact: str, positive/neutral/negative
- event_type: str
- macro_state: float, 范围为 -1 到 1,表示宏观情绪/流动性状态
- ret_5: float
- volume_ratio: float
- rsi_14: float
"""
# 情绪与事件影响
sentiment_component = (row["sentiment_score"] - 0.5) * 2 # 映射到 -1 到 1
 
impact_mapping = {"positive": 1.0, "neutral": 0.0, "negative": -1.0}
impact_component = impact_mapping.get(row["short_term_impact"], 0.0)
 
# 技术信号部分
momentum_component = 1.0 if row["ret_5"] > 0 else -1.0
volume_component = 1.0 if row["volume_ratio"] > 1.2 else 0.0
rsi_component = 0.0
if row["rsi_14"] < 30:
rsi_component = 0.5 # 超卖反弹信号
elif row["rsi_14"] > 70:
rsi_component = -0.5 # 超买警惕信号
 
# 简单加权合成
factor = (
0.3 * sentiment_component
+ 0.3 * impact_component
+ 0.2 * row["macro_state"]
+ 0.1 * momentum_component
+ 0.1 * volume_component
+ 0.05 * rsi_component
)
return factor

这里的权重并不一定能适用于所有市场环境,但它演示了“多源信号如何表达成一个分数”。更严谨的做法是用滚动窗口计算每个因子与未来收益的IC值,再动态调整权重。

5.2 生成交易信号

基于综合因子,可以设置阈值来生成交易信号。比如:

  • 综合因子大于0.6:买入候选
  • 综合因子小于-0.6:卖出或回避候选
  • 其他情况:不操作

需要强调,阈值必须根据回测结果确定,不能拍脑袋。同时要加上流动性过滤,例如排除日成交额低于某个阈值的股票;也可以加上波动率过滤,例如排除ATR过大导致止损空间明显不足的标的。

PYTHON
def generate_trade_signals(factor_df, buy_threshold=0.6, sell_threshold=-0.6, min_amount=2_000_000):
signals = []
for _, row in factor_df.iterrows():
if row["amount"] < min_amount:
continue
if row["factor"] >= buy_threshold:
signals.append(("BUY", row["stock_code"], row["date"], row["factor"]))
elif row["factor"] <= sell_threshold:
signals.append(("SELL", row["stock_code"], row["date"], row["factor"]))
return signals

在小市值策略里,建议把“SELL”信号分成两类:一类是持仓中出现了负面事件而主动卖出,另一类是因子分数降到低位而被动减仓。两类信号对应的逻辑不同,前者要尽量快,后者可以分批执行。

6. 回测与验证:避免被LLM增强后的过拟合欺骗

回测是整个框架中最容易出问题,也最容易被忽视的环节。因为LLM引入后,特征维度增加,策略有更多自由度去拟合历史数据。如果回测没有做好防未来数据和防过拟合,最终结果会很漂亮,但实盘一塌糊涂。

6.1 回测框架的四个必查项

第一,必须使用事件可获取时间。新闻和宏观数据的发布时间是关键,不能简单使用自然日。第二,必须考虑涨跌停和流动性约束。小市值股票经常出现开盘一字涨停或跌停,信号虽然生成了,但实际不可能成交。第三,必须考虑交易成本。小市值股票买卖价差大,滑点显著;回测中建议每边至少扣除0.1%到0.3%的成本,或使用更保守的冲击成本模型。第四,必须做样本外测试。把数据按时间切分,前70%用于因子研发,后30%用于验证。

6.2 一个简单的回测指标计算示例

下面代码展示如何基于信号和价格数据计算最基础的收益指标。这个示例简化了交易成本与持仓周期,主要用来理解逻辑,不是完整回测引擎。

PYTHON
import pandas as pd
import numpy as np
 
def calculate_backtest_stats(trade_log, price_df):
"""
trade_log: DataFrame, 包含 stock_code, entry_date, exit_date, direction
price_df: DataFrame, 包含 stock_code, date, close
"""
returns = []
for _, trade in trade_log.iterrows():
entry_price = price_df[(price_df["stock_code"] == trade["stock_code"]) &
(price_df["date"] == trade["entry_date"])]["close"].values
exit_price = price_df[(price_df["stock_code"] == trade["stock_code"]) &
(price_df["date"] == trade["exit_date"])]["close"].values
if len(entry_price) == 0 or len(exit_price) == 0:
continue
r = exit_price[0] / entry_price[0] - 1
if trade["direction"] == "SELL":
r = -r
returns.append(r)
 
returns = np.array(returns)
total_return = np.prod(1 + returns) - 1
# 注意:这里只计算了简单累计,没有按持仓时间年化
sharpe = returns.mean() / returns.std(ddof=1) * np.sqrt(252) if len(returns) > 1 else 0.0
win_rate = (returns > 0).mean()
max_drawdown = 0.0
cum = np.cumsum(returns)
peak = np.maximum.accumulate(cum)
drawdown = peak - cum
max_drawdown = drawdown.max()
 
return {
"trade_count": len(returns),
"total_return": total_return,
"sharpe": sharpe,
"win_rate": win_rate,
"max_drawdown": max_drawdown
}

这段代码没有处理组合持仓和在途资金,但能用于快速检查信号思路是否合理。如果你想认真做研究,推荐用成熟的回测库,例如backtrader、vectorbt、聚宽或掘金,而不是自己从零造轮子。小市值策略尤其考验回测工具的精细度。

6.3 模型与因子归因

既然引入了LLM,还需要回答一个问题:最终策略的超额收益主要来自情绪因子、宏观因子还是技术因子?这要用因子归因分析。一个简单的方法是分别计算“去掉LLM特征”和“保留LLM特征”的两条净值曲线,观察它们的差异。如果去掉LLM特征后收益基本不变,那说明LLM目前只是装饰品,并没有带来真正的信息增量。

更细的归因可以做逐步回归或特征重要性分析。值得提醒的是,金融数据的信噪比很低,因子重要性的波动会比工程场景更大。建议用多个时间窗口重复验证,不要依赖单次结果显示的“重要性排名”。

7. 关键技术难点与工程化风险

这个框架真正的难点不是训练模型,而是数据工程和策略可信度。下面几个问题几乎每个做LLM量化的人都会遇到。

第一个是数据延迟与事实性错误。LLM有幻觉风险,可能把新闻中的关键数字理解错误。比如把“同比下降”识别为正面消息。缓解方法是要求模型输出时引用原文片段,然后做规则校验;或者把数字抽取和情感判断拆成两个任务。对涉及明确数字的事件,用正则先抽取金额、百分比,再让模型结合上下文判断。

第二个是API成本与吞吐量。如果每天分析上千条新闻且使用商业大模型,成本会迅速上升。更经济的方案是分层处理:先用廉价的关键词规则过滤明显中性新闻,只有通过初筛的新闻才进入LLM分析。或使用开源模型本地部署,一台带较好CPU/GPU的服务器可以满足中小型研究团队的吞吐要求。

第三个是过拟合与市场状态切换。小市值股票的alpha来源在不同年份差异巨大。2021年小市值表现好,2023年和2024年则出现过极端波动。如果策略只在某一段市场状态下做参数调优,很容易在另一段失效。因此回测区间必须覆盖牛熊、震荡、高波动和低波动环境,并且要设定“参数不能频繁调整”的纪律。

第四个是交易执行的现实约束。小市值股票容量有限,回测中一个信号承载的资金量可能很大,实际买不到那么多。建议在回测中增加流动性约束,比如“单笔下单量不得超过当日成交量的1%”,这样可以显著降低虚假收益。

第五个是合规与数据授权。使用新闻数据、宏观数据时要注意授权边界,避免将未授权数据用于商业策略。如果你是个人研究,更要注意数据来源的合规性。涉及实际交易还必须遵守所在市场的交易规则和监管要求,任何违规策略都可能带来严重后果。

8. 常见问题与排查方法

下面整理了这个框架开发过程中比较常见的问题,以及对应的排查思路。

问题现象 可能原因 排查方式 解决方案
LLM返回JSON解析失败 模型输出包含额外文本或格式不规范 打印原始响应内容,检查是否有Markdown代码块包裹 设置response_format,增加正则提取,启用重试机制
情绪分数与常识相反 Prompt缺少时间方向或事件类型约束 检查原始新闻文本,查看模型是否混淆“同比”“环比” 在Prompt中增加“注意同比增长/下降的影响方向”,并把数字提取与判断分开
回测收益虚高 使用了未来信息 逐条检查数据时间戳,特别是新闻和宏观数据的可用时间 统一使用available_time,并做数据泄漏自检
策略在样本内表现好,样本外失效 过拟合或市场状态切换 对比样本内外指标,检查参数是否过多 减少参数数量,做滚动窗口验证,加入参数稳定性约束
API调用频繁超时 没有做批量控制和重试 查看调用日志和限流错误码 加入批处理、缓存、重试与降级逻辑
小市值股票买入后无法成交 流动性不足或涨跌停限制 检查回测中成交价和成交量的假设 增加流动性过滤,在回测中模拟涨跌停和成交概率

排查时要善用日志。建议为每个数据源和模块记录单独的日志,包括原始输入、模型输出、处理结果和耗时。这样一旦某一天策略异常,能快速定位是数据源坏了、模型调用出错了,还是因子合成逻辑被脏数据干扰了。

9. 工程化落地与最佳实践

如果你决定把这个框架从研究推进到可运行的辅助系统,下面几条工程建议值得认真对待。

9.1 数据管道要“可重放”

所有原始数据必须持久化,并且策略中间结果要与原始版本号绑定。LLM模型会升级,Prompt会修改,如果历史回测结果无法复现,研究就失去了意义。建议代码仓库里同时保存Prompt模板版本和LLM输出结果文件。不同版本的输出不要互相覆盖。

9.2 LLM调用要做好安全与权限控制

如果系统后续接入了实盘或模拟交易,LLM不应该直接产生下单指令。更稳妥的架构是:LLM的输出只能生成“信号建议”,再由独立的规则引擎做交易校验。规则引擎要包含:可交易标的白名单、最大单票仓位、单日最大买入金额、涨跌停状态过滤、合法交易时段校验。这些规则可以用代码写死,也可以放在配置中心,但必须保证人工可审查、紧急时可关闭。

PYTHON
# 文件路径:risk_check.py
def risk_check(order_request, white_list, max_position_pct):
if order_request["stock_code"] not in white_list:
return False, "股票不在白名单"
if order_request["position_pct"] > max_position_pct:
return False, "仓位超过上限"
if not order_request["pass_volume_limit"]:
return False, "预计成交量超过限制"
if order_request["tradable"] is not True:
return False, "处于停牌或涨跌停状态"
return True, "PASS"

9.3 监控与告警

生产环境的LLM策略系统需要监控三个层面的指标:数据延迟、模型调用成功率、因子分布漂移。如果连续多天情绪因子分布均值从0.5漂移到0.65,说明LLM的输出行为可能发生了变化,需要重新验证Prompt或Model版本。如果API调用成功率低于阈值,系统应该能自动切换到备用模型或规则降级模式。

9.4 版本管理与团队协作

建议把Prompt看成代码一样管理,使用的模型名称、温度、输出格式、系统角色都记录在配置文件中,提交到Git仓库。每次修改都要有diff记录。团队中负责策略的人、负责数据的人、负责工程的人,要对“信号语义”达成一致。不要让每个成员各自写Prompt而互不兼容。可以约定统一的字段命名规范,比如情绪一律使用sentiment,影响方向一律使用short_term_impact,这样下游代码才不会被字段名变异拖垮。

9.5 从小规模模拟盘开始

无论回测多漂亮,都建议先在模拟盘中运行至少一个月。重点观察信号频率、滑点假设、成交率和LLM响应稳定性。如果模拟盘与回测差距过大,要先回头检查回测中的成本假设和成交假设,而不是急着调整模型参数。小市值策略对执行细节极度敏感,宁可先运行得慢一点,也要保证每个决策点都有解释和记录。

回到我们最初的话题:LLM确实改变了处理金融文本的方式,但改变的是“信息提取效率”,而不是“市场预测魔法”。新闻情绪、宏观指标和技术信号在框架里是三种不同性质的数据源,LLM的价值在于把它们翻译成统一的结构化信号。你能不能用好这个信号,仍然取决于数据质量、回测纪律和风控意识。如果你正在搭建自己的小市值量化研究系统,不妨从最小闭环开始:选10只股票,跑一个月新闻数据,记录50条LLM分析结果,然后人工核对每一条情绪判断是否合理。等这一步稳定了,再逐步扩展到全市场和更复杂的信号合成方案。

这个方向最值得长期积累的,不是某个提示词的技巧,而是“怎样让模型输出与金融现实保持一致”的一整套校验和迭代方法。把它沉淀成自己的数据管道、测试集和复盘流程,比任何单个模型都更有复用价值。

量化研究参考系列之九大语言模型驱动因子挖掘的模型演进与框架梳理.docx
第五阶段拓展至非结构化文本信息的深度利用,包括新闻报道、财报附注、管理层讨论分析、社交媒体情绪等内容,通过嵌入向量建模、事件抽取、情感极性识别等技术手段,将语义信息转化为具有预测能力的Alpha信号
wh3933
8
ChatGPT教你炒股AI学习[代码]
ChatGPT在炒股策略中的应用AI大模型学习路径,构成了当前金融科技人工智能交叉领域最具实践价值的双重知识体系。首先,从“炒股”维度切入,文章聚焦于宽基指数这一稳健型投资标的,其核心逻辑在于宽基指数(如沪深300、中证500、上证50、创业板指)覆盖全市场或特定板块的代表性龙头企业,具备高透明度、低人为干预、强流动性长期beta收益特征,是普通投资者穿越牛熊周期的底层资产锚点。其中,沪深300代表A股市场市值最大、流动性最好、盈利最稳定的前300只股票,是蓝筹核心资产的晴雨表;中证500则聚焦于中小市值成长型企业,反映新经济、专精特新及产业升级动能,波动性更高但长期弹性更强;上证50作为沪市龙头集中营,金融+消费权重超60%,政策敏感度高,常率先响应宏观转向;创业板指则以高研发投入、高成长性、高估值波动为标签,集中体现科技创新主线,是观察注册制改革成效产业政策落地的关键窗口。四者构成“大盘—中盘—龙头—成长”的立体化指数矩阵,需动态配置而非静态持有。在此基础上,文章提出的买入策略并非简单技术择时,而是融合多维因子的系统性决策框架。估值定投法强调以PE(市盈率)、PB(市净率)、股息率等历史分位数为标尺——例如当沪深300 PB处于近十年10%分位以下时启动定投,中证500 PE-TTM低于历史均值减一倍标准差时加大仓位,本质是利用均值回归规律捕捉极端低估机会。左侧交易则要求投资者具备逆向思维能力,在市场恐慌性下跌中分批建仓,需配合股债性价比(如沪深300 ERP=盈利收益率-10年期国债收益率)、信用利差、融资余额变化等领先指标预判底部区域;而右侧确认法则依托趋势信号(如指数站稳250日均线、MACD周线金叉、两市日成交额连续10日超9000亿元),避免过早抄底被套,体现“让市场证明方向”的纪律性。更关键的是,策略必须嵌入宏观语境国内政策(如降准降息节奏、资本市场改革举措、行业扶持白名单)、市场情绪(两融余额/新开户数/股基成交占比/私募仓位数据)、全球变量(美联储利率路径、美债收益率倒挂程度、VIX恐慌指数、北向资金月度净流入趋势)共同构成三维校验体系,单一指标失效时需多源印证。转向AI学习路径部分,文章构建了从工具使用者到技术创造者的进阶范式。初阶应用阶段核心是掌握Prompt Engineering(提示工程)的底层逻辑理解token切分机制、温度值(temperature)对输出随机性的影响、top-p采样beam search的差异,能熟练设计结构化指令(如角色设定+任务分解+格式约束+示例示范),并结合RAG(检索增强生成)技术调用本地研报PDF、财报Excel、行业数据库等私有知识,实现“ChatGPT+个人知识库”的智能投研助手。高阶应用阶段需深入LangChain、LlamaIndex等框架,构建可复用的AI工作流例如自动解析万得终端导出的指数估值数据,生成可视化分析报告;或基于新闻舆情API实时抓取政策原文,用LLM提取关键词、判断利好等级、关联影响指数成分股。模型训练阶段则跨越应用层进入技术深水区需掌握数据清洗(去除低质网页文本、脱敏金融敏感信息)、指令微调(Instruction Tuning)的数据构造方法(如将券商研报摘要转为Q&A对)、LoRA(低秩适配)等高效微调技术,在消费级显卡上完成百亿参数模型的轻量化训练,并通过BLEU、ROUGE及人工评估验证生成质量。最终商业闭环阶段强调产品化能力将训练好的模型封装为Web API,集成至量化交易平台实现实时信号推送;或开发面向C端投资者的微信小程序,提供“输入持仓组合→输出再平衡建议→附带政策解读”的端到端服务,完成从技术能力到商业价值的转化。该路径拒绝碎片化学习,强调“每个阶段必须产出可验证成果”——初阶完成3个定制化投研Agent,高阶交付2个自动化分析Pipeline,训练阶段发布1个开源金融垂类微调模型,闭环阶段上线1个MAU超5000的SaaS工具。这种以终为始的学习设计,使AI能力真正扎根于证券投资这一高壁垒、强监管、重结果的垂直场景,而非停留于通用技术层面的浅层模仿。
多智能体LLM量化投资中的自适应集成信息压缩实践
筱小龙
量化研究参考系列之九大语言模型驱动因子挖掘的模型演进与框架梳理.pdf
第五阶段拓展至文本Alpha另类数据融合,模型具备解析新闻标题、分析师报告、社交媒体情绪、专利文本、供应链公告等非结构化语料的能力,并将其映射为时序信号变量,例如通过情感分析提取行业舆情得分,结合实体识别抽取关键公司事件时间戳
wh3933
2
情绪因子实战路径用NLP挖掘财经新闻影响股价的3个高胜率场景
SW_孙维
ChatGPT 交易策略 15个月收益500%.pdf
资源摘要信息:本报告《ChatGPT 交易策略 15个月收益500%+》系统性地揭示了以ChatGPT为代表的大语言模型(Large Language Models, LLMs)在金融量化投资领域的突破性应用价值,其核心并非将LLM直接用于价格建模或时序预测,而是创造性地将其定位为“高阶语义理解引擎”,聚焦于非结构化文本信息——尤其是公司新闻标题——的情绪极性判别任务,并通过严谨的实证设计将语言模型输出转化为可交易的alpha信号。该策略本质属于“文本驱动型事件驱动策略”“机器学习增强型多因子框架”的深度融合:首先,研究者构建了一个标准化新闻标题数据集,覆盖美股市场数千家上市公司在2022—2023年期间发布的主流财经媒体(如Bloomberg、Reuters、CNBC)标题;其次,摒弃传统基于词典(如Loughran-McDonald)或监督式分类器(如SVM、BERT微调模型)的情感分析范式,转而采用零样本(zero-shot)提示工程方式向ChatGPT-3.5提问“请判断以下新闻标题表达的情绪倾向积极、消极或中性”,并强制要求其仅返回三类标签之一,从而规避生成式幻觉冗余解释;再次,对每只股票每日所有相关新闻标题的ChatGPT情绪判定结果进行加权聚合(按媒体权威性、发布时间衰减权重及标题长度归一化),生成日度“ChatGPT情绪得分”(ChatGPT Sentiment Score),该得分并非连续变量,而是映射为-1(净消极)、0(中性主导)、+1(净积极)的离散状态变量;进而,策略构建严格遵循学术级量化流程情绪得分为排序依据,在全市场股票池中选取Top 10%情绪最积极股票构建Long组合,Bottom 10%情绪最消极股票构建Short组合,每月再平衡,剔除ST、低价股、流动性不足标的,并控制行业暴露、市值暴露动量暴露以剥离混杂效应;回测结果显示,该Long-Short组合在2022年3月至2023年5月共15个月期间实现累计收益率512.7%,年化收益率达218.4%,夏普比率高达3.86,信息比率4.21,最大回撤仅12.3%,显著超越同期标普500指数(+18.6%)罗素2000指数(+9.2%)。尤为关键的是,该策略收益具有强稳健性在控制Fama-French五因子、Carhart四因子及文本特异性风险因子(如标题长度波动率、媒体来源集中度)后,Alpha仍达每月1.92%,t值4.73;分样本检验显示,小市值公司、高无形资产占比企业及ESG评级偏低公司中情绪信号预测能力更强,印证了LLM对信息不对称敏感型标的的识别优势;进一步机制检验发现,ChatGPT得分后续3—5个交易日的异常收益率(Abnormal Return)呈显著正相关(p<0.001),且该领先性在盘前新闻发布后首小时即开始显现,表明其捕捉的是真正未被市场即时消化的增量语义信息。该研究颠覆了传统NLP在金融中的应用逻辑——不再追求模型参数精度的极致优化,而是利用LLM海量语料预训练形成的跨领域常识推理能力上下文敏感性,解决传统方法难以处理的隐喻、反讽、复合句式及行业黑话等语义歧义问题,例如对“公司裁员以提升长期竞争力”这类表面负面实则积极的表述,ChatGPT准确识别出“提升长期竞争力”的战略正向锚点,而传统词典法易误判为消极。此外,报告强调该策略成功的关键支撑体系一是高质量新闻标题清洗流水线(去重、时间戳校准、来源可信度过滤);二是对抗性提示工程设计(如加入“请勿推测、仅依据字面判断”约束语句以抑制幻觉);三是动态阈值校准机制(避免固定Top/Bottom分位导致的信号漂移)。这一范式标志着金融AI已从“特征工程依赖型”迈入“语义理解原生型”新阶段,为监管科技(RegTech)、智能投顾(Robo-Advisor)、另类数据定价等领域提供了可复用的方法论基石,其深层价值在于证明大模型并非替代量化分析师,而是将其从繁琐的数据标注规则调试中解放,转向更高维的策略逻辑架构、风险边界定义人机协同决策机制设计。
TechLead KrisChang
事件驱动交易信号构建基于finnhub-python财报日历与新闻触发的8步策略
SW_孙维
量化投资技术演进从算力瓶颈到AI驱动的系统工程挑战
闫泽华
组合维度优化将多个弱Alpha融合为强信号的3种科学加权模型实证结果
SW_孙维
AI交易员的行为金融学实验:LLM如何复现市场泡沫认知偏差
小小造数君
LLM驱动的小市值股票量化策略:情绪、宏观与技术信号融合框架
本文提出面向小市值股票的LLM驱动量化策略框架,聚焦金融新闻情绪分析、宏观经济指标适配与技术信号优化三类信息的分层融合。核心包括基于LLM的语义级情绪打分器设计、宏观状态评分法调节信号权重、小市值适配的技术特征组合(短期动量、流动性、波动率、反转因子),以及横截面排序周频调仓的组合构建逻辑。强调工程落地中的稳定性、回测可信性生产可复现性。
交易员.Coder
234
基于LLM的小市值交易信号系统:融合新闻情绪与技术指标的量化实现
本文构建了一个融合金融新闻情绪、宏观经济指标与技术信号的小市值量化交易信号系统,采用大语言模型(LLM)作为综合决策引擎,输出结构化买卖建议。系统涵盖数据采集(AKShare)、特征工程(情绪打分、SHIBOR状态映射、技术指标)、提示词设计、JSON格式信号生成、风控过滤及T+1回测框架,强调非结构化文本结构化因子的协同建模,适用于Python基础开发者探索‘大模型+量化实践
作者小怪兽
269
基于LLM的小市值股票多信号量化交易策略框架
本文提出一个将大语言模型(LLM)嵌入量化交易流程的框架,专为小市值股票设计。通过融合金融新闻情绪、宏观经济指标与技术信号三路输入,LLM在严格时间对齐(T日收盘后组装、T+1日执行)下输出BUY/HOLD/SELL决策,并辅以语义化上下文、输出空间压缩和多次采样提升稳定性。框架强调回测中前视偏差规避、流动性风险控制及数据合规性,适用于已有量化基础、探索LLM因子融合实践者。
230
大模型融合新闻情绪与技术信号:市值股票交易系统构建指南
本文构建了一个面向小市值股票的量化交易系统,融合大语言模型提取的金融新闻情绪、宏观指标与技术信号三类异构数据。重点解决时间对齐、前视偏差防控、LLM输出结构化稳定性、小市值特有风控(停牌/涨跌停/流动性)等工程难点,并提供可落地的数据链路架构、日频评分合成方法、事件驱动回测框架及生产级运维要点。
weixin_30256901
279
大语言模型驱动小盘股量化交易:融合新闻情绪与宏观指标的研究框架
本文提出一个融合大语言模型(LLM)、新闻情绪分析、宏观事件抽取与技术指标的小盘股量化交易研究框架。核心在于本地化部署7B/8B级别LLM,实现结构化新闻情绪打分宏观指标自动抽取,并传统量化因子融合后进入严格回测验证流程。框架强调工程可落地性,支持CPU/GPU混合推理,注重防未来函数、输出格式校验合规边界,适用于投研团队AI工程师共建可复现的金融NLP量化流水线。
cmff98425
405
LLM+小市值交易:信号融合与回测验证的工程实践
本文聚焦大语言模型(LLM)在小市值股票交易中的工程化落地,核心解决非结构化文本(如新闻)、低频宏观指标高频技术信号的跨源、跨频、跨时对齐问题。强调统一时间轴设计、前视偏差防控、流动性幸存者偏差处理,并提出五层研究管线(数据、特征、融合、验证、风控)及最小可用流程。评估需兼顾信息系数、衰减速度、换手回撤,而非仅看收益率。
白话期权
224
基于大语言模型的小市值股票交易决策系统构建
本文介绍如何利用大语言模型(LLM)构建面向小市值股票的量化交易决策系统,核心在于将新闻情绪分析、宏观经济指标与技术信号三类异构信息进行结构化融合。系统采用分层架构数据获取层统一接入行情、新闻和宏观数据;LLM情绪分析层输出标准化情绪分数(-1~1);特征加工层完成归一化指标计算;信号融合层通过加权评分生成可回测交易信号;最后经简易回测验证策略有效性。强调前视偏差规避、Prompt工程、缓存设计风险控制等工程实践要点。
李枝蔚
314
多智能体LLM量化投资中的应用架构、自适应集成因子轮动
本文介绍了一种基于多智能体架构的大语言模型(LLM)在量化投资中的落地实践,涵盖系统核心架构设计、专业化智能体分工(宏观情绪、行业基本面、量价因子、风险控制)、基于绩效市场状态的自适应集成机制、以及由LLM协同驱动的动态因子轮动策略。重点强调工具调用、结构化通信、分层模型选型、回测避坑(如知识穿越、非确定性输出处理)及持续迭代飞轮。所有技术实现均围绕金融决策可解释性、稳定性工程可行性展开。
weixin_30384217
356
金融新闻实时语义分析系统构建可交易的结构化信号流水线
本文介绍一套面向量化交易的实时金融新闻语义分析系统,聚焦低延迟(<100ms)、金融领域适配可解释性三大核心。系统采用四层流水线架构,摒弃端到端大模型,以ALBERT蒸馏模型结合规则引擎实现高效事件识别、三维情感分级(强度/确定性/影响范围)、多新闻信号融合及CPU级实时推理。关键技术包括定制化金融实体词典、SVM事件分类、指纹去重、双Topic Kafka接入JSON Schema结构化输出,支撑每秒300+条新闻的生产级稳定运行。
aoe41606
534
LLM驱动的投研叙事分析从财报文本到量化组合优化
本文探讨如何利用大语言模型(LLM)深度解析财报等非结构化文本,提取语义级叙事信号,并将其动态融入量化组合优化框架。核心突破在于摒弃传统文本向量化方法,以LLM作为语义解析引擎,实现事件主体、动作、金额、时间状态风险等级的精准抽取;通过构建叙事-量化映射表、改造组合优化器目标函数(注入LLM生成的硬约束)、设计事件驱动回测多层监控体系,完成从PDF到可交易信号的端到端落地。技术栈聚焦本地化Llama-3-70B+LoRA微调、OCR高精度预处理及Wind/聚宽集成。
dianan0938
421
多智能体协同决策在量化交易中的应用架构、技术与实践
本文介绍AlphaCrafter多智能体量化交易系统,聚焦其架构设计、关键技术与实盘落地。系统由数据感知、因子挖掘、因子整合、风控执行四类智能体组成,基于DAG工作流编排实现模块化协同;核心技术包括异构数据融合、注意力驱动的动态因子加权、低延迟微服务部署及事件驱动回测框架;强调实盘一致性、熔断风控持续迭代机制,为高频、鲁棒、可解释的量化决策提供工程化范式。
weixin_33811539
414
多智能体LLM框架在金融预测套利中的架构设计工程实践
本文介绍PolySwarm多智能体LLM框架在金融预测市场延迟套利中的工程实践。核心包括基于角色划分的信息感知、市场分析、策略生成、执行风控及元认知五类智能体;采用黑板模型事件驱动的通信机制;实现非结构化文本到概率预测的转化校准;攻克低延迟数据同步、价差识别、原子执行幽灵套利防范等关键技术;并探讨LLM推理优化、通信开销控制及高保真回测仿真等工程挑战。
weixin_30416871
511
LLM与规则书量化交易对决实验复现、局限分析增强应用
本文复现并分析了大语言模型(LLM固定规则书在量化交易中的对决实验,涵盖公平回测框架搭建、多维评估指标(NAV、夏普比率、最大回撤等)、LLM在决策稳定性、数值推理、实时性、幻觉及风控方面的固有局限,并提出LLM作为增强工具的四大落地场景策略创意生成、舆情事件分析、代码生成解释、自适应参数调整,强调LLM规则系统协同而非替代。
weixin_34204722
457
A股量化交易Agent系统智能因子挖掘动态风控实践
本文介绍面向A股市场的量化交易Agent系统,聚焦智能因子挖掘动态风控两大核心技术。系统融合多源数据(行情、舆情、另类数据),构建动态因子工厂军事级有效性检验流程;风控模块涵盖实时监测矩阵、三级自适应熔断及执行层安全机制;整体采用多Agent协同架构,主控Agent实现任务调度容错,专业化Agent集群支持自然语言驱动的因子生成抗过拟合回测。已实证提升策略夏普比率抗极端行情能力。
1134
计算机大数据毕业设计Django+LLM大模型股票行情预测系统 量化交易分析预测系统 大数据毕设(源码+LW+PPT+讲解)
本文设计并实现了基于Django框架与大语言模型(LLM)的股票行情预测系统,融合历史行情、财经新闻及宏观指标等多源数据,采用GPT-4Temporal Fusion Transformer进行时序-文本联合建模,并通过交叉注意力机制实现跨模态融合。系统支持动态策略生成、风险预警可视化分析,在沪深300方向预测中准确率达68.3%,显著优于传统LSTM模型。
计算机毕业设计源码厂长
738
大模型在量化投资中的应用性能对比
本文探讨大语言模型(LLM)在量化投资中的实际应用,涵盖主流模型(如LLaMA3、BloombergGPT、FinBERT、AlphaSignal)在金融任务中的性能对比,重点分析其在非结构化数据处理、多模态信号融合与策略自动生成方面的能力。内容包括本地/云端部署方案、Prompt工程、FAISS向量库构建、财报季套利策略实证(年化收益27.6%),以及风险控制、硬件优化(A100集群、vLLM、FP8量化)和前沿方向(多模态分析、强化学习优化)。
weixin_33720956
499
AI智能体在量化投资中的应用架构设计实战部署
本文系统阐述AI智能体在量化投资中的落地实践,涵盖四层核心架构感知层(多源异构数据接入自动特征生成)、认知决策层(LLM高层规划+强化学习底层执行)、执行层(订单生成、风控算法交易)及记忆学习层(经验回放、向量知识库周期性再训练)。重点解析技术栈选型(LangChain/AutoGen、SB3、Backtrader)、奖励函数设计、过拟合防控、实盘延迟应对及LLM幻觉缓解策略,强调人机协同范式可解释性建设。
weixin_34396902
487
AI 基本面量化实战从理论到可部署 MVP-1.学习目标工具链
本文系统阐述AI基本面分析融合量化实践路径,聚焦可部署最小可行产品(MVP)建设。涵盖五层架构数据层(自动化获取清洗财务数据)、因子层(传统因子+遗传规划/LLM增强因子)、模型层(XGBoost等ML模型训练SHAP可解释性分析)、策略层(Qlib回测引擎、A股特有约束绩效评估)及部署层(Docker容器化+定时信号生成)。核心技术栈包括Qlib、PyTorch、PyG、Hugging Face Transformers及AutoML工具链。
shiter
108
从回测到实盘基于大语言模型的量化交易AI智能体架构实战
本文详述将大语言模型(LLM)集成至量化交易系统的端到端实践:从离线回测原型(‘龙虾’)出发,构建低延迟、事件驱动的实时交易架构;涵盖行情接入K线合成、结构化Prompt工程、模型输出解析、三层风控机制(指令级/账户级/系统级)及性能优化策略;重点解决实时推理延迟、滑点影响、模型不稳定性、极端行情误判等关键技术挑战,并提供可复用的调试排查方案。
weixin_34234721
270
TradingAgents-CN智能交易系统多智能体协作的AI金融分析平台
TradingAgents-CN是一款基于多智能体大语言模型(LLM)的中文金融交易框架,通过模拟分析师、研究员、交易员和风控专家等角色协同工作,实现技术面、基本面、新闻情绪与社交媒体数据的多维度融合分析。系统支持个股深度分析、批量股票筛选、投资组合优化及命令行程序化调用,采用FastAPI+Vue3架构,兼容Docker源码部署,适配A股市场并集成阿里百炼等中文优化LLM
皮奕清Primavera
437