基于LLM大模型的股票基金周预测Agent
本文展示了一个完整的、生产级的AI量化分析Agent的实现过程。通过Python强大的数据处理生态(pandas, AKShare)与LLM的推理能力结合,成功将原本分散的、异构的金融数据转化为可解释的投资决策。全维度视角的自动化:机器不会疲劳,能够每周例行检查数十个维度的指标。逻辑的可解释性:相比黑盒的神经网络,LLM输出的文本逻辑让投资者敢于参考。防过拟合的设计:通过周频聚合和宏观数据对齐,最
基于LLM大模型的股票基金周预测Agent
利用大语言模型,将复杂的宏观经济、市场情绪与量化数据转化为可执行的交易洞察,打造你的私人AI投资分析师。在这个AI重塑金融的时代,掌握代码+模型+金融逻辑的复合能力,将是量化投资者的终极护城河。

1 系统架构:从数据孤岛到AI决策
1.1 痛点分析与解决方案
✅ 传统量化的局限性
在金融市场中,传统的量化模型擅长处理结构化数据(如价格、成交量),但面对非结构化信息(如新闻舆情、政策风向)往往束手无策。同时,普通投资者难以在短时间内综合处理PMI数据、美债收益率、北向资金流向以及技术面形态等异构信息。
✅ LLM驱动的Agent架构
本项目旨在构建一个全维度市场分析助手。它不仅仅是一个预测工具,更是一个自动化ETL(提取、转换、加载)与推理系统。系统采用模块化设计,核心流程如下:
- 数据层:通过AKShare接口聚合基金日线、宏观经济(PMI/CPI)、资金面(北向/融资)、衍生品(期权波动率QVIX/股指期货基差)及新闻文本。
- 处理层:执行严格的时间对齐与清洗,将不同频率(日频、月频)的数据统一降维至周频,以过滤短期噪音。
- 认知层:将清洗后的多维数据构建为结构化Prompt,投喂给LLM(如OpenAI模型)。
- 决策层:输出JSON格式的预测结果(上涨/下跌)及深度逻辑分析,并进行历史回测验证。
1.2 核心技术决策
在构建此系统时,做出了三个关键的技术决策,以确保预测的科学性与可用性:
| 决策点 | 方案选择 | 理由 |
|---|---|---|
| 时间周期 | 周频聚合 (Weekly) | 日频噪音过大,月频滞后严重。周频在信号稳定性与反应速度间取得了最佳平衡。 |
| 数据对齐 | Merge Asof (Backward) | 宏观数据(如PMI)按月发布,必须严格防止未来函数,确保预测时只能看到已发布的数据。 |
| 输出格式 | JSON结构化 | 强制LLM输出JSON,便于程序解析prediction(结论)和reason(逻辑),实现自动化回测。 |
2 数据工程:清洗与多频数据对齐
2.1 高级重采样:周频数据的聚合艺术
金融数据具有不同的物理含义,不能简单地取最后一条数据。实现了一个通用的聚合函数 aggregate_to_weekly,它支持针对不同字段采用不同的聚合策略:
- Last(收盘价/指标):取本周最后一个交易日的数据。
- Sum(成交量/额):累加本周所有交易日的数值,反映一周的活跃度。
- Mean(情绪/广度):取本周平均值,平滑波动。
def aggregate_to_weekly(
df: pd.DataFrame,
date_col: str,
value_col: str | list[str],
method: str = "last"
) -> pd.DataFrame:
"""
功能:将日频数据重采样为周频(以周五为锚点)。
核心逻辑:利用pandas强大的resample功能,处理金融时间序列。
"""
if df.empty:
return pd.DataFrame()
df = df.copy()
df[date_col] = pd.to_datetime(df[date_col])
df.set_index(date_col, inplace=True)
# 'W-FRI' 表示重采样周期为每周,结束于周五
if method == "last":
weekly = df.resample("W-FRI")[value_col].last()
elif method == "mean":
weekly = df.resample("W-FRI")[value_col].mean()
elif method == "sum":
weekly = df.resample("W-FRI")[value_col].sum()
else:
raise ValueError("Unsupported method")
# 格式化重置索引,便于后续合并
if isinstance(weekly, pd.Series):
weekly_df = weekly.to_frame(name=value_col if isinstance(value_col, str) else None)
else:
weekly_df = weekly
weekly_df.index.name = "date"
weekly_df = weekly_df.reset_index()
return weekly_df
2.2 严防未来函数:宏观数据异步合并
这是量化回测中最容易踩的坑。例如,10月份的PMI数据通常在10月31日发布。当我们站在11月3日(周五)进行预测时,我们应该能看到10月31日的数据。如果简单的按月份Join,可能会导致日期错位。
使用了 pd.merge_asof,这是处理非同步时间序列的神器。设置 direction='backward' 确保对于每一个周频时间点,系统只能回头看最近一次发布的宏观数据。
def merge_macro_data(weekly_df: pd.DataFrame, macro_df: pd.DataFrame, date_col: str, value_col: str) -> pd.DataFrame:
"""
使用 merge_asof 高效合并宏观数据 (月频 -> 周频)
防止引入未来数据 (Look-ahead Bias)
"""
if macro_df.empty:
return weekly_df
w_df = weekly_df.sort_values("date").copy()
m_df = macro_df.sort_values(date_col).copy()
# 确保时间列格式统一
w_df["date"] = pd.to_datetime(w_df["date"])
m_df[date_col] = pd.to_datetime(m_df[date_col])
# 核心:direction="backward"
# 寻找 <= current_date 的最近一条宏观记录进行填充
merged = pd.merge_asof(w_df, m_df, left_on="date", right_on=date_col, direction="backward")
# 清理多余的时间列,保持DataFrame整洁
if date_col != "date":
merged.drop(columns=[date_col], inplace=True)
return merged
2.3 舆情处理:非结构化文本的降维
新闻数据极其嘈杂。将一周内散乱的新闻标题进行聚合与去重,生成一个简短的周度新闻摘要。
这为LLM提供了一个定性的市场环境背景,使其能理解为何下跌(例如:突发利空 vs 正常回调)。
3 特征工程:构建全维度市场感知
3.1 关键特征因子的选择
为了让LLM做出准确判断,需要投喂具有高解释力的因子。本项目集成了以下几类核心数据:
✅ 资金博弈指标
- 北向资金 (Northbound):Smart Money的动向,周累计净流入是核心看点。
- 融资余额 (Margin Balance):代表杠杆资金(散户/激进游资)的情绪。高位回落通常是危险信号。
✅ 衍生品情绪指标
- QVIX (期权波动率):类似美股VIX。低位(15-20)代表情绪稳定,高位(>30)代表恐慌。
- IC基差率 (IC Basis):中证500股指期货的升贴水。深贴水收敛通常是利好,贴水突然扩大则暗示机构在疯狂对冲。
✅ 宏观与外围锚点
- 美债10Y & USD/CNH:定义了全球资产定价的地心引力。汇率贬值往往压制A股估值。
- 铜/黄金比价:铜代表经济需求,黄金代表避险。两者的背离隐含了经济周期的位置。
3.2 动态Prompt构建策略
仅仅有数据是不够的,我们需要将数据转化为LLM能理解的叙事。系统将清洗好的DataFrame切片,提取最近 LOOKBACK_WEEKS(如20周)的数据,并结合特定的角色设定构建Prompt。
Prompt的设计遵循了 CoT (Chain of Thought) 思维链模式:
- 角色设定:量化交易专家。
- 数据说明:解释每个指标的含义(如不要见到IC贴水就看空)。
- 分析原则:硬性规则(如趋势优先原则、宏观权重 > 技术权重)。
- 数据输入:JSON格式的历史行情。
- 输出约束:强制要求先给出
reason再给出prediction。
4 智能预测:LLM推理与回测闭环
4.1 预测主循环逻辑
系统的核心在于回测循环。它模拟了真实的时间流逝:对于每一个历史时间点,模型只能看到该点之前的数据。
# ... (前序数据聚合代码) ...
# 模拟回测最近 20 周
test_indices = range(len(merged) - 20, len(merged))
for i in test_indices:
# 切片:只获取当前时间点之前的数据
history_df = merged.iloc[:i]
# 1. 构建Prompt
prompt = build_prompt(history_df, lookback=20, freq="周")
# 2. 调用LLM API
prediction_text = call_openai_chat(prompt)
# 3. 解析JSON结果
# 使用正则表达式提取JSON,增强鲁棒性
# ... (JSON解析逻辑) ...
# 4. 对比实际涨跌幅
actual_change = merged.iloc[i]['fund_change']
actual_type = "上涨" if actual_change > 0 else "下跌"
# 5. 打印实时日志
print(f"预测: {prediction_type} | 实际: {actual_type} | {'✅' if is_correct else '❌'}")
4.2 LLM的深度推理能力展示
实际运行可以看到LLM并非简单的猜涨跌,而是展现了惊人的多维度逻辑交叉验证能力。
案例分析:
在 2025-09-05 这一周,市场大跌1.84%,技术面看似走坏。但LLM在预测下一周(09-12)走势时,给出了 上涨 的预测,并给出了极具说服力的理由:
LLM Reasoning:
"综合分析显示趋势处于强劲的主升浪阶段。
1. **趋势与技术面**:价格收复失地重回MA5之上,均线多头排列完好。
2. **资金与情绪**:最显著的利好信号是 **IC基差率收敛至-0.11%(几近转正)**,显示市场极度乐观,空头对冲需求极弱;同时 **融资余额逆势增加**,杠杆资金大举进场。
3. **宏观环境**:美债收益率下行减轻外部压力,铜价上涨配合PMI回升,基本面复苏预期增强。
综上,资金面狂热配合宏观边际改善,看好下周惯性上冲。
实际结果:下一周确实上涨了3.32%。这一案例证明了LLM能够识别出缩量回调和基差异动等高级信号,通过宏观与微观的共振判断,过滤了单纯K线形态的欺骗性。
5 总结与展望
本文展示了一个完整的、生产级的AI量化分析Agent的实现过程。通过Python强大的数据处理生态(pandas, AKShare)与LLM的推理能力结合,成功将原本分散的、异构的金融数据转化为可解释的投资决策。
该系统的核心价值在于:
- 全维度视角的自动化:机器不会疲劳,能够每周例行检查数十个维度的指标。
- 逻辑的可解释性:相比黑盒的神经网络,LLM输出的文本逻辑让投资者敢于参考。
- 防过拟合的设计:通过周频聚合和宏观数据对齐,最大限度地还原了真实的决策场景。
未来优化方向:
- 引入RAG (检索增强生成),连接实时财经新闻库,增强对突发事件的感知。
- 引入向量数据库,存储历史相似K线形态,让LLM具备历史类比的能力。
- 细化仓位管理,让Agent不仅输出涨跌,还能建议具体的加减仓比例(如凯利公式结合)。
更多推荐

所有评论(0)