基于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(情绪/广度):取本周平均值,平滑波动。
defaggregate_to_weekly(df:pd.DataFrame,date_col:str,value_col:str|list[str],method:str="last")->pd.DataFrame:""" 功能:将日频数据重采样为周频(以周五为锚点)。 核心逻辑:利用pandas强大的resample功能,处理金融时间序列。 """ifdf.empty:returnpd.DataFrame()df=df.copy()df[date_col]=pd.to_datetime(df[date_col])df.set_index(date_col,inplace=True)# 'W-FRI' 表示重采样周期为每周,结束于周五ifmethod=="last":weekly=df.resample("W-FRI")[value_col].last()elifmethod=="mean":weekly=df.resample("W-FRI")[value_col].mean()elifmethod=="sum":weekly=df.resample("W-FRI")[value_col].sum()else:raiseValueError("Unsupported method")# 格式化重置索引,便于后续合并ifisinstance(weekly,pd.Series):weekly_df=weekly.to_frame(name=value_colifisinstance(value_col,str)elseNone)else:weekly_df=weekly weekly_df.index.name="date"weekly_df=weekly_df.reset_index()returnweekly_df2.2 严防未来函数:宏观数据异步合并
这是量化回测中最容易踩的坑。例如,10月份的PMI数据通常在10月31日发布。当我们站在11月3日(周五)进行预测时,我们应该能看到10月31日的数据。如果简单的按月份Join,可能会导致日期错位。
使用了pd.merge_asof,这是处理非同步时间序列的神器。设置direction='backward'确保对于每一个周频时间点,系统只能回头看最近一次发布的宏观数据。
defmerge_macro_data(weekly_df:pd.DataFrame,macro_df:pd.DataFrame,date_col:str,value_col:str)->pd.DataFrame:""" 使用 merge_asof 高效合并宏观数据 (月频 -> 周频) 防止引入未来数据 (Look-ahead Bias) """ifmacro_df.empty:returnweekly_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整洁ifdate_col!="date":merged.drop(columns=[date_col],inplace=True)returnmerged2.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))foriintest_indices:# 切片:只获取当前时间点之前的数据history_df=merged.iloc[:i]# 1. 构建Promptprompt=build_prompt(history_df,lookback=20,freq="周")# 2. 调用LLM APIprediction_text=call_openai_chat(prompt)# 3. 解析JSON结果# 使用正则表达式提取JSON,增强鲁棒性# ... (JSON解析逻辑) ...# 4. 对比实际涨跌幅actual_change=merged.iloc[i]['fund_change']actual_type="上涨"ifactual_change>0else"下跌"# 5. 打印实时日志print(f"预测:{prediction_type}| 实际:{actual_type}|{'✅'ifis_correctelse'❌'}")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不仅输出涨跌,还能建议具体的加减仓比例(如凯利公式结合)。