股票投资组合管理服务

一个基于MCP协议、LangChain和LangGraph的股票投资组合管理系统,支持实时股票价格追踪、投资组合分析和自然语言交互。

  • by AmirK-S
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 AmirK-S/portfolio-mcp

使用说明

📈 股票组合MCP服务器

一个适合初学者的股票投资组合管理系统 MCP(模型上下文协议), LangChain,以及 LangGraph。使用自然语言跟踪您的投资、分析业绩并与您的投资组合互动!


🤔 这些技术是什么?

什么是MCP?

模型上下文协议(MCP) 是一种标准化的协议,允许人工智能模型与外部工具、数据源和服务进行交互。把它想象成一个“通用适配器”,让像克劳德这样的人工智能助手以结构化的方式访问你的应用程序和数据。

  • MCP服务器公开了AI模型可以调用的“工具”
  • 每个工具都有一个清晰的输入/输出模式
  • 这允许AI与您的系统无缝集成

📚 了解更多: MCP文件

LangChain是什么?

LangChain 是一个用于构建由大型语言模型(LLM)驱动的应用程序的框架。它提供了将LLM调用与其他数据源、API和计算链接在一起的工具。

  • 创建可以使用工具并做出决策的AI“代理”
  • 将多个操作链接在一起
  • 管理提示、内存和上下文

📚 了解更多: LangChain文档

什么是LangGraph?

LangGraph 是一个用于使用LLM构建有状态、多参与者工作流的库。它通过添加基于图的工作流编排来扩展LangChain。

  • 将工作流定义为具有节点和边的图形
  • 每个节点都是一个处理步骤
  • 状态在图中流动
  • 非常适合复杂、多步骤的人工智能工作流程

📚 了解更多: LangGraph教程


🌟 特性

该项目包括:

✅ MCP服务器 有5个投资组合管理工具 ✅ 实时股票价格 通过yfnance(不需要API密钥!) ✅ 投资组合跟踪 进行损益计算 ✅ 美丽的可视化 使用matplotlib ✅ 朗链代理 用于自然语言查询 ✅ LangGraph工作流程 用于自动报告 ✅ 注释过多的代码 非常适合学习


📁 项目结构

stock-portfolio-mcp/
├── mcp_server.py          # MCP server with 5 tools
├── portfolio.json         # Your portfolio positions (JSON storage)
├── visualizer.py          # P&L chart generator
├── langchain_agent.py     # Interactive AI agent
├── langgraph_workflow.py  # Automated reporting workflow
├── requirements.txt       # Python dependencies
└── README.md             # You are here!

🚀 入门指南

先决条件

  • Python 3.8+ 安装
  • 点 用于包管理
  • 无烟煤API键 (为克劳德)- 在这里买一个

步骤1:克隆和设置

# Clone the repository
git clone <your-repo-url>
cd stock-portfolio-mcp

# Create a virtual environment (recommended)
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

步骤2:设置API密钥

您需要一个Anthropic API密钥才能使用带有LangChain的Claude。

选项1:环境变量

export ANTHROPIC_API_KEY='your-api-key-here'

选项2:.env文件

# Create a .env file
echo "ANTHROPIC_API_KEY=your-api-key-here" > .env

步骤3:添加一些职位

投资组合开始为空。您可以使用LangChain代理添加职位或手动编辑 portfolio.json:

{
  "positions": [
    {
      "ticker": "AAPL",
      "shares": 10,
      "avg_cost": 150.0,
      "added_at": "2025-11-12T00:00:00"
    },
    {
      "ticker": "MSFT",
      "shares": 5,
      "avg_cost": 380.0,
      "added_at": "2025-11-12T00:00:00"
    }
  ],
  "metadata": {
    "created_at": "2025-11-12",
    "last_updated": "2025-11-12"
  }
}

💻 用法示例

1.MCP服务器(直接工具调用)

MCP服务器提供5个投资组合管理工具:

# Run the MCP server
python mcp_server.py

# Available tools:
# - get_stock_price(ticker)
# - add_position(ticker, shares, avg_cost)
# - get_portfolio_summary()
# - get_position_details(ticker)
# - get_order_book(ticker)

备注:MCP服务器通常通过MCP协议运行。此服务器使用stdio传输,旨在与MCP兼容的客户端集成。

2.生成可视化效果

制作精美的损益表:

python visualizer.py

这将产生:

  • pnl_chart.png -按头寸划分的损益柱状图
  • portfolio_summary.png -包含4个图表的综合仪表板

3.交互式LangChain代理

使用自然语言与您的作品集聊天:

python langchain_agent.py

示例查询:

💬 You: What's my portfolio worth?
🤖 Agent: Your portfolio is currently worth $5,650, with a total P&L of +$450 (+8.65%)

💬 You: Show me my best performing stock
🤖 Agent: Your best performer is AAPL with +16.67% return ($250 profit)

💬 You: Add 5 shares of GOOGL at $140
🤖 Agent: Added position: GOOGL - 5 shares at $140.00 avg cost

💬 You: What's the current price of TSLA?
🤖 Agent: TSLA is currently trading at $242.50

4.运行LangGraph工作流

生成自动投资组合报告:

python langgraph_workflow.py

这将执行一个多步骤的工作流:

  1. 获取价格 -获取所有头寸的当前市场价格
  2. 计算损益 -计算每个头寸的损益
  3. 生成摘要 -计算整个投资组合的统计数据
  4. 生成报告 -使用Claude创建自然语言报告

报告另存为 portfolio_report_YYYYMMDD_HHMMSS.txt


🔧 运作原理

MCP服务器架构

┌─────────────┐
│   AI Model  │ (Claude, GPT, etc.)
└──────┬──────┘
       │ MCP Protocol
       │
┌──────▼──────────────────────┐
│   MCP Server                │
│  ┌──────────────────────┐   │
│  │ Tool: get_stock_price│   │
│  │ Tool: add_position   │   │
│  │ Tool: get_portfolio  │   │
│  │ Tool: ...            │   │
│  └──────────────────────┘   │
└──────┬──────────────────────┘
       │
┌──────▼──────────┐
│  Data Sources   │
│  - portfolio.json│
│  - yfinance API │
└─────────────────┘

LangChain代理流程

User Input → Agent → Tool Selection → Tool Execution → Response
    ↑                                                      │
    └──────────────── Conversation Loop ─────────────────┘

LangGraph工作流

START
  ↓
Fetch Current Prices (yfinance)
  ↓
Calculate P&L (for each position)
  ↓
Generate Summary Statistics
  ↓
Generate AI Report (using Claude)
  ↓
END → Save Report

📊 可用的MCP工具

1. get_stock_price

描述:获取股票的当前市场价格 输入: {"ticker": "AAPL"} 输出: {"ticker": "AAPL", "price": 175.50, "currency": "USD"}

2. add_position

描述:添加或更新投资组合头寸 输入: {"ticker": "AAPL", "shares": 10, "avg_cost": 150.0} 输出: {"status": "success", "action": "added", ...}

3. get_portfolio_summary

描述:通过损益计算获取所有头寸 输入: {} 输出:完整的投资组合摘要,包括总计

4. get_position_details

描述:获取一个职位的详细信息 输入: {"ticker": "AAPL"} 输出:职位详细信息,包括公司信息、行业、市值

5. get_order_book

描述:获取买卖价格和价差数据 输入: {"ticker": "AAPL"} 输出: {"bid": 175.20, "ask": 175.25, "spread": 0.05, ...}


🎓 学习资源

文档

  • 主控程序: https://modelcontextprotocol.io/introduction
  • LangChain: https://python.langchain.com/docs/get_started/quickstart
  • LangGraph: https://langchain-ai.github.io/langgraph/tutorials/introduction/
  • 雅虎财经: https://pypi.org/project/yfinance/

视频教程

示例用例

  • 投资组合管理:跟踪投资和业绩
  • 财务分析:分析股票趋势和相关性
  • 自动报告:生成每日/每周投资组合报告
  • 风险评估:计算投资组合风险指标
  • 交易信号:构建具有人工智能决策的交易机器人

🤝 代码风格和最佳实践

本项目遵循初学者友好的编码实践:

✅ 大量评论 -解释每个功能 ✅ 键入提示 -清晰的输入/输出类型 ✅ 带示例的文档字符串 -以身作则 ✅ 打印报表 -看看发生了什么 ✅ 错误处理 -优雅的失败,信息清晰 ✅ 短功能 -易于理解(最多约20行)


🐛 故障排除

“无法为TICKER获取价格”

  • 检查您的互联网连接
  • 验证股票代码是否正确(使用雅虎财经代码)
  • 某些股票可能无法在yfinance上使用

“找不到ANTHROPIC_API_KEY”

  • 确保您已设置环境变量
  • 检查您的API密钥是否有效
  • 设置变量后重新启动终端

“投资组合为空”

  • 使用LangChain代理添加职位或编辑 portfolio.json
  • 确保 portfolio.json 存在于项目目录中

导入错误

  • 确保您已激活虚拟环境
  • 跑 pip install -r requirements.txt 再次
  • 检查你是否使用Python 3.8+

📝 工作流示例

以下是一个完整的示例工作流程:

# 1. Set up environment
export ANTHROPIC_API_KEY='your-key'

# 2. Add positions using the agent
python langchain_agent.py
> Add 10 shares of AAPL at $150
> Add 5 shares of MSFT at $380
> Add 8 shares of GOOGL at $140
> exit

# 3. Check your portfolio
python langchain_agent.py
> What's my portfolio worth?
> Show me my best performing stock
> exit

# 4. Generate visualizations
python visualizer.py

# 5. Run automated workflow
python langgraph_workflow.py

# 6. View your reports and charts!
# - pnl_chart.png
# - portfolio_summary.png
# - portfolio_report_YYYYMMDD_HHMMSS.txt

🎯 下一步和想法

想扩展这个项目吗?以下是一些想法:

  1. 添加更多工具:

    • remove_position(ticker) -删除一个位置
    • get_stock_history(ticker, days) -获取历史数据
    • calculate_correlation(ticker1, ticker2) -分析相关性
  2. 增强可视化效果:

    • 显示投资组合价值随时间变化的时间序列图
    • 行业分配饼图
    • 风险/回报散点图
  3. 添加更多数据源:

    • Alpha Vantage获取更详细的市场数据
    • 新闻API股票相关新闻
    • 经济指标
  4. 构建web界面:

    • 使用Streamlit或Flask
    • 实时更新
    • 交互式图表
  5. 添加更多工作流:

    • 每日电子邮件报告
    • 价格变动预警系统
    • 自动再平衡建议

📄 许可证

这个项目是为了教育目的。请随意使用、修改和学习它!


🙏 致谢

  • Anthropic 克劳德和MCP协议
  • LangChain 令人惊叹的框架团队
  • 雅虎财经 免费股票数据
  • 你 为了学习和建设!

💡 学习者小贴士

  1. 按此顺序读取代码:

    • 从开始 portfolio.json (了解数据结构)
    • 然后 mcp_server.py (查看工具的工作原理)
    • 然后 langchain_agent.py (参见AI如何使用工具)
    • 最终 langgraph_workflow.py (参见多步骤工作流)
  2. 实验:

    • 将您自己的工具添加到MCP服务器
    • 修改代理提示
    • 创建自定义工作流
  3. 调试:

    • 看看打印声明(它们向你展示了正在发生的事情)
    • 检查 portfolio.json 手术后
    • 使用 python -i 用于交互式调试
  4. 提出问题:

    • 每个函数都有一个带有示例的docstring
    • 评论解释了“为什么”,而不仅仅是“什么”
    • 使用Claude Code询问有关代码的问题!

快乐编码! 🚀📈

由以下材料制成❤️ 对于学习者