Skip to content

10.10 PrimoAgent - 轻量级多智能体股票分析系统

本节概述

在深入学习了 TradingAgent 这个复杂的15节点系统后,我们来看一个更轻量但同样强大的替代方案——PrimoAgent。这是一个基于 LangGraph 的顺序流水线系统,通过4个专业化智能体协作完成股票分析和交易信号生成。

项目地址: https://github.com/ivebotunac/PrimoAgent


项目定位

PrimoAgent 是一个 AI 驱动的股票分析系统,旨在提供每日交易洞察和预测次日价格走势。该平台将自然语言处理(NLP)技术分析投资组合管理相结合,以增强股票市场的决策能力,最大限度降低风险。

核心特点

  • 顺序流水线架构: 4个智能体按序执行,每个建立在前一个的输出之上
  • 7维NLP特征提取: 从金融新闻中提取量化情感指标
  • 风险评估与仓位管理: 智能计算置信度和仓位大小
  • 回测框架: 包含完整的性能评估和可视化

系统架构

整体流程

text
┌─────────────────────────────────────────────────────────────────┐
│                    PrimoAgent 顺序流水线                          │
│                                                                 │
│   用户输入 (股票代码 + 日期范围)                                    │
│         ↓                                                       │
│   ┌─────────────────┐                                           │
│   │ Data Collection │ ← yFinance + Finnhub API                  │
│   │     Agent       │   获取市场数据和公司信息                      │
│   └────────┬────────┘                                           │
│            ↓                                                    │
│   ┌─────────────────┐                                           │
│   │   Technical     │ ← 计算6大技术指标                           │
│   │ Analysis Agent  │   SMA, RSI, MACD, BB, ADX, CCI            │
│   └────────┬────────┘                                           │
│            ↓                                                    │
│   ┌─────────────────┐                                           │
│   │     News        │ ← 7维NLP情感分析                           │
│   │ Intelligence    │   新闻相关性、情绪、价格影响等                 │
│   └────────┬────────┘                                           │
│            ↓                                                    │
│   ┌─────────────────┐                                           │
│   │   Portfolio     │ → 生成交易信号                              │
│   │ Manager Agent   │   BUY/SELL/HOLD + 置信度 + 仓位             │
│   └─────────────────┘                                           │
│         ↓                                                       │
│   输出: 每日分析CSV + 回测报告                                      │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

项目结构

text
PrimoAgent/
├── main.py                    # 主分析脚本
├── backtest.py                # 回测脚本
├── requirements.txt           # 依赖列表
├── .env.example               # API密钥模板

├── src/
│   ├── agents/                # 4个智能体模块
│   │   ├── data_collection_agent.py
│   │   ├── technical_analysis_agent.py
│   │   ├── news_intelligence_agent.py
│   │   └── portfolio_manager_agent.py
│   │
│   ├── workflows/             # LangGraph状态管理
│   │   ├── state.py           # AgentState定义
│   │   └── workflow.py        # 图构建与执行
│   │
│   ├── prompts/               # LLM提示词模板
│   ├── tools/                 # 外部API集成
│   ├── config/                # 配置管理
│   └── backtesting/           # 回测引擎

└── output/
    ├── csv/                   # 每日分析结果
    └── backtests/             # 回测图表和报告

四大智能体详解

1. Data Collection Agent (数据采集智能体)

职责: 收集实时市场数据和公司基本面信息

数据来源:

API数据类型
yFinance股票价格、成交量、历史数据
Finnhub公司简介、财务指标、新闻

输出字段:

  • 当前价格、开盘价、最高价、最低价
  • 成交量、52周高低点
  • P/E比率、市值、股息率
  • 公司名称、行业、业务描述

2. Technical Analysis Agent (技术分析智能体)

职责: 计算6大技术指标用于趋势评估

技术指标详解:

指标全称作用
SMASimple Moving Average识别趋势方向
RSIRelative Strength Index判断超买/超卖
MACDMoving Average Convergence Divergence动量和趋势信号
BBBollinger Bands波动性和价格通道
ADXAverage Directional Index趋势强度测量
CCICommodity Channel Index周期性买卖信号

信号解读示例:

text
RSI = 72 → 超买区域,可能回调
MACD 向上交叉 → 看涨信号
ADX > 25 → 趋势明显

3. News Intelligence Agent (新闻情报智能体)

职责: 使用7维NLP指标分析金融新闻

这是 PrimoAgent 最独特的部分——将新闻转化为量化指标。

7维NLP特征 (取值范围: -2 到 +2):

特征含义示例
news_relevance新闻与公司的相关性+2: 直接提及公司业绩
sentiment整体情感倾向-2: 极度负面,+2: 极度正面
price_impact_potential价格影响潜力+2: 可能引发大幅波动
trend_direction趋势方向指示+1: 看涨,-1: 看跌
earnings_impact盈利影响预期+2: 预计大幅提升盈利
investor_confidence投资者信心变化-1: 信心下降
risk_profile_change风险特征变化-2: 风险大幅增加

处理流程:

text
新闻获取 (Finnhub API)

内容过滤 (排除广告/无关内容)

重要性评分 (0.0-1.0)

内容增强 (抓取全文+摘要)

NLP特征提取 (7个指标)

4. Portfolio Manager Agent (投资组合管理智能体)

职责: 综合所有输入,生成交易信号

输入数据:

  • 技术指标 (来自 Technical Analysis Agent)
  • 基本面数据 (来自 Data Collection Agent)
  • NLP特征 (来自 News Intelligence Agent)
  • 历史交易决策 (来自CSV记录)

输出格式:

字段取值范围说明
trading_signalBUY / SELL / HOLD交易方向
confidence_level0.1, 0.2, ... 1.0置信度(10档)
position_size10, 20, ... 100仓位百分比(10档)

决策逻辑:

python
# 简化的决策流程
if technical_bullish and sentiment > 0 and confidence > 0.7:
    signal = "BUY"
    position = calculate_position(confidence, risk_profile)
elif technical_bearish or sentiment < -1:
    signal = "SELL"
else:
    signal = "HOLD"

LangGraph 实现

AgentState 状态定义

python
from typing_extensions import TypedDict
from typing import List, Dict, Any, Optional

class AgentState(TypedDict):
    """PrimoAgent 统一状态结构"""

    # 会话信息
    session_id: str                    # 唯一工作流标识
    symbols: List[str]                 # 分析的股票代码
    current_step: str                  # 当前工作流阶段
    analysis_date: str                 # 分析日期 (YYYY-MM-DD)

    # 各智能体输出
    data_collection_results: Optional[Dict[str, Any]]    # 市场数据
    technical_analysis_results: Optional[Dict[str, Any]] # 技术指标
    news_intelligence_results: Optional[Dict[str, Any]]  # 新闻NLP特征
    portfolio_manager_results: Optional[Dict[str, Any]]  # 交易建议

    # 错误处理
    error: Optional[str]

工作流构建

python
from langgraph.graph import StateGraph, START, END

def create_workflow():
    """创建 PrimoAgent 工作流"""

    # 初始化状态图
    workflow = StateGraph(AgentState)

    # 添加4个智能体节点
    workflow.add_node("data_collection", data_collection_node)
    workflow.add_node("technical_analysis", technical_analysis_node)
    workflow.add_node("news_intelligence", news_intelligence_node)
    workflow.add_node("portfolio_manager", portfolio_manager_node)

    # 设置顺序执行边
    workflow.add_edge(START, "data_collection")
    workflow.add_edge("data_collection", "technical_analysis")
    workflow.add_edge("technical_analysis", "news_intelligence")
    workflow.add_edge("news_intelligence", "portfolio_manager")
    workflow.add_edge("portfolio_manager", END)

    return workflow.compile()

流程图:

mermaid
graph LR
    START --> DC[Data Collection]
    DC --> TA[Technical Analysis]
    TA --> NI[News Intelligence]
    NI --> PM[Portfolio Manager]
    PM --> END

节点实现示例

python
async def data_collection_node(state: AgentState) -> Dict:
    """数据采集节点"""
    print(f"[Data Collection] 开始采集 {state['symbols']} 的数据...")

    results = {}
    for symbol in state["symbols"]:
        # 获取价格数据
        price_data = yfinance.get_stock_data(symbol)
        # 获取公司信息
        company_info = finnhub.get_company_profile(symbol)

        results[symbol] = {
            "price": price_data,
            "company": company_info,
            "current_price": price_data["close"][-1]
        }

    print(f"[Data Collection] 当前价格: {results[symbol]['current_price']}")

    return {
        "data_collection_results": results,
        "current_step": "data_collection_complete"
    }

回测结果分析

整体收益对比

收益对比

各股票详细表现

META (Meta Platforms)

META回测结果

指标PrimoAgentBuy and Hold
总收益31.97%22.16%
夏普比率2.8991.45
最大回撤8.5%15.2%
波动率11.02%22.54%

分析: META 是 PrimoAgent 表现最佳的标的,超额收益近10%,且波动率降低一半以上。

NFLX (Netflix)

NFLX回测结果

指标PrimoAgentBuy and Hold
总收益28.61%49.51%
夏普比率2.5701.82
最大回撤6.8%18.3%
波动率11.13%27.21%

分析: 虽然绝对收益低于被动持有,但风险调整后收益(夏普比率)更优。

AAPL (Apple)

AAPL回测结果

指标PrimoAgentBuy and Hold
总收益-6.88%-1.23%
最大回撤9.82%29.76%
波动率10.52%21.79%

分析: 两者均亏损,但 PrimoAgent 成功将最大回撤控制在10%以内。

TSLA (Tesla)

TSLA回测结果

指标PrimoAgentBuy and Hold
总收益-3.35%-16.59%
最大回撤12.4%45.2%
波动率21.47%75.75%

分析: TSLA 是高波动股票,PrimoAgent 显著降低了下跌风险。

回测总结

PrimoAgent 的优势:

  1. 波动率控制: 所有股票的波动率都大幅降低 (6.52%-21.47% vs 21.79%-75.75%)
  2. 回撤保护: 最大回撤普遍低于被动持有 (WMT: 4.74% vs 21.73%)
  3. 风险调整收益: 夏普比率在多数情况下更优

适用场景:

  • 风险厌恶型投资者
  • 追求稳定收益而非最大化回报
  • 需要自动化风险管理

PrimoAgent vs TradingAgent 对比

架构对比

维度PrimoAgentTradingAgent
智能体数量4个15个节点
执行模式顺序流水线多阶段+循环
循环数量0个6个
工作流类型单一线性复杂分支
辩论机制牛熊辩论 + 风险三方辩论
执行时间约30秒约160秒

功能对比

text
┌────────────────────────────────────────────────────────────────────┐
│                         功能对比                                     │
├────────────────────────────────────────────────────────────────────┤
│                                                                    │
│   PrimoAgent                    TradingAgent                       │
│   ──────────                    ────────────                       │
│                                                                    │
│   ┌─────────────┐               ┌─────────────┐                    │
│   │Data Collect │               │Market Analyst│ ┐                 │
│   └──────┬──────┘               │Social Analyst│ │ 4个分析师       │
│          ↓                      │News Analyst  │ │ 并行工作        │
│   ┌─────────────┐               │Fund. Analyst │ ┘                 │
│   │Tech Analysis│               └──────┬───────┘                   │
│   └──────┬──────┘                      ↓                           │
│          ↓                      ┌─────────────┐                    │
│   ┌─────────────┐               │Bull vs Bear │ 辩论循环           │
│   │News Intel.  │               │Research Mgr │                    │
│   └──────┬──────┘               └──────┬──────┘                    │
│          ↓                             ↓                           │
│   ┌─────────────┐               ┌─────────────┐                    │
│   │Portfolio Mgr│               │   Trader    │                    │
│   └─────────────┘               └──────┬──────┘                    │
│                                        ↓                           │
│                                 ┌─────────────┐                    │
│                                 │Risky→Safe→  │ 风险三方辩论       │
│                                 │Neutral→Judge│                    │
│                                 └─────────────┘                    │
│                                                                    │
└────────────────────────────────────────────────────────────────────┘

技术栈对比

技术PrimoAgentTradingAgent
核心框架LangGraphLangGraph
状态管理TypedDictTypedDict + 嵌套State
LLMOpenAI GPT多模型支持
数据源yFinance + Finnhub多源 (含社交媒体)
回测内置完整框架需外部工具
持久化CSVChromaDB

设计理念对比

理念PrimoAgentTradingAgent
复杂度简单直接模拟真实交易公司
决策过程单一智能体决策多方辩论制衡
可解释性中等高 (完整推理链)
扩展性添加智能体简单需修改Graph结构
学习曲线

性能对比

指标PrimoAgentTradingAgent
执行速度约30秒/股票约160秒/股票
API调用4-8次20+次
LLM Token中等
准确率META: 31.97%AAPL: 26.62%

适用场景

text
PrimoAgent 适合:
├── 快速原型开发
├── 学习LangGraph基础
├── 低延迟要求场景
├── 单一投资策略
└── 资源受限环境

TradingAgent 适合:
├── 生产级交易系统
├── 需要多方验证的决策
├── 高价值交易
├── 需要可解释性的场景
└── 模拟真实交易公司流程

快速开始

环境配置

bash
# 克隆仓库
git clone https://github.com/ivebotunac/PrimoAgent.git
cd PrimoAgent

# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 安装依赖
pip install -r requirements.txt

# 配置API密钥
cp .env.example .env

必需的API密钥

text
# .env 文件
OPENAI_API_KEY=sk-xxx
FINNHUB_API_KEY=xxx
FIRECRAWL_API_KEY=xxx
PERPLEXITY_API_KEY=xxx

运行分析

bash
# 运行主分析
python main.py

# 交互式输入
# Stock symbol: AAPL
# Start date (YYYY-MM-DD): 2024-10-01
# End date (YYYY-MM-DD): 2024-12-01

运行回测

bash
python backtest.py

技术亮点

1. 7维NLP情感分析

PrimoAgent 最独特的创新是将新闻情感量化为7个维度,而非简单的正/负/中性分类。

python
# 传统情感分析
sentiment = "positive"  # 信息量有限

# PrimoAgent 7维分析
nlp_features = {
    "news_relevance": 2,        # 高度相关
    "sentiment": 1,             # 轻微正面
    "price_impact_potential": 2, # 高影响潜力
    "trend_direction": 1,       # 看涨
    "earnings_impact": 0,       # 无明显影响
    "investor_confidence": 1,   # 信心提升
    "risk_profile_change": -1   # 风险略增
}

2. 置信度驱动的仓位管理

python
# 置信度与仓位映射
confidence_to_position = {
    0.1: 10,   # 低置信度对应小仓位
    0.5: 50,   # 中置信度对应中仓位
    1.0: 100,  # 高置信度对应满仓
}

3. 顺序流水线的简洁性

相比 TradingAgent 的复杂循环,PrimoAgent 采用纯顺序执行,代码更易理解和维护。


扩展建议

添加新的技术指标

python
# src/agents/technical_analysis_agent.py
def calculate_indicators(data):
    indicators = {
        "SMA": calculate_sma(data, period=20),
        "RSI": calculate_rsi(data, period=14),
        # 添加新指标
        "OBV": calculate_obv(data),  # 成交量指标
        "ATR": calculate_atr(data),  # 波动率指标
    }
    return indicators

添加辩论机制

python
# 参考 TradingAgent 的设计
workflow.add_node("bull_analyst", bull_node)
workflow.add_node("bear_analyst", bear_node)

# 添加辩论循环
workflow.add_conditional_edges(
    "bull_analyst",
    should_continue_debate,
    ["bear_analyst", "portfolio_manager"]
)

集成更多数据源

python
# 添加社交媒体情感
def get_social_sentiment(symbol):
    twitter_data = twitter_api.search(symbol)
    reddit_data = reddit_api.search(symbol)
    return aggregate_sentiment(twitter_data, reddit_data)

本节小结

通过本节学习,你应该掌握:

  • PrimoAgent 的4智能体顺序流水线架构
  • 7维NLP情感分析的创新方法
  • LangGraph 状态管理和工作流构建
  • PrimoAgent 与 TradingAgent 的详细对比
  • 回测结果的解读和策略评估

核心收获:

  1. 简单也可以强大: PrimoAgent 证明了不需要复杂的循环和辩论机制也能构建有效的交易系统
  2. NLP特征工程的价值: 7维情感分析比简单分类提供更丰富的信息
  3. 风险管理优先: PrimoAgent 的设计哲学是控制风险而非最大化收益

上一节: 10.9 本章小结

返回目录: 10.0 本章介绍

项目地址: PrimoAgent GitHub


最后更新: 2025年12月作者: Bryce Wang

基于 MIT 许可证发布。内容版权归作者所有。