ProjectsApr 3, 202616 分钟/阅读时间

智能股票分析Agent - Project Detail

智能股票分析Agent - Project Detail
Python

Stock Agent 项目说明文档

1. 项目定位

Stock Agent 是一个面向金融场景的组合型工程,包含三条主线:

  1. 新闻标签数据处理、LoRA 训练与离线评估(情感/风险)
  2. A 股数据 MCP 服务(基于 Baostock 封装工具)
  3. 多 Agent 股票分析系统(通过 LangGraph + MCP 工具链生成中文研报)

项目目标是把「数据准备 -> 模型训练 -> 评估 -> 多 Agent 应用落地」串成完整闭环。


2. 仓库结构

Finance/
├─ data_process.py                      # 新闻去重与 JSONL 导出
├─ multitask_trainer.py                 # 通用多任务训练器(LoRA + Qwen)
├─ train_multitask.py                   # 统一训练入口(sentiment + risk)
├─ train_qwen_sentiment.py              # 单任务训练入口(情感)
├─ train_qwen_risk.py                   # 单任务训练入口(风险)
├─ evaluation_pipeline.py               # 离线评估(时序切分 + 指标产物)
├─ download.py                          # Qwen 基础模型下载脚本
├─ test_qwen_sentiment.py               # 情感模型推理测试脚本
├─ test_risk_model.py                   # 风险模型推理测试脚本
├─ prompts/
│  └─ training/                         # 训练提示词模板
├─ nasdaq_news_sentiment/               # 情感数据目录
├─ risk_nasdaq/                         # 风险数据目录
├─ docs/
│  ├─ data_contract.md                  # 数据契约说明
│  ├─ engineering_baseline.md           # 工程基线
│  └─ project_star_documentation.md     # STAR 过程文档
├─ a-share-mcp-is-just-i-need/          # A 股 MCP 服务子项目
│  ├─ mcp_server.py                     # MCP 服务入口
│  └─ src/tools/*.py                    # 各类 A 股数据工具
└─ Financial-MCP-Agent/                 # 多 Agent 分析子项目
   ├─ src/main.py                       # 分析主入口
   ├─ src/agents/*.py                   # 基本面/技术面/估值/新闻/总结 Agent
   ├─ src/tools/mcp_client.py           # MCP 客户端与工具缓存
   ├─ src/tools/mcp_config.py           # MCP 服务配置
   ├─ src/utils/execution_logger.py     # 执行日志与质量指标
   ├─ reports/                          # 生成研报
   └─ logs/                             # 每次运行日志

3. 环境与依赖

3.1 Python 版本

建议 Python 3.11+(CI 使用 3.11)。

3.2 安装依赖

在仓库根目录执行:

pip install -r requirements-dev.txt

requirements-dev.txt 会包含运行依赖与工程检查依赖(pytest/ruff/mypy)。


4. 数据处理与训练线

4.1 新闻去重(data_process.py

NewsDeduplicator 使用三类信号联合判断重复新闻:

  1. 标题相似度(编辑距离 + TF-IDF 余弦)
  2. 内容重叠(MinHash 近似 Jaccard)
  3. 语义近似(SimHash 汉明距离)

处理后会导出 JSONL 数据,便于后续训练或分析任务使用。

4.2 训练器设计(multitask_trainer.py

核心能力:

  1. TaskConfig/RunConfig 配置化任务与训练参数
  2. 严格 CSV schema 校验(必需列、标签合法、文本最小长度)
  3. 基于提示模板构造监督样本
  4. 使用 Qwen CausalLM + LoRA(PEFT)进行微调
  5. 只对 Assistant: 后答案部分计入训练标签(answer-only mask)

4.3 训练入口

A. 统一多任务训练(推荐)

python train_multitask.py --model-name /path/to/Qwen

可选参数:--max-rows --max-length --epochs --batch-size --grad-acc --lr

B. 单任务训练

python train_qwen_sentiment.py
python train_qwen_risk.py

注意:这两个脚本内默认模型路径是 /root/code/Finance/Qwen,在本地环境需改为你自己的模型路径。


5. 评估线

使用 evaluation_pipeline.py 对离线预测结果进行评估:

python evaluation_pipeline.py \
  --csv <your_labeled_csv> \
  --label-col <true_label_col> \
  --pred-col <pred_label_col>

默认行为:

  1. Date 时序切分(--time-split 支持比例或具体日期)
  2. 过滤非法标签(默认 1,2,3,4,5
  3. 输出 metrics.jsonmetrics.mdgroup_metrics.csv

关键指标:accuracymacro_f1、混淆矩阵、分组(按股票)指标。


6. A 股 MCP 服务子项目

位置:a-share-mcp-is-just-i-need/

入口:mcp_server.py

职责:

  1. 启动 FastMCP 服务(stdio 传输)
  2. 注入 BaostockDataSource
  3. 注册股票、财报、指数、宏观、市场概览、新闻抓取等工具

运行示例(在仓库根目录):

python a-share-mcp-is-just-i-need/mcp_server.py

服务被 Financial-MCP-Agent 通过 MCP 客户端拉取工具使用。


7. 多 Agent 分析子项目

位置:Financial-MCP-Agent/

7.1 配置

先复制并编辑环境变量:

  • 模板文件:Financial-MCP-Agent/.env.example
  • 实际文件:Financial-MCP-Agent/.env

关键变量:

  1. OPENAI_COMPATIBLE_API_KEY
  2. OPENAI_COMPATIBLE_BASE_URL
  3. OPENAI_COMPATIBLE_MODEL
  4. USE_LOCAL_MODEL(默认 api
  5. AGENT_EXECUTION_MODEbaostock_parallel3 | hybrid | parallel | serial
  6. MCP_TOOL_CACHE_TTL_SECONDS

7.2 MCP 配置

Financial-MCP-Agent/src/tools/mcp_config.py 里预置了 MCP 脚本路径:

  • D:/desktop/intern/python/stockAgent/Finance/a-share-mcp-is-just-i-need/mcp_server.py

如果你迁移了项目目录,需要同步修改这个路径。

7.3 运行方式

python Financial-MCP-Agent/src/main.py --command "分析贵州茅台(600519)"

流程概览:

  1. 主程序解析公司名/股票代码
  2. 根据执行模式并行或串行调度四个分析 Agent
  3. summary_agent 汇总并生成最终中文 Markdown 研报
  4. 报告写入 Financial-MCP-Agent/reports/
  5. 全量执行信息写入 Financial-MCP-Agent/logs/<execution_id>/

7.4 日志与质量指标

execution_logger.py 会自动记录:

  1. Agent 开始/结束
  2. LLM 交互输入输出
  3. MCP 工具调用
  4. 质量指标(工具失败率、输出无效率、平均延迟、报告空节率等)

每次运行都会生成:

  • execution_info.json
  • EXECUTION_SUMMARY.md
  • quality/quality_summary.json
  • reports/final_report.md

8. CI 与工程基线

CI 文件:.github/workflows/python-ci.yml

当前 CI 是 smoke check:

  1. 安装 requirements-dev.txt
  2. 运行 compileall
  3. 对关键文件 py_compile

这保证主干脚本至少能通过语法级校验。


9. 数据契约(必须遵守)

参考:docs/data_contract.md

训练侧(multitask_trainer.py)要求:

  1. 必须存在 text_collabel_colstock_col
  2. 文本非空且长度 >= min_text_length
  3. 标签必须可转数值且不为 0
  4. 标签需在允许集合内(默认 1~5)

评估侧(evaluation_pipeline.py)要求:

  1. 必须存在日期列、分组列、真实标签列、预测标签列
  2. 标签会数值化并过滤非法值
  3. 清洗后无有效样本会直接 fail-fast

10. 常见问题与排查

  1. 训练启动即失败(Schema 错误)
  • 先核对 CSV 列名是否和 TaskConfig 一致。
  • 检查标签列是否含非数字/超出 1~5。
  1. 单任务脚本找不到模型路径
  • 修改 train_qwen_sentiment.py / train_qwen_risk.pymodel_name 的默认值。
  1. 多 Agent 跑不起来(MCP 工具为空)
  • 检查 mcp_config.py 里的 MCP_SERVER_SCRIPT 是否是你的真实路径。
  • 确认 a-share-mcp-is-just-i-need/mcp_server.py 可独立启动。
  1. API 报错
  • 校验 Financial-MCP-Agent/.env 的 OpenAI 兼容接口配置。
  1. 输出乱码
  • 统一使用 UTF-8 编码编辑器;项目代码中已启用 PYTHONUTF8 与 stdout/stderr UTF-8 reconfigure。

11. 建议工作流

推荐按以下顺序使用项目:

  1. 准备并清洗数据(必要时先去重)
  2. train_multitask.py 进行训练
  3. evaluation_pipeline.py 产出指标报告
  4. 配置 .env 并运行 Financial-MCP-Agent/src/main.py 做端到端分析
  5. 通过 logs/<execution_id>/EXECUTION_SUMMARY.md 复盘质量与稳定性

以上流程能覆盖研究、建模、评估到应用交付的完整链路。

运行流程

这个项目的 Agent 流程可以理解成:“并行分析 + 汇总成报告”。核心入口在 main.py

1. 入口阶段(构造初始状态)

  • 读取用户 query(命令行或交互输入)。

  • 从 query 里抽取公司名和 6 位股票代码,并规范成 sh./sz. 格式。

  • 生成时间上下文(日期、星期、时间戳)。

  • 初始化

    AgentState:

    • data: query、股票信息、时间信息
    • messages: 对话消息列表
    • metadata: 执行元数据 定义在 state_definition.py

2. 工作流编排(LangGraph)

  • start_node

    后并行启动 4 个分析 Agent:

    • fundamental_analyst
    • technical_analyst
    • value_analyst
    • news_analyst
  • 四个节点都完成后,进入 summarizer,最后到 END。 这部分也是在 main.py 里组装。

3. 每个分析 Agent 的内部流程(四个基本一致)fundamental_agent.py 为例:

  1. 从 state.data 取 query、股票代码、时间信息。
  2. 读取环境变量里的 LLM 配置(OpenAI-compatible API)。
  3. 调用 MCP 客户端拿可用工具(缓存复用):
  4. 用 create_react_agent(llm, mcp_tools) 创建 ReAct Agent。
  5. 组装该角色专属提示词(基本面/技术面/估值/新闻)。
  6. agent.ainvoke(...) 让它自动“思考+选工具+调用工具+生成分析”。
  7. 把结果写回 state.data(如 fundamental_analysis),并更新 metadata、messages。
  8. 出错时写 *_analysis_error,不中断全局流程。

4. MCP 工具是怎么被调用的

  • Financial-Agent 侧通过 MultiServerMCPClient 连接 MCP Server。

  • 服务配置在mcp_config.py,指向:

  • MCP Server 暴露了行情、财报、宏观、指数、新闻抓取等工具,ReAct Agent 会按需调用。

5. 汇总 Agent(summary_agent)流程summary_agent.py

  1. 收集四个分析结果 + 可能的 error 信息。
  2. 选择汇总模型:
    • USE_LOCAL_MODEL=local:本地 FinR1
    • 否则走 OpenAI-compatible API
  3. 生成统一 Markdown 报告(含结论/建议/风险)。
  4. 清理输出(去掉代码块标记等)。
  5. 保存到 Financial-MCP-Agent/reports/,并把 final_report、report_path 写回状态。

6. 日志与可观测性

  • 每个 Agent 开始/结束、LLM 输入输出、工具调用都会记录。
  • 日志系统在 execution_logger.py
  • 每次执行会生成独立日志目录,便于回溯。

如果你愿意,我下一步可以给你画一张“这个流程的时序图(Mermaid)”,你看起来会更直观。

运行工作流示意图

Flowchart 渲染中...
Flowchart 渲染中...

示例报告

贵州茅台(sh.600519) 综合分析报告

分析基准日期:2026年04月02日 (2026-04-02) 星期四 13:17:15

执行摘要

贵州茅台作为中国高端白酒的绝对龙头,其基本面展现出无与伦比的护城河与财务实力。公司拥有高达91.93%的毛利率和52.27%的净利润率,资产负债率极低(0.19%),现金流充沛,是典型的“现金牛”企业。近期,公司时隔八年首次上调核心产品“飞天茅台”的零售指导价,为市场注入强心剂。

从技术面看,股价在经历年初震荡后企稳回升,当前价格(约10934元)站稳于所有主要均线之上,呈现多头排列,短期目标指向11200-11300元阻力区。估值方面,当前约20.30倍的市盈率(PE TTM)处于近一年估值区间的中低位,虽较同业有显著溢价,但考虑到其超高的盈利质量与品牌稀缺性,估值具备一定合理性。

综合来看,茅台的基本面根基极为稳固,短期提价利好与稳健的财务表现构成核心支撑。然而,公司也面临增长预期放缓、消费结构变化及高估值溢价等挑战。投资建议为“持有”至“谨慎增持”,适合风险承受能力中等、追求长期稳定回报的价值型投资者。短期目标价11500-11650元(对应前期高点),长期投资需密切关注业绩增速与行业政策变化。

  • 风险等级:中低(主要风险来自行业政策与估值波动,而非公司经营)
  • 预期回报:中期(1-3年)年化回报预期约8-12%,主要来源于业绩增长与估值修复。

公司概况

贵州茅台酒股份有限公司是中国白酒行业的标杆企业,总部位于贵州省仁怀市茅台镇。公司核心产品为“贵州茅台酒”,其中“飞天茅台”是其最具代表性的高端产品,享有“国酒”美誉。此外,公司还生产“茅台王子酒”、“茅台迎宾酒”等系列酒。其独特的酿造工艺、不可复制的地理环境(赤水河、微生物群)以及深厚的文化底蕴,共同构筑了其强大的品牌护城河。公司是A股市场市值最高的消费股之一,在高端白酒市场占据主导地位。

基本面分析

基于2024年年报数据,贵州茅台的基本面表现堪称卓越:

  • 超凡的盈利能力:毛利率91.93%,净利润率52.27%,净资产收益率(ROE)高达38.43%,各项指标均处于行业顶端,体现了强大的品牌定价权。
  • 极其稳健的财务状况:资产负债率仅为0.19%,几乎无有息负债;流动比率4.45,速动比率3.49,现金及等价物充裕,财务风险极低。
  • 高质量的现金流:经营活动现金流净额与营业收入之比为54.10%,净利润现金含量(经营现金流/净利润)达103.50%,利润转化为现金的能力极强。
  • 稳健的成长性:2024年实现营收1706.12亿元,净利润893.35亿元,同比分别增长15.66%和15.24%,在庞大基数上保持了双位数增长。
  • 慷慨的股东回报:2024年实施两次分红,全年合计每10股派发547.58元(含税),分红总额巨大,体现了公司回馈股东的意愿。

风险点:2025年上半年营收增速降至个位数(9.16%),合同负债同比大幅下降42.59%,经营性现金流下滑,这些信号提示增长动能可能面临阶段性压力。

技术分析

截至2026年4月1日收盘(10934.1元),技术面呈现震荡上行格局:

  • 趋势与均线:股价自1月底低点(9917元)反弹后,已站稳所有主要移动平均线(5日、20日、60日)之上,均线系统呈多头排列,短期趋势偏强。
  • 关键价位
    • 阻力位:11000元(近期心理关口)、11200-11300元(2月平台)、11650元(2月5日前高)。
    • 支撑位:10500元(3月多次测试)、10400元(3月4日低点)、10000元(强心理支撑)。
  • 成交量与指标:上涨时伴有放量(如1月29日),调整时缩量,量价关系健康。相对强弱指标(RSI)处于50-60的中性偏强区域,未出现超买信号。
  • 短期展望:若能伴随成交量有效突破11000元阻力,则有望上攻11200-11300元区域,甚至挑战前期高点11650元。若回调,10500元将成为重要支撑。

估值分析

以2026年4月1日股价10934.1元计算:

  • 当前估值:市盈率(PE TTM)20.30倍,市净率(PB MRQ)7.11倍,市销率(PS TTM)10.05倍。
  • 历史区间:当前PE处于近一年(18.41-23.87倍)的中低位,估值从2025年4月的高点有所回落。
  • 行业对比:相较于五粮液(PE 14.25倍)和泸州老窖(PE 12.37倍),茅台享有显著的估值溢价(PE溢价42%-64%)。此溢价源于其更高的ROE(38.43% vs 行业约20%)、净利润率及无可替代的品牌地位。
  • 股息率:基于2024年分红和当前股价,股息率约为0.50%,绝对分红金额高但收益率偏低,因其股价基数大。
  • 估值结论:当前估值反映了市场对其确定性和稀缺性的认可,处于合理区间。但高溢价也意味着对业绩持续增长的预期较高,若增长不及预期,可能面临估值压缩风险。

新闻分析

近期市场情绪受重大事件主导,呈现“利好与隐忧并存”的复杂局面:

  • 核心利好(强烈正面):2026年3月31日起,飞天茅台自营渠道零售指导价从1499元/瓶上调至1539元/瓶。这是时隔八年的首次提价,被市场解读为公司巩固品牌价值、直接增厚利润的强力信号,当日股价应声上涨。
  • 业绩现实(谨慎中性):与提价利好相对,市场同时关注到公司2025年增长目标下调至9%,以及上半年营收增速降至个位数、合同负债下滑等迹象,担忧其增长进入“新常态”。
  • 资金与情绪:近60个交易日机构评级以“买入”为主,近5日资金呈净流入状态,显示主流资金在提价刺激下态度偏积极。
  • 综合影响:提价新闻短期内极大地提振了市场信心,对冲了部分对增长放缓的担忧。市场下一步将聚焦于提价对2026年第一季度及全年业绩的实际贡献能否得到验证。

综合评估

四种分析方法呈现出一幅“强基本面支撑下的谨慎乐观”图景:

  • 一致点
    1. 强大的护城河:所有分析均确认茅台无与伦比的品牌、财务和行业地位是其最核心的投资价值。
    2. 短期催化剂:技术面的突破态势与新闻面的提价利好形成共振,共同指向短期股价具备上行动能。
    3. 估值锚定:估值分析显示当前PE处于近一年中低位,为股价提供了一定的安全边际,与技术面的支撑位形成呼应。
  • 分歧点
    1. 增长前景:基本面分析中的增长放缓信号(合同负债下降、现金流下滑)与新闻分析中的提价利好形成短期与中长期预期的博弈。
    2. 风险侧重:基本面与估值分析更关注长期的公司质地与估值合理性,而技术分析和新闻分析更聚焦于短期价格动能和市场情绪变化。

综合视角:茅台的投资故事正从“高速增长”向“高质量稳健增长+定价权兑现”过渡。提价是证明其定价权的关键一步,但市场需要后续财报数据来证实“价增”能否抵消或超越“量缓”的影响。

风险因素

  1. 行业与政策风险:白酒行业受宏观经济周期影响显著;消费税改革、限制公务消费等政策变动可能冲击高端白酒需求。
  2. 公司特定风险
    • 增长失速风险:营收与利润增速若持续放缓,可能无法支撑当前估值溢价。
    • 消费断层风险:年轻一代消费习惯变化,对白酒的接受度可能低于上一代。
    • 渠道管理风险:控价、打假及渠道库存管理挑战始终存在。
  3. 估值与市场风险:股价绝对价位高,流动性相对受限;市场情绪转变可能导致高估值股票出现较大波动。
  4. 产能与原材料风险:核心产品产能受地理环境严格限制,扩张空间有限;原材料(高粱、小麦)价格波动影响成本。

投资建议

  • 评级持有 / 谨慎增持。对于已持仓的投资者,建议继续持有;对于新建仓投资者,可考虑在回调至关键支撑位时分批布局。
  • 目标价格
    • 短期(3-6个月):11500 - 11650元(挑战前期高点)。
    • 中期(1年):基于2026年业绩增长及提价效应,合理估值区间对应股价12000 - 12500元。
  • 投资时间范围:适合中长期投资(1年以上),以分享公司稳健增长和分红回报。
  • 适合投资者类型:价值投资者、长期资产配置者、对波动率有一定承受能力的稳健型投资者。
  • 操作提示:避免追高,可关注10500-10700元区域的支撑买入机会。设置止损参考位于10400元下方。投资应占总资产比例不宜过高,以控制单一标的风险。

附录:数据来源与限制

  • 数据来源:本报告分析基于提供的模拟基本面、技术、估值及新闻舆情数据。这些数据模拟了截至2026年4月2日的市场公开信息,包括年度财务报告、实时行情、估值指标及财经新闻摘要。
  • 数据限制与说明
    1. 部分技术指标(如MACD的具体数值)为基于价格走势的推断,非实时精确计算。
    2. 新闻分析基于有限的关键事件摘要,未能涵盖所有市场舆论和深度解读。
    3. 估值分析中的行业对比数据可能不完整,仅列举了部分主要竞争对手。
    4. 所有未来业绩预测(如提价对利润的影响)均为定性分析,存在不确定性。
  • 报告时效性:本报告结论基于分析基准日2026年04月02日的市场状况和信息。投资者在决策前应获取并考虑最新的财务数据、股价走势及市场动态。

**分析基准时间:2026年04月02日 (2026-04-02) 星期四 13:17:15