内容
# MT5 MCP 服务器
> 为 Claude AI 提供自主、端到端的 MetaTrader 5 控制能力。
一个 MCP(模型上下文协议)服务器,用于连接 Claude 和 MetaTrader 5 — 让 AI 编写 MQL5 专家顾问,编译它们,运行无人值守的回测,获取实时价格,计算指标,分析交易历史,所有这些都在一个循环中,无需人工干预。
---
## 功能
传统的算法交易研究是一个缓慢的手动循环:编写代码 → 打开 MetaEditor → 编译 → 打开策略测试器 → 配置 → 运行 → 读取报告 → 重复。这个服务器将整个循环压缩成 Claude 可以自主调用的工具调用。
```
Claude 编写 EA 代码 → compile_mql5 → run_backtest → get_backtest_results → 分析 → 迭代
```
Claude 还可以扫描整个经纪商的符号列表以查找设置,计算任何时间范围的指标,并监控开放的仓位和已关闭的交易历史 — 所有这些都不需要您触摸 MetaTrader 终端。
---
## 工具(共 16 个)
### EA 管理器
| 工具 | 描述 |
|------|-------------|
| `write_ea` | 将 MQL5 EA / 指标 / 脚本代码写入 MT5 Experts 文件夹 |
| `compile_mql5` | 通过 MetaEditor 编译 `.mq5` 文件;返回错误和警告 |
| `write_file` | 将任何文本文件(Python 脚本,配置,CSV)写入磁盘 |
| `read_file` | 读取任何文本文件 — 日志,报告,现有 EA 代码 |
| `list_files` | 列出目录中的文件(默认为 `Experts/AI_Generated`) |
### 回测工具
| 工具 | 描述 |
|------|-------------|
| `run_backtest` | 为编译的 EA 运行 MT5 策略测试器,无需人工干预;通过测试器日志检测完成 |
| `get_backtest_results` | 解析回测结果 — 净利润,胜率,利润因子,最佳/最差交易,完整交易列表 |
### 市场数据
| 工具 | 描述 |
|------|-------------|
| `get_price` | 获取任何符号的实时买入/卖出价格和点差 |
| `get_price_data` | 历史 OHLCV 蜡烛图(最多 5000 根,任意时间范围) |
| `get_symbols` | 列出连接的经纪商上所有可用的符号 |
| `get_account_info` | 账户余额,净值,边际,杠杆,和浮动盈亏 |
| `run_python` | 执行任意 Python 代码,MT5 库可用;返回 stdout |
### 指标
| 工具 | 描述 |
|------|-------------|
| `calculate_indicators` | 计算任何符号/时间范围的 EMA,SMA,RSI,MACD,ATR,Bollinger Bands |
| `scan_symbols` | 扫描整个经纪商的符号列表以查找条件(EMA 金叉,RSI 极值,趋势方向) |
### 交易管理器
| 工具 | 描述 |
|------|-------------|
| `get_open_positions` | 所有开放的仓位 — 票号,方向,交易量,入场,当前价格,浮动盈亏 |
| `get_trade_history` | 已关闭的交易历史,包含完整统计数据:胜率,利润因子,按符号分类 |
---
## 架构
```
Claude(通过 MCP 客户端)
│
▼
server.py (MCP 服务器 — stdio 传输)
│
┌────┴────────────────────────────┐
│ │
tools/ea_manager.py tools/market_data.py
tools/backtester.py tools/indicators.py
tools/trade_manager.py
│
▼
MetaTrader 5(终端 + MetaEditor)
```
- **传输**: stdio(MCP 标准)
- **MT5 连接**: `MetaTrader5` Python 库(COM 桥接至正在运行的终端)
- **回测检测**: 轮询测试器日志文件;无需 XML 解析
- **指标计算**: 纯 pandas/numpy 计算,基于从 MT5 获取的 OHLCV 数据
---
## 要求
- Windows(MetaTrader 5 仅支持 Windows)
- 已安装并登录的 MetaTrader 5 终端
- Python 3.10+
- Claude Desktop 或任何 MCP 兼容的客户端
---
## 安装
**1. 克隆仓库**
```bash
git clone https://github.com/tusharrayamajhi/mt5-mcp-server.git
cd mt5-mcp-server
```
**2. 安装依赖项**
```bash
pip install mcp MetaTrader5 pandas lxml
```
**3. 编辑 `config.py`** — 设置 MT5 安装路径:
```python
META_EDITOR_PATH = r"C:\Program Files\MetaTrader 5\MetaEditor64.exe"
TERMINAL_PATH = r"C:\Program Files\MetaTrader 5\terminal64.exe"
EXPERTS_DIR = r"C:\Users\<you>\AppData\Roaming\MetaQuotes\Terminal\<ID>\MQL5\Experts"
```
**4. 在 Claude Desktop 上注册** — 添加到 `~/.claude/settings.json`:
```json
{
"mcpServers": {
"mt5": {
"command": "python",
"args": ["C:\\path\\to\\mt5-mcp-server\\server.py"]
}
}
}
```
**5. 启动 MetaTrader 5**,然后重启 Claude Desktop。`mt5` 服务器将出现在 MCP 工具列表中。
---
## 使用示例
### 从头开始编写和回测一个 EA
```
Claude 提示: "为 EURUSD H1 编写一个 EMA(10/50) 金叉 EA,交易风险为 1%,止损为 1.5x ATR,获利为 3x ATR。编译它并运行一个回测,从 2024.01.01 到 2025.01.01,存款为 $10,000。"
```
Claude 将调用 `write_ea` → `compile_mql5` → `run_backtest` → `get_backtest_results` 并返回完整的性能报告。
### 扫描市场以查找设置
```
Claude 提示: "扫描所有 EUR 货币对的 H4 时间范围,寻找看涨的 EMA(25/100) 金叉。"
```
Claude 调用 `scan_symbols`,条件为 `"ema_crossover"`,搜索筛选器为 `"EUR"`。
### 分析您的实时账户
```
Claude 提示: "显示我的开放仓位和过去 30 天的交易历史,包含按符号分类的明细。"
```
Claude 调用 `get_open_positions` 和 `get_trade_history`。
### 在 Python 中运行自定义分析
```
Claude 提示: "计算我的 EURUSD 交易从 2025 年开始的夏普比率。"
```
Claude 调用 `run_python`,并带有查询 MT5 历史数据和计算指标的自定义代码。
---
## 回测: EMA(25/100) + 制度过滤器 — EURUSD H1
该策略是使用 MCP 服务器从头到尾研究的。Claude 自主迭代了多个版本。
**参数**
| 设置 | 值 |
|---------|-------|
| 快速 EMA | 25 |
| 慢速 EMA | 100 |
| 趋势过滤 EMA | 200(H4 对齐) |
| 止损 | 1.5× ATR |
| 获利 | 3.0× ATR |
| 头寸调整 | 1% 交易风险(复利) |
| 制度过滤器 | Choppiness Index < 61.8 + ADX > 15 |
| ATR 入场过滤器 | < 0.6× 平均 ATR(避免高波动性入场) |
**结果(2024–2026,扣除点差 + $7 佣金 RT + 掉期)**
| 时间段 | 净盈亏 | 回报率 | 利润因子 | 最大回撤 |
|--------|---------|--------|---------------|--------------|
| 2024 | +$1,891 | +18.9% | 2.80 | 2.3% |
| 2025 | +$1 | 0.0% | 1.00 | 6.3% |
| 2026 年 1 月至 6 月 | +$120 | +1.2% | 1.18 | 4.6% |
| **3 年合计** | **+$2,042** | **+20.4%** | **1.59** | **6.3%** |
- 年化回报率: **~7.9%/年**(扣除所有费用)
- 交易频率: ~22 笔交易/年(非常选择性 — 仅在趋势、低波动条件下入场)
- 最适合的经纪商: 市场做市商,点差较小(避免 ECN 佣金结构)
**研究中的关键发现**: 为该策略添加保本止损或跟踪止损 *会损害* 性能 — 基于 ATR 的获利需要空间来呼吸。
---
## 回测脚本
仓库根目录中的所有脚本都在研究过程中使用:
| 脚本 | 目的 |
|--------|---------|
| `backtest_ma_crossover.py` | v1 基线 — 原始 EMA 金叉 |
| `backtest_ma_v2.py` | v2 — 添加 200 EMA 趋势过滤器 |
| `backtest_all.py` | 完整策略套件比较 |
| `regime_final.py` | **最终策略** — 制度探测器(最佳结果) |
| `multi_year_test.py` | 年度明细(2024/2025/2026) |
| `broker_fees_test.py` | 点差、佣金和掉期的影响 |
| `scale_test.py` | 复利和投资组合扩展测试 |
| `be_optimize.py` | 保本 / 跟踪止损优化(结论:不使用) |
| `long_short_breakdown.py` | 多头 vs 空头交易性能拆分 |
| `flip_test.py` | 如果反转每个信号会发生什么 |
---
## 项目结构
```
mt5-mcp-server/
├── server.py # MCP 服务器入口点 — 注册所有 16 个工具
├── config.py # MetaEditor、终端、Experts 目录的路径
├── requirements.txt
├── tools/
│ ├── ea_manager.py # write_ea, compile_mql5, read/write/list 文件
│ ├── backtester.py # run_backtest, get_backtest_results
│ ├── market_data.py # get_price, get_price_data, get_symbols, get_account_info, run_python
│ ├── indicators.py # calculate_indicators, scan_symbols
│ └── trade_manager.py # get_open_positions, get_trade_history
└── [回测研究脚本] # 研究过程中使用的所有脚本
```
---
## 限制
- **仅限 Windows** — MetaTrader 5 及其 Python 库仅在 Windows 上运行
- **终端必须运行** — MT5 Python 库连接到已经打开的终端实例
- **回测速度** — 策略测试器按照 MetaTrader 自己的速度运行;复杂的 EA 在 tick 数据上可能需要几分钟
- **无实时订单执行** — 此版本侧重于研究/阅读;不包含实时交易执行工具
---
## 许可证
MIT