加密货币市场数据服务

一个基于Python的加密货币市场数据服务,提供实时和历史数据获取、WebSocket流传输以及缓存功能,适用于金融分析和交易平台。

  • by PrachiShardul07
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 PrachiShardul07/mcp-server

使用说明

MCP服务器(Python)——加密市场连接器提供商

概述

该项目是一个基于Python的市场连接器提供商(MCP)服务器,使用FastAPI、CCXT和WebSockets获取实时和历史加密货币市场数据。

我构建这个项目是为了了解真实的交易平台和分析仪表板如何获取、聚合和流式传输实时数据。我不只是阅读理论,而是想体验实时系统在实践中的行为——速率限制、网络延迟、缓存、websocket流和后端架构。

🚀 这个项目做什么

此后端提供:

✔️ 实时加密货币价格

从交易所(Binance、Kraken等)获取实时行情

GET/market/ticker?交易所=二进制&符号=BTC/USDT

✔️ 历史悠久的OHLCV烛台

获取用于图表绘制的蜡烛(打开、高、低、关闭、音量)。

市场/历史?交易所=二进制&符号=BTC/USDT&限额=100

✔️ 通过WebSockets实时流媒体

每隔几秒钟接收一次连续的价格更新。

ws://localhost:8000/ws/实时?交易所=二进制&符号=BTC/USDT

✔️ 缓存层

一个小型的内存TTL缓存(如果需要,可以使用Redis)。

✔️ 整洁架构

服务/用于CCXT包装器 utils/用于缓存和错误 API路由的main.py

✔️ 模拟测试(pytest)

所有CCXT呼叫都被嘲笑→ 测试运行快速且离线。

💡 我为什么建造这个

我想用一个感觉真实的后端系统来挑战自己,而不是一个简单的CRUD API。

加密货币市场数据非常适合学习,因为它:

实时

快速移动的

不可预测的

API驱动

无处不在(金融、分析、仪表板、机器人)

这个项目帮助我练习:

🧠 后端工程

设计结构化、可测试的模块。

⚡ 实时系统

学习连续数据流的工作原理。

🧪 实际测试

模拟外部API(CCXT),使测试不依赖于网络。

🐳 可部署后端技能

Docker、Docker Compose、云部署就绪。

这正是我实习期间想做的工程工作。

🛠️ 技术栈

FastAPI(web框架)

CCXT(交换数据层)

WebSockets(直播)

Cachetools TTLCache(轻量级缓存)

Pytest(使用模拟的单元测试)

Docker(部署就绪)

Redis(可选)用于共享缓存

📁 项目结构 mcp服务器/ │── src/ │ ├── main.py │ ├── 服务/ │ │ └── ccxt_client.py │ ├── utils/ │ │ ├── cache.py │ │ └── errors.py │ └── models.py │ ├── 测试/ │ ├── test_api.py │ └── test_ccxt_integration.py │ ├── Dockerfile ├── docker-compose.yml ├── 需求.txt └── README.md

⚙️ 如何运行项目 1.️⃣ 创建虚拟环境 python-m venv.venv

激活它:

Windows PowerShell:

..venv\Scripts\Activate.ps1

Mac/Linux:

source.ven/bin/activate

2.️⃣ 安装要求 pip安装-r要求.txt

3.️⃣ 启动服务器 uvicorn src.main:应用程序--重新加载--端口8000

服务器将在以下位置运行:

👉 http://127.0.0.1:8000

👉 API文件:http://127.0.0.1:8000/docs

🧪 运行测试 pytest-q

所有的CCXT通话都是模拟的——测试不会打到真正的交易所。

🐳 Docker支持 运行服务器+Redis: docker构建

服务器→ http://localhost:8000

瑞迪斯→ redis://localhost:6379

🎨 额外奖励:前端仪表板(React+Vite)

此后端与一个干净的仪表板配对,显示:

实时价格(通过WebSocket)

历史烛台图

交换/符号选择

如果你想要可下载的ZIP,请告诉我:

👉 “生成仪表板ZIP”

🎯 我学到了什么

构建它教会了我:

实时流模式

处理外部API不可靠性

集成异步服务

测试异步代码

干净的面向服务的后端设计

Docker化和云部署准备

最重要的是,我了解了真实的市场数据系统是如何运作的——这是我仅靠教程无法学到的。

🤝 未来改进

原生币安WebSocket流(逐点更新)

Redis支持的缓存层

历史数据库存储(PostgreSQL)

警报/通知系统

生产部署到渲染或铁路

❤️ 为什么这个项目对我很重要

我构建这个是因为我真的很喜欢感觉“活着”的系统——流媒体、更新、反应。 在这方面的工作让我相信,我可以设计出真正的后端系统,真正服务于实时数据,而不仅仅是静态的CRUD端点。

这与我作为实习生想要探索的工程工作完全一致