01项目概览
金融研究 Agent
从新闻中提取事件信号,再用历史数据检验判断。
这是“LLM 在金融中的应用”课程的小组项目。围绕智谱与 MiniMax,我把财务对比作业扩展为数据采集、模型分析和策略回测系统:新闻与公告提供依据,行情用于核对信号,模拟交易检验这些判断是否有用。
02项目目标
检验研究判断
模型能写出流畅的公司分析,但依据是否可靠、信号是否及时、按它行动是否有效,需要分别验证。我希望把这些问题接到同一套流程里,让每次修改都有结果可对照。
留下依据
保留新闻全文、发布时间、公告原文和行情,判断可以回到具体材料,检查是否重复计算消息或使用了事后信息。
分层检验
先核对模型有没有识别到事件、方向是否合理,再比较策略与简单持有的结果,区分理解问题和交易规则问题。
03研究流程
从材料到验证
数据准备
采集东方财富新闻全文、港交所公告和富途分钟行情,加入恒生科技指数作为参照。新闻按链接、标题和日期去重,再统一公司标识和时间,便于查询消息发布前后的价格变化。
| 数据 | 规模 | 用途 |
|---|---|---|
| 新闻全文 | 3,034 条 | 识别公司事件、比较报道密度与方向 |
| 港交所公告 | 63 份 | 核对正式披露,保留 PDF 原文 |
| 一分钟行情 | 105,397 条 | 对齐信号与价格,包含两家公司及恒生科技指数 |
数据覆盖 2026 年 1 月 8 日至 7 月 7 日。最终入库量与原始抓取量分开统计,避免把重复新闻计入研究样本。
事件信号
先过滤纯行情复述和行业联动,再让模型判断是否出现公司自身的新事件,并分别给出利好、利空分数。一条新闻可以同时包含两种因素。
程序进一步结合报道密度、方向一致性、财务指标和量价变化合成信号。资料不足时降低置信度,覆盖度过低时不输出交易判断。
事件核对
从公告、新闻量异常和超额收益异常中筛选候选事件,经人工与模型辅助核验,得到 33 个标注事件。开发阶段为其中 12 个事件制作逐时对照图,检查信号出现的时间与方向。
下图依次展示分钟股价、模型利好与利空评分、新闻数量。三者共用时间轴,可以发现信号究竟跟随了新事件,还是只在价格变化后复述行情。
策略回测
回测把信号转成模拟持仓和调仓动作,计算收益与风险。策略从单只股票试验扩展为“智谱、MiniMax、现金”三方调仓:按事件加减仓,在信号不足或波动过大时保留现金。
图中深蓝线是组合策略,紫色虚线是两只股票等权持有的基准;底部黄色区域表示现金仓位。收益与仓位放在一起,才能解释策略在哪些阶段参与了上涨、在哪些阶段减少了损失。
| 回测范围 | 组合策略 | 等权持有 |
|---|---|---|
| 全期:2026 年 1—7 月 | 约 +94% | 约 +240% |
| 后期:6 月 1 日—7 月 7 日 | 约 −4.6% | 约 −27.5% |
组合在全期跑输等权持有,在后期下跌中损失较小。回测未计手续费和滑点,后期数据也参与过迭代,波动阈值在观察全部数据后选定;这些结果属于历史模拟,不能当作独立样本外验证。
04实现逻辑
技术实现
系统用 Python 脚本和 Notebook 组织研究,SQLite 保存数据。模型只负责理解文字,数值合成、交易规则和收益核算由程序完成,便于逐层重跑和比较。
技术分工
| 部分 | 实现方式 | 在项目中的作用 |
|---|---|---|
| 数据采集 | Python · HTTP · futu-api | 抓取公告、新闻全文与分钟行情,清洗后入库 |
| 数据保存 | SQLite | 按公司和时间关联新闻、行情、公告与评分 |
| 文字理解 | DeepSeek API | 按 JSON 输出事件类型、方向评分和财务指标 |
| 信号与决策 | Python 分层模块 | 合成分数、检查覆盖度,按阈值和风控规则生成动作 |
| 验证与展示 | 回测引擎 · Notebook | 核对事件、计算收益与风险,生成对照图和策略日志 |
代码结构
scripts/采集入库- 分别抓取公告、新闻、全文和行情;清洗脚本去重,入库脚本写入数据库。
db/research.db研究数据- 按职责保存公司、新闻、行情、公告、事件标注和评分,支持时间对齐查询。
agent/v2/信号处理- 封装模型调用,分别处理事件、情绪聚合、基本面和量价,再由 signal_composer.py 合成。
agent/v3/策略回测- backtest_engine.py 统一读取数据和计算指标;strategy_portfolio_v2.py 实现三方调仓。
evaluation/事件评估- 保存事件参照集、阈值搜索结果和评估图;logs/ 与 report/ 留存运行和迭代记录。
评分与合成
通过规则筛选的新闻进入 DeepSeek,得到公司相关性、事件类型及独立的利好、利空分数。程序用两者之差表示方向,再根据报道密度、一致性、基本面和量价信息合成信号。
模型标识、提示词和输入内容共同生成 SHA-256 缓存键。相同请求优先读取已有评分,调整合成公式和策略时,不必重新调用模型。缺少某类数据时,程序重分配权重并降低置信度。
数据与回测
新闻保留链接、正文和发布时间;行情以公司与时间建立索引。回测引擎按交易日读取数据,将分钟行情聚合为日线收盘价,统一记录每笔模拟交易的入场、出场、方向、盈亏和信号来源。
评估分为 1 月 9 日至 2 月 27 日、3—5 月、6 月 1 日至 7 月 7 日三个阶段。相同引擎计算策略和持有基准的收益、回撤等指标,策略文件可以替换,计算口径保持一致。
课程使用的电话会议文本依据公开财报改写,属于模拟材料;新闻、公告和行情另行采集保存。
05我的工作
数据、信号与验证
V1 基础规则 Agent 由组内其他成员完成。我负责其余部分,包括数据管道、V2 模型信号、回测引擎、多因子策略构建与调优,以及报告整理。
- 搭建数据管道采集全文、设计数据库、清洗去重并核对覆盖情况,让分析能追溯到原始材料。
- 扩展 V2 信号用模型处理语境和事件类型,拆分评分、信号合成和决策规则,加入缓存以支持重复调试。
- 建立评估流程整理事件参照集,检查方向、覆盖与误报;再通过回测比较不同规则的结果。
- 迭代组合策略从单标的试验扩展到两只股票与现金的组合,记录基准差异、失败原因和后验偏差。
修正误过滤
最初只要标题含“涨超”等价格词,就会被当成行情复述丢弃,连“模型上线后股价上涨”这样的有效新闻也被过滤。我改成同时检查事件词,并优先读取正文:只有包含涨跌描述、却没有事件信息的新闻才排除。
同一开发集的 12 个事件中,方向判断从 7 个正确提高到 10 个正确。剩下两次遗漏分别来自配股消息的方向误读,以及新闻源没有覆盖的公告事件,后续需分别改善理解与数据覆盖。
06完成情况
验证结果
已经完成
- 数据采集、清洗与 SQLite 存储。
- 结构化事件评分、信号合成与策略回测。
- 事件对照图、组合结果与 35 页研究报告。
事件评估
- 1—2 月开发集:12 个事件,方向判断 10 个正确。
- 3—5 月训练集:6 个标注事件、120 个评估时刻。
- 阈值 0.35 下,召回率 66.67%,精确率 9.30%,仍有较多信号未被标注集确认。
项目完成到研究与历史模拟阶段。下一步应冻结规则,在新时段加入交易成本做滚动验证,检查现有判断能否延续。