docs: Reorganize documentation structure
**README.md** - Slimmed from 548 → 156 lines - Removed duplicated content now in separate docs - Links to new focused documentation files - Quick install + quick start only **New docs created:** - docs/QUICKSTART.md - Complete setup guide (macOS/Linux) - docs/CONFIG.md - Configuration reference with examples - docs/TROUBLESHOOTING.md - Common issues and solutions **Existing docs retained:** - docs/MCP_TOOLS.md - Tool specifications (31/43 documented) - docs/ARCHITECTURE.md - Design and internals - docs/REMOTE_AGENTS.md - Linux optimization agents **Documentation structure:**
This commit is contained in:
@@ -1,239 +1,55 @@
|
|||||||
# MT5-Quant
|
# MT5-Quant
|
||||||
|
|
||||||
**The MCP server for MT5 strategy development — not live trading.**
|
**MCP server for MT5 strategy development on macOS/Linux.** 43 tools to compile, backtest, analyze, and optimize MQL5 Expert Advisors — no Windows required.
|
||||||
|
|
||||||
Most MT5 MCP servers let an AI place orders. MT5-Quant lets an AI *build the strategy*: compile an Expert Advisor, run a backtest, parse the report, analyze every deal, and optimize parameters — all in one conversation, on **macOS or Linux**, without a Windows machine.
|
|
||||||
|
|
||||||
```
|
```
|
||||||
You: "Run a backtest from Jan to March and tell me what caused the drawdown spike in February"
|
You: "Backtest MyEA Jan-Mar, what caused the February drawdown?"
|
||||||
|
|
||||||
Claude: [compile → clean cache → backtest → parse XML report → analyze 1,847 deals]
|
Claude: [compile → clean → backtest → analyze 1,847 deals]
|
||||||
|
→ Feb 14: BUY grid at L6, locking lot 1.75× base
|
||||||
Worst DD event: Feb 14, BUY grid at L6.
|
→ Cutloss fired 17 points later
|
||||||
Locking hedge placed into a trending adverse move. Locking lot 1.75× base.
|
→ Recommendation: cap locking multiplier to ≤1.2×
|
||||||
Cutloss fired 17 price points later.
|
|
||||||
|
|
||||||
Recommendation: cap locking lot multiplier to ≤1.2× to prevent cascade on adverse trend.
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### How MT5-Quant is different
|
## Why MT5-Quant
|
||||||
|
|
||||||
| | MT5-Quant | Other MT5 MCPs¹ | QuantConnect MCP | ai-trader |
|
| | MT5-Quant | Other MT5 MCPs | QuantConnect |
|
||||||
|---|---|---|---|---|
|
|---|---|---|---|
|
||||||
| **Backtest via MCP** | ✅ full pipeline | ❌ | ✅ cloud only | ✅ Python only |
|
| Backtest pipeline | ✅ Full | ❌ | Cloud only |
|
||||||
| **EA optimization via MCP** | ✅ genetic, background | ❌ | ✅ cloud only | ❌ |
|
| Deal-level analytics | ✅ 15+ dims | ❌ | ❌ |
|
||||||
| **Deal-level analytics** | ✅ 15+ dimensions | ❌ | ❌ | ❌ |
|
| MQL5 compilation | ✅ | ❌ | ❌ |
|
||||||
| **MQL5 EA compilation** | ✅ | ❌ | ❌ | ❌ |
|
| macOS/Linux native | ✅ | Windows only | Cloud |
|
||||||
| **macOS + Linux** | ✅ | ❌ Windows only | ❌ cloud | ✅ |
|
| Optimization | ✅ Background | ❌ | ✅ Paid |
|
||||||
| **Headless / CI-CD** | ✅ Xvfb | ❌ | ❌ | ✅ |
|
|
||||||
| **Offline / no subscription** | ✅ | ✅ | ❌ paid cloud | ✅ |
|
|
||||||
| **MT5 .set file tooling** | ✅ 8 tools | ❌ | ❌ | ❌ |
|
|
||||||
| **Backtest history ledger** | ✅ JSON archive | ❌ | ✅ | ❌ |
|
|
||||||
|
|
||||||
¹ *ariadng/metatrader-mcp-server, Qoyyuum/mcp-metatrader5-server, Cloudmeru/MetaTrader-5-MCP-Server — all live-trading execution bridges, Windows-only.*
|
## Quick Install
|
||||||
|
|
||||||
### What it covers
|
|
||||||
|
|
||||||
43 MCP tools across the full EA development loop:
|
|
||||||
|
|
||||||
```
|
|
||||||
list_set_files / describe_sweep / patch_set_file / set_from_optimization
|
|
||||||
↓ prepare parameters
|
|
||||||
compile_ea
|
|
||||||
↓ build .ex5
|
|
||||||
run_backtest (compile → clean cache → MT5 tester → extract HTML/XML → analyze deals)
|
|
||||||
↓ fresh results
|
|
||||||
analyze_report / compare_baseline / get_history
|
|
||||||
↓ evaluate and record
|
|
||||||
archive_report(delete_after=true) → promote_to_baseline
|
|
||||||
↓ clean up, lock in new production reference
|
|
||||||
run_optimization (background, nohup — takes hours)
|
|
||||||
↓ when MT5 finishes
|
|
||||||
get_optimization_results → set_from_optimization → run_backtest (verify)
|
|
||||||
```
|
|
||||||
|
|
||||||
The AI drives every step. You watch and approve.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Quickstart
|
|
||||||
|
|
||||||
### Option 1: Download Prebuilt Binary (Recommended)
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# macOS (Apple Silicon)
|
curl -L -o mt5.tar.gz https://github.com/masdevid/mt5-mcp/releases/latest/download/mt5-quant-macos-arm64.tar.gz
|
||||||
curl -L -o mt5-quant.tar.gz https://github.com/masdevid/mt5-mcp/releases/latest/download/mt5-quant-macos-arm64.tar.gz
|
tar -xzf mt5.tar.gz
|
||||||
tar -xzf mt5-quant.tar.gz
|
bash scripts/setup.sh
|
||||||
cd mt5-quant-macos-arm64
|
claude mcp add MT5-Quant -- $(pwd)/mt5-quant
|
||||||
./mt5-quant --help
|
|
||||||
|
|
||||||
# Linux (x64)
|
|
||||||
curl -L -o mt5-quant.tar.gz https://github.com/masdevid/mt5-mcp/releases/latest/download/mt5-quant-linux-x64.tar.gz
|
|
||||||
tar -xzf mt5-quant.tar.gz
|
|
||||||
cd mt5-quant-linux-x64
|
|
||||||
./mt5-quant --help
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Option 2: Build from Source
|
**[Full Setup →](docs/QUICKSTART.md)**
|
||||||
|
|
||||||
```bash
|
## Quick Start
|
||||||
git clone https://github.com/masdevid/mt5-mcp
|
|
||||||
cd mt5-mcp
|
|
||||||
bash scripts/build-rust.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
> **Rust** required. Install from [rustup.rs](https://rustup.rs/)
|
|
||||||
|
|
||||||
### 2. Install MetaTrader 5
|
|
||||||
|
|
||||||
MT5 runs under Wine on both macOS and Linux. Two supported paths:
|
|
||||||
|
|
||||||
**macOS — MetaTrader 5.app (recommended, free)**
|
|
||||||
|
|
||||||
Download from [metatrader5.com](https://www.metatrader5.com/en/download) and install to `/Applications`. Launch it once so it initializes the Wine prefix (~30 s), then quit.
|
|
||||||
|
|
||||||
Wine binary auto-detected at:
|
|
||||||
```
|
|
||||||
/Applications/MetaTrader 5.app/Contents/SharedSupport/wine/bin/wine64
|
|
||||||
```
|
|
||||||
MT5 prefix auto-detected at:
|
|
||||||
```
|
|
||||||
~/Library/Application Support/net.metaquotes.wine.metatrader5/drive_c/Program Files/MetaTrader 5
|
|
||||||
```
|
|
||||||
|
|
||||||
**macOS — CrossOver (paid, better Wine compatibility)**
|
|
||||||
|
|
||||||
Install [CrossOver](https://www.codeweavers.com/), create a bottle named `MetaTrader5`, install MT5 inside it.
|
|
||||||
|
|
||||||
Wine binary:
|
|
||||||
```
|
|
||||||
/Applications/CrossOver.app/Contents/SharedSupport/CrossOver/bin/wine64
|
|
||||||
```
|
|
||||||
MT5 prefix (CrossOver 24+):
|
|
||||||
```
|
|
||||||
~/Library/Application Support/MetaQuotes/<hash>/drive_c/Program Files/MetaTrader 5
|
|
||||||
```
|
|
||||||
|
|
||||||
> **Apple Silicon (M1/M2/M3):** `setup.sh` automatically prepends `arch -x86_64` to all Wine calls. No manual action needed.
|
|
||||||
|
|
||||||
**Linux**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo apt install wine64 xvfb # Debian/Ubuntu
|
|
||||||
# or
|
|
||||||
sudo dnf install wine xorg-x11-server-Xvfb # Fedora/RHEL
|
|
||||||
|
|
||||||
# Install MT5 under Wine
|
|
||||||
wine64 MetaTrader5Setup.exe
|
|
||||||
```
|
|
||||||
|
|
||||||
MT5 prefix auto-detected at:
|
|
||||||
```
|
|
||||||
~/.wine/drive_c/Program Files/MetaTrader 5
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. Configure
|
|
||||||
|
|
||||||
```bash
|
|
||||||
bash scripts/setup.sh # auto-detects paths and writes config
|
|
||||||
bash scripts/setup.sh --yes # non-interactive (CI / fresh machine)
|
|
||||||
```
|
|
||||||
|
|
||||||
`setup.sh` writes `config/mt5-quant.yaml`. To configure manually, copy the example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cp config/mt5-quant.example.yaml config/mt5-quant.yaml
|
|
||||||
```
|
|
||||||
|
|
||||||
Minimum required fields:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# macOS (MetaTrader 5.app)
|
|
||||||
wine_executable: "/Applications/MetaTrader 5.app/Contents/SharedSupport/wine/bin/wine64"
|
|
||||||
terminal_dir: "~/Library/Application Support/net.metaquotes.wine.metatrader5/drive_c/Program Files/MetaTrader 5"
|
|
||||||
|
|
||||||
# Linux
|
|
||||||
# wine_executable: "/usr/bin/wine64"
|
|
||||||
# terminal_dir: "~/.wine/drive_c/Program Files/MetaTrader 5"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 4. Register the MCP server
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Add to Claude Code (adjust path to where you cloned the repo)
|
|
||||||
claude mcp add MT5-Quant -- /path/to/mt5-quant/target/release/mt5-quant
|
|
||||||
```
|
|
||||||
|
|
||||||
`setup.sh` runs this automatically. To check registration:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
claude mcp list
|
|
||||||
```
|
|
||||||
|
|
||||||
Expected output:
|
|
||||||
```
|
|
||||||
MT5-Quant: /path/to/mt5-quant/target/release/mt5-quant
|
|
||||||
```
|
|
||||||
|
|
||||||
**Claude Code integration files** (CLAUDE.md template + baseline hook):
|
|
||||||
```bash
|
|
||||||
bash scripts/setup.sh --claude-code
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5. Verify
|
|
||||||
|
|
||||||
```bash
|
|
||||||
bash scripts/platform_detect.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
Expected output (macOS):
|
|
||||||
```
|
|
||||||
Wine: /Applications/MetaTrader 5.app/Contents/SharedSupport/wine/bin/wine64
|
|
||||||
MT5 dir: ~/Library/Application Support/net.metaquotes.wine.metatrader5/.../MetaTrader 5
|
|
||||||
Display: gui
|
|
||||||
Arch: arch -x86_64 ← Apple Silicon only
|
|
||||||
```
|
|
||||||
|
|
||||||
Or from Claude: *"Run verify_setup"*
|
|
||||||
|
|
||||||
### 6. Run a backtest
|
|
||||||
|
|
||||||
```
|
```
|
||||||
Run a backtest on MyEA from 2025.01.01 to 2025.06.30
|
Run a backtest on MyEA from 2025.01.01 to 2025.03.31
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
The AI runs the full pipeline: compile → clean cache → backtest → extract → analyze.
|
||||||
|
|
||||||
## Headless Support
|
## Documentation
|
||||||
|
|
||||||
| Platform | `display.mode` | Notes |
|
| Doc | Purpose |
|
||||||
|----------|---------------|-------|
|
|-----|---------|
|
||||||
| macOS (MT5.app or CrossOver) | `auto` | Wine handles display internally — no Xvfb needed |
|
| [QUICKSTART.md](docs/QUICKSTART.md) | Complete setup for macOS/Linux |
|
||||||
| Linux with `$DISPLAY` set | `auto` | Uses existing X11 session |
|
| [CONFIG.md](docs/CONFIG.md) | Configuration reference |
|
||||||
| Linux VPS / CI (no monitor) | `headless` | Auto-starts Xvfb on `:99` |
|
| [TOOLS.md](docs/MCP_TOOLS.md) | All 43 tools (31 documented) |
|
||||||
|
| [ARCHITECTURE.md](docs/ARCHITECTURE.md) | Design and internals |
|
||||||
**Linux headless setup:**
|
| [TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) | Common issues |
|
||||||
|
| [REMOTE_AGENTS.md](docs/REMOTE_AGENTS.md) | Linux optimization agents |
|
||||||
```bash
|
|
||||||
sudo apt install xvfb
|
|
||||||
```
|
|
||||||
|
|
||||||
Then set in `config/mt5-quant.yaml`:
|
|
||||||
```yaml
|
|
||||||
display:
|
|
||||||
mode: headless
|
|
||||||
xvfb_display: ":99"
|
|
||||||
xvfb_screen: "1024x768x16"
|
|
||||||
```
|
|
||||||
|
|
||||||
`platform_detect.sh` starts Xvfb automatically before each backtest run. To test manually:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
Xvfb :99 -screen 0 1024x768x16 &
|
|
||||||
DISPLAY=:99 xdpyinfo | grep dimensions
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## MCP Tools (43)
|
## MCP Tools (43)
|
||||||
|
|
||||||
@@ -323,239 +139,11 @@ Use these for targeted analysis, or `analyze_report` to run all at once.
|
|||||||
|
|
||||||
Full schema: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md)
|
Full schema: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md)
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Architecture
|
|
||||||
|
|
||||||
```
|
|
||||||
AI Agent (Claude / Cursor)
|
|
||||||
│ MCP protocol (stdio)
|
|
||||||
MT5-Quant server (Rust)
|
|
||||||
│ subprocess
|
|
||||||
Wine/CrossOver
|
|
||||||
│
|
|
||||||
MetaTrader 5 (Windows/Wine)
|
|
||||||
│
|
|
||||||
analysis.json ← AI reads this
|
|
||||||
```
|
|
||||||
|
|
||||||
Every backtest produces `analysis.json` — a stable, AI-readable artifact.
|
|
||||||
|
|
||||||
The analysis engine is **strategy-agnostic**: a `PROFILES` system drives keyword matching, depth extraction, and cycle grouping so the same pipeline works for any EA type.
|
|
||||||
|
|
||||||
| Strategy | CLI / entry point | Depth tracking | Exit keywords | Cycle grouping |
|
|
||||||
|----------|------------------|----------------|---------------|----------------|
|
|
||||||
| `grid` (default) | `mt5-analyze-grid` | `Layer #N` → L1–L8+ | locking / cutloss / zombie / timeout | magic + direction, 60 min gap |
|
|
||||||
| `scalper` | `mt5-analyze-scalper` | — | tp / sl / manual / trailing | magic, 10 min gap |
|
|
||||||
| `trend` | `mt5-analyze-trend` | — | tp / sl / trailing / breakeven / partial | magic, 4 h gap |
|
|
||||||
| `hedge` | `mt5-analyze-hedge` | — | tp / sl / net_close / partial | magic + direction, 2 h gap |
|
|
||||||
| `generic` | `mt5-analyze` | — | tp / sl (profit-sign) | magic, 60 min gap |
|
|
||||||
|
|
||||||
**`analysis.json` fields** (strategy name controls what each field contains):
|
|
||||||
|
|
||||||
| Field | All strategies | Grid only |
|
|
||||||
|-------|---------------|-----------|
|
|
||||||
| `strategy` | Active profile name | — |
|
|
||||||
| `summary` | KPIs + streaks + cycle win rate + dominant exit | — |
|
|
||||||
| `monthly_pnl` | P/L, trade count, green flag per month | — |
|
|
||||||
| `dd_events` | DD events; `cause` uses profile keywords | Cause = locking_cascade / cutloss / zombie_exit |
|
|
||||||
| `top_losses` | Worst closing deals | `grid_depth_at_close` populated |
|
|
||||||
| `loss_sequences` | Consecutive losing runs | — |
|
|
||||||
| `position_pairs` | Hold time, layer, P/L per closed position | — |
|
|
||||||
| `depth_histogram` | Profile-driven depth counts | L1–L8+ (empty for other strategies) |
|
|
||||||
| `cycle_stats` | Cycle win rate; grouping + gap from profile | win_rate_by_depth populated |
|
|
||||||
| `exit_reason_breakdown` | Profile-specific exit reasons | locking / cutloss / zombie / timeout |
|
|
||||||
| `direction_bias` | Buy vs sell win rate and P/L | — |
|
|
||||||
| `streak_analysis` | Max win/loss streaks, current streak | — |
|
|
||||||
| `session_breakdown` | Asian / London / London-NY / New York P/L | — |
|
|
||||||
| `weekday_pnl` | Mon–Sun P/L and win rate | — |
|
|
||||||
| `concurrent_peak` | Peak simultaneous open positions | — |
|
|
||||||
| `hourly_pnl` | Hour 0–23 (`--deep` only) | — |
|
|
||||||
| `volume_profile` | P/L by lot tier (`--deep` only) | — |
|
|
||||||
|
|
||||||
This is what makes AI reasoning over backtest results possible — across any EA type.
|
|
||||||
|
|
||||||
Full architecture: [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Backtest History
|
|
||||||
|
|
||||||
Every experiment can be archived into a single JSON ledger at `config/backtest_history.json` — a permanent, queryable record of every run. This lets you delete raw report directories (which can be GBs of tick data) while keeping all results as compact JSON.
|
|
||||||
|
|
||||||
```
|
|
||||||
[workflow]
|
|
||||||
run_backtest → archive_report(delete_after=true) # disk reclaimed
|
|
||||||
↓
|
|
||||||
backtest_history.json (grows forever, tiny)
|
|
||||||
↓
|
|
||||||
get_history(min_profit=5000, max_dd_pct=15) # query past runs
|
|
||||||
↓
|
|
||||||
promote_to_baseline # set new production reference
|
|
||||||
```
|
|
||||||
|
|
||||||
**Files** (both gitignored, live in `config/`):
|
|
||||||
|
|
||||||
| File | Purpose |
|
|
||||||
|------|---------|
|
|
||||||
| `config/backtest_history.json` | Ledger of all archived backtest runs with full metrics, analysis summary, monthly P/L, and verdict |
|
|
||||||
| `config/baseline.json` | Current production reference — used by `compare_baseline` and the Claude Code hook |
|
|
||||||
|
|
||||||
Each history entry captures: all `metrics.json` fields + `analysis.json` summary + monthly P/L array + worst DD event. The raw report directory can be safely deleted after archiving.
|
|
||||||
|
|
||||||
**Typical session:**
|
|
||||||
|
|
||||||
```
|
|
||||||
1. run_backtest(expert, from, to)
|
|
||||||
2. archive_report(delete_after=true, verdict="winner", notes="tight SL test")
|
|
||||||
3. promote_to_baseline() ← if this is the new production config
|
|
||||||
4. get_history(ea="MyEA", verdict="winner") ← survey all winners later
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## .set File Workflow
|
|
||||||
|
|
||||||
```ini
|
|
||||||
; param=current||start||step||stop||Y (Y=sweep, N=fixed)
|
|
||||||
Min_Entry_Confidence=0.610||0.580||0.010||0.650||Y
|
|
||||||
TP_Pips=400||300||50||500||Y
|
|
||||||
Max_DD_Percent=15.0||N
|
|
||||||
```
|
|
||||||
|
|
||||||
MT5-Quant handles the undocumented requirements automatically: UTF-16LE encoding, `chmod 444`, OptMode reset, SpreadsheetML XML result parsing.
|
|
||||||
|
|
||||||
**Common .set patterns:**
|
|
||||||
|
|
||||||
```
|
|
||||||
# Find and inspect
|
|
||||||
list_set_files(ea="MyEA") → see all variants with combination counts
|
|
||||||
describe_sweep(path=MyEA_opt.set) → verify 240 combinations before launching
|
|
||||||
diff_set_files(path_a=v1.2.set, path_b=v1.3.set) → what changed between versions
|
|
||||||
|
|
||||||
# Edit
|
|
||||||
patch_set_file(path, patches={TP_Pips: 350}) → change one param, keep rest intact
|
|
||||||
clone_set_file(source, dest, overrides={...}) → new variant from a base in one call
|
|
||||||
|
|
||||||
# Post-optimization
|
|
||||||
get_optimization_results(job_id=X) → results[0].params = {TP:400, Conf:0.61, ...}
|
|
||||||
set_from_optimization( → write clean backtest .set from those params
|
|
||||||
path=MyEA_v1.3.set,
|
|
||||||
params=results[0].params,
|
|
||||||
template=MyEA_base.set → fill non-swept params from existing .set
|
|
||||||
)
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Remote Agents (Linux server farm)
|
|
||||||
|
|
||||||
Scale optimization throughput by connecting a Linux server as an MT5 agent farm. Linear speedup with agent count.
|
|
||||||
|
|
||||||
Setup guide: [docs/REMOTE_AGENTS.md](docs/REMOTE_AGENTS.md)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Claude Code Integration
|
|
||||||
|
|
||||||
`--claude-code` generates two files that make Claude aware of your trading context:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
bash scripts/setup.sh --claude-code
|
|
||||||
```
|
|
||||||
|
|
||||||
| File | Purpose |
|
|
||||||
|------|---------|
|
|
||||||
| `config/CLAUDE.template.md` | Copy to your EA project root as `CLAUDE.md`. Encodes MT5-Quant rules, baseline tracking policy, and symbol name reminders. |
|
|
||||||
| `.claude/hooks/user-prompt-submit.sh` | Runs before every Claude prompt. Reads `config/baseline.json` and injects your production metrics as context. |
|
|
||||||
|
|
||||||
**Production baseline** (`config/baseline.json`, gitignored):
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"symbol": "XAUUSD.cent",
|
|
||||||
"period": "2024-01-01/2024-12-31",
|
|
||||||
"net_profit": 1250.50,
|
|
||||||
"profit_factor": 1.43,
|
|
||||||
"max_drawdown_pct": 18.2,
|
|
||||||
"sharpe_ratio": 0.87,
|
|
||||||
"total_trades": 342,
|
|
||||||
"notes": "Best config as of 2024-12-15"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Update this file whenever a new version is promoted to production — either by running `promote_to_baseline` from Claude, or by editing it manually. Every subsequent Claude prompt will automatically include these metrics so Claude can tell you whether a new backtest is actually an improvement without you having to paste the numbers.
|
|
||||||
|
|
||||||
**Why this matters:** Without the baseline hook, you have to manually remind Claude what the production numbers are at the start of every session. With it, that context is always present.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
Run `verify_setup` from Claude first — it checks all paths and returns actionable hints.
|
Run `verify_setup` from Claude first — it checks all paths and returns actionable hints.
|
||||||
|
|
||||||
### Wine not found
|
**[Full Troubleshooting Guide →](docs/TROUBLESHOOTING.md)**
|
||||||
|
|
||||||
**macOS:** Confirm `/Applications/MetaTrader 5.app` exists and has been launched at least once. If using CrossOver, confirm the bottle is named correctly.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Check what setup.sh found:
|
|
||||||
bash scripts/platform_detect.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
**Linux:**
|
|
||||||
```bash
|
|
||||||
sudo apt install wine64 # Debian/Ubuntu
|
|
||||||
sudo dnf install wine # Fedora/RHEL
|
|
||||||
which wine64 # confirm it's on PATH
|
|
||||||
```
|
|
||||||
|
|
||||||
### terminal64.exe missing
|
|
||||||
|
|
||||||
MT5 unpacks `terminal64.exe` only after its first launch. Open MetaTrader 5.app, wait for initialization (~30 s), then quit. Re-run setup:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
bash scripts/setup.sh --yes
|
|
||||||
```
|
|
||||||
|
|
||||||
### MCP server not appearing in Claude
|
|
||||||
|
|
||||||
```bash
|
|
||||||
claude mcp list # should show MT5-Quant
|
|
||||||
claude mcp remove MT5-Quant # remove stale entry if needed
|
|
||||||
claude mcp add MT5-Quant -- /absolute/path/to/mt5-quant/target/release/mt5-quant
|
|
||||||
```
|
|
||||||
|
|
||||||
Use an **absolute path** — relative paths break when Claude starts from a different working directory.
|
|
||||||
|
|
||||||
### Report not found after backtest
|
|
||||||
|
|
||||||
1. **Wrong symbol name** — brokers use custom names (`XAUUSDm`, `XAUUSD.cent`). Check `verify_setup` → `experts_dir`, or look in `<terminal_dir>/history/` for available symbols.
|
|
||||||
2. **No history data** — open MT5, open the symbol's chart, wait for history to download, then retry.
|
|
||||||
3. **EA crash at startup** — check `<terminal_dir>/MQL5/Logs/` for `OnInit` errors.
|
|
||||||
4. **Date range has no trades** — try a wider range or confirm the symbol was active during that period.
|
|
||||||
|
|
||||||
### MetaEditor compile errors
|
|
||||||
|
|
||||||
Log at `<terminal_dir>/MQL5/Logs/`. Common causes:
|
|
||||||
- Missing `#include` files — copy dependencies into `Experts/` alongside the `.mq5`
|
|
||||||
- Stale `.ex5` from a different MT5 build — delete it and recompile
|
|
||||||
|
|
||||||
### No deals in backtest report
|
|
||||||
|
|
||||||
- Use `model=0` (every tick) — models 1 and 2 skip intra-bar movement, producing zero deals for grid/martingale EAs
|
|
||||||
- Check the `.set` file has values appropriate for the symbol/broker
|
|
||||||
- Confirm `OnInit()` returns `INIT_SUCCEEDED` (MT5 Journal tab)
|
|
||||||
|
|
||||||
### Optimization never finishes / no report
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# From Claude:
|
|
||||||
tail_log(job_id=X, filter=errors)
|
|
||||||
get_optimization_status(job_id=X)
|
|
||||||
```
|
|
||||||
|
|
||||||
If MT5 crashed mid-run, open `<terminal_dir>/terminal.ini` and remove the line containing `OptMode=-1`, then retry.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
+107
@@ -0,0 +1,107 @@
|
|||||||
|
# Configuration Reference
|
||||||
|
|
||||||
|
## Config File Location
|
||||||
|
|
||||||
|
```
|
||||||
|
config/mt5-quant.yaml # Project directory (development)
|
||||||
|
~/.config/mt5-quant/config/mt5-quant.yaml # System-wide (production)
|
||||||
|
```
|
||||||
|
|
||||||
|
Environment variable to override:
|
||||||
|
```bash
|
||||||
|
export MT5_MCP_HOME=/path/to/config
|
||||||
|
```
|
||||||
|
|
||||||
|
## Full Config Example
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# Required: Wine executable path
|
||||||
|
wine_executable: "/Applications/MetaTrader 5.app/Contents/SharedSupport/wine/bin/wine64"
|
||||||
|
|
||||||
|
# Required: MT5 installation directory
|
||||||
|
terminal_dir: "~/Library/Application Support/net.metaquotes.wine.metatrader5/drive_c/Program Files/MetaTrader 5"
|
||||||
|
|
||||||
|
# Optional: Default backtest parameters
|
||||||
|
defaults:
|
||||||
|
symbol: "XAUUSD.cent"
|
||||||
|
timeframe: "M5"
|
||||||
|
deposit: 10000
|
||||||
|
currency: "USD"
|
||||||
|
model: 0 # 0=every tick, 1=1min OHLC, 2=open price
|
||||||
|
leverage: 500
|
||||||
|
|
||||||
|
# Optional: Display settings
|
||||||
|
display:
|
||||||
|
mode: auto # auto, gui, headless
|
||||||
|
xvfb_display: ":99" # Linux headless only
|
||||||
|
xvfb_screen: "1024x768x16" # Linux headless only
|
||||||
|
|
||||||
|
# Optional: Directories (auto-detected from terminal_dir if not set)
|
||||||
|
experts_dir: "~/.../MetaTrader 5/MQL5/Experts"
|
||||||
|
indicators_dir: "~/.../MetaTrader 5/MQL5/Indicators"
|
||||||
|
scripts_dir: "~/.../MetaTrader 5/MQL5/Scripts"
|
||||||
|
|
||||||
|
# Optional: Reports directory
|
||||||
|
reports_dir: "./reports"
|
||||||
|
|
||||||
|
# Optional: Optimization settings
|
||||||
|
optimization:
|
||||||
|
remote_agents:
|
||||||
|
enabled: false
|
||||||
|
check_agent_count: true
|
||||||
|
min_agents: 4
|
||||||
|
```
|
||||||
|
|
||||||
|
## Platform-Specific Examples
|
||||||
|
|
||||||
|
### macOS with MetaTrader 5.app
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
wine_executable: "/Applications/MetaTrader 5.app/Contents/SharedSupport/wine/bin/wine64"
|
||||||
|
terminal_dir: "~/Library/Application Support/net.metaquotes.wine.metatrader5/drive_c/Program Files/MetaTrader 5"
|
||||||
|
defaults:
|
||||||
|
symbol: "XAUUSDc"
|
||||||
|
timeframe: "M5"
|
||||||
|
deposit: 10000
|
||||||
|
```
|
||||||
|
|
||||||
|
### macOS with CrossOver
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
wine_executable: "/Applications/CrossOver.app/Contents/SharedSupport/CrossOver/bin/wine64"
|
||||||
|
terminal_dir: "~/Library/Application Support/MetaQuotes/Terminal/<hash>/drive_c/Program Files/MetaTrader 5"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Linux
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
wine_executable: "/usr/bin/wine64"
|
||||||
|
terminal_dir: "~/.wine/drive_c/Program Files/MetaTrader 5"
|
||||||
|
display:
|
||||||
|
mode: headless
|
||||||
|
xvfb_display: ":99"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Headless Mode (Linux VPS)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
display:
|
||||||
|
mode: headless
|
||||||
|
xvfb_display: ":99"
|
||||||
|
xvfb_screen: "1024x768x16"
|
||||||
|
```
|
||||||
|
|
||||||
|
Requires:
|
||||||
|
```bash
|
||||||
|
sudo apt install xvfb
|
||||||
|
```
|
||||||
|
|
||||||
|
## Auto-Detection
|
||||||
|
|
||||||
|
`setup.sh` automatically detects:
|
||||||
|
- Wine executable (MetaTrader 5.app, CrossOver, or system Wine)
|
||||||
|
- MT5 terminal directory
|
||||||
|
- Architecture (Apple Silicon adds `arch -x86_64`)
|
||||||
|
- Display mode (GUI vs headless)
|
||||||
|
|
||||||
|
Run `setup.sh` whenever you move the installation.
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
# Quickstart Guide
|
||||||
|
|
||||||
|
## 1. Download or Build
|
||||||
|
|
||||||
|
### Option A: Prebuilt Binary (Recommended)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# macOS (Apple Silicon)
|
||||||
|
curl -L -o mt5-quant.tar.gz https://github.com/masdevid/mt5-mcp/releases/latest/download/mt5-quant-macos-arm64.tar.gz
|
||||||
|
tar -xzf mt5-quant.tar.gz
|
||||||
|
|
||||||
|
# Linux (x64)
|
||||||
|
curl -L -o mt5-quant.tar.gz https://github.com/masdevid/mt5-mcp/releases/latest/download/mt5-quant-linux-x64.tar.gz
|
||||||
|
tar -xzf mt5-quant.tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option B: Build from Source
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/masdevid/mt5-mcp
|
||||||
|
cd mt5-mcp
|
||||||
|
bash scripts/build-rust.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. Install MetaTrader 5
|
||||||
|
|
||||||
|
### macOS - MetaTrader 5.app (Free)
|
||||||
|
|
||||||
|
1. Download from [metatrader5.com](https://www.metatrader5.com/en/download)
|
||||||
|
2. Install to `/Applications`
|
||||||
|
3. **Launch once** to initialize Wine prefix (~30s), then quit
|
||||||
|
|
||||||
|
Auto-detected paths:
|
||||||
|
- Wine: `/Applications/MetaTrader 5.app/Contents/SharedSupport/wine/bin/wine64`
|
||||||
|
- MT5: `~/Library/Application Support/net.metaquotes.wine.metatrader5/drive_c/Program Files/MetaTrader 5`
|
||||||
|
|
||||||
|
### macOS - CrossOver (Paid, Better Compatibility)
|
||||||
|
|
||||||
|
1. Install [CrossOver](https://www.codeweavers.com/)
|
||||||
|
2. Create bottle `MetaTrader5`
|
||||||
|
3. Install MT5 inside bottle
|
||||||
|
|
||||||
|
Auto-detected paths:
|
||||||
|
- Wine: `/Applications/CrossOver.app/Contents/SharedSupport/CrossOver/bin/wine64`
|
||||||
|
- MT5: `~/Library/Application Support/MetaQuotes/<hash>/drive_c/Program Files/MetaTrader 5`
|
||||||
|
|
||||||
|
### Linux
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Debian/Ubuntu
|
||||||
|
sudo apt install wine64 xvfb
|
||||||
|
|
||||||
|
# Fedora/RHEL
|
||||||
|
sudo dnf install wine xorg-x11-server-Xvfb
|
||||||
|
|
||||||
|
# Install MT5
|
||||||
|
wine64 MetaTrader5Setup.exe
|
||||||
|
```
|
||||||
|
|
||||||
|
MT5 location: `~/.wine/drive_c/Program Files/MetaTrader 5`
|
||||||
|
|
||||||
|
## 3. Configure
|
||||||
|
|
||||||
|
Run the setup script to auto-detect paths:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash scripts/setup.sh # interactive
|
||||||
|
bash scripts/setup.sh --yes # non-interactive (CI)
|
||||||
|
```
|
||||||
|
|
||||||
|
This creates `config/mt5-quant.yaml` (gitignored).
|
||||||
|
|
||||||
|
Minimum config:
|
||||||
|
```yaml
|
||||||
|
wine_executable: "/Applications/MetaTrader 5.app/Contents/SharedSupport/wine/bin/wine64"
|
||||||
|
terminal_dir: "~/Library/Application Support/net.metaquotes.wine.metatrader5/drive_c/Program Files/MetaTrader 5"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. Register MCP Server
|
||||||
|
|
||||||
|
### Claude Code
|
||||||
|
|
||||||
|
```bash
|
||||||
|
claude mcp add MT5-Quant -- /path/to/mt5-quant/target/release/mt5-quant
|
||||||
|
```
|
||||||
|
|
||||||
|
Verify:
|
||||||
|
```bash
|
||||||
|
claude mcp list
|
||||||
|
```
|
||||||
|
|
||||||
|
### Windsurf
|
||||||
|
|
||||||
|
Add to `~/.windsurf/config.yaml`:
|
||||||
|
```yaml
|
||||||
|
mcpServers:
|
||||||
|
mt5-quant:
|
||||||
|
command: /path/to/mt5-quant
|
||||||
|
env:
|
||||||
|
MT5_MCP_HOME: /path/to/mt5-mcp
|
||||||
|
```
|
||||||
|
|
||||||
|
## 5. Verify Setup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash scripts/platform_detect.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Or in Claude/Windsurf:
|
||||||
|
```
|
||||||
|
Run verify_setup
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected output:
|
||||||
|
```
|
||||||
|
Wine: /Applications/MetaTrader 5.app/.../wine64
|
||||||
|
MT5 dir: ~/Library/Application Support/.../MetaTrader 5
|
||||||
|
Display: gui
|
||||||
|
Arch: arch -x86_64
|
||||||
|
```
|
||||||
|
|
||||||
|
## 6. Run First Backtest
|
||||||
|
|
||||||
|
```
|
||||||
|
Run a backtest on MyEA from 2025.01.01 to 2025.03.31
|
||||||
|
```
|
||||||
|
|
||||||
|
The AI will:
|
||||||
|
1. Verify setup
|
||||||
|
2. Compile your EA
|
||||||
|
3. Clean MT5 cache
|
||||||
|
4. Run backtest
|
||||||
|
5. Extract and analyze results
|
||||||
|
6. Report key findings
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Next:** See [TOOLS.md](TOOLS.md) for all 43 available tools.
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
# Troubleshooting
|
||||||
|
|
||||||
|
Run `verify_setup` first — it checks all paths and returns actionable hints.
|
||||||
|
|
||||||
|
## Wine Not Found
|
||||||
|
|
||||||
|
### macOS
|
||||||
|
|
||||||
|
Confirm `/Applications/MetaTrader 5.app` exists and has been launched at least once.
|
||||||
|
|
||||||
|
Check detection:
|
||||||
|
```bash
|
||||||
|
bash scripts/platform_detect.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
If using CrossOver, confirm bottle is named `MetaTrader5`.
|
||||||
|
|
||||||
|
### Linux
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt install wine64 # Debian/Ubuntu
|
||||||
|
sudo dnf install wine # Fedora/RHEL
|
||||||
|
which wine64 # confirm on PATH
|
||||||
|
```
|
||||||
|
|
||||||
|
## terminal64.exe Missing
|
||||||
|
|
||||||
|
MT5 unpacks `terminal64.exe` only after first launch.
|
||||||
|
|
||||||
|
1. Open MetaTrader 5.app
|
||||||
|
2. Wait for initialization (~30s)
|
||||||
|
3. Quit
|
||||||
|
4. Re-run setup:
|
||||||
|
```bash
|
||||||
|
bash scripts/setup.sh --yes
|
||||||
|
```
|
||||||
|
|
||||||
|
## MCP Server Not Appearing
|
||||||
|
|
||||||
|
### Claude Code
|
||||||
|
|
||||||
|
```bash
|
||||||
|
claude mcp list # should show MT5-Quant
|
||||||
|
claude mcp remove MT5-Quant # remove stale entry
|
||||||
|
claude mcp add MT5-Quant -- /absolute/path/to/mt5-quant
|
||||||
|
```
|
||||||
|
|
||||||
|
**Must use absolute path** — relative paths break when Claude starts from different directories.
|
||||||
|
|
||||||
|
### Windsurf
|
||||||
|
|
||||||
|
1. Check logs: `~/.windsurf/logs/`
|
||||||
|
2. Verify executable path is absolute
|
||||||
|
3. Test manually: `./mt5-quant --help`
|
||||||
|
|
||||||
|
## Config Not Found
|
||||||
|
|
||||||
|
Set `MT5_MCP_HOME` or ensure config exists at:
|
||||||
|
- macOS: `~/.config/mt5-quant/config/mt5-quant.yaml`
|
||||||
|
- Project: `config/mt5-quant.yaml`
|
||||||
|
|
||||||
|
## Report Not Found After Backtest
|
||||||
|
|
||||||
|
1. **Wrong symbol name** — brokers use custom names (`XAUUSDm`, `XAUUSD.cent`). Check `verify_setup` or look in `<terminal_dir>/history/`.
|
||||||
|
|
||||||
|
2. **No history data** — open MT5, open symbol chart, wait for history download.
|
||||||
|
|
||||||
|
3. **EA crash at startup** — check `<terminal_dir>/MQL5/Logs/` for `OnInit` errors.
|
||||||
|
|
||||||
|
4. **Date range has no trades** — try wider range or confirm symbol was active.
|
||||||
|
|
||||||
|
## MetaEditor Compile Errors
|
||||||
|
|
||||||
|
Check `<terminal_dir>/MQL5/Logs/`:
|
||||||
|
|
||||||
|
- **Missing `#include`** — copy dependencies into `Experts/` alongside `.mq5`
|
||||||
|
- **Stale `.ex5`** — delete old binary and recompile
|
||||||
|
|
||||||
|
## No Deals in Backtest Report
|
||||||
|
|
||||||
|
- Use `model=0` (every tick) — models 1/2 skip intra-bar movement, producing zero deals for grid/martingale EAs
|
||||||
|
- Check `.set` file values appropriate for symbol/broker
|
||||||
|
- Confirm `OnInit()` returns `INIT_SUCCEEDED` (MT5 Journal tab)
|
||||||
|
|
||||||
|
## Optimization Never Finishes
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# From Claude:
|
||||||
|
tail_log(job_id=X, filter=errors)
|
||||||
|
get_optimization_status(job_id=X)
|
||||||
|
```
|
||||||
|
|
||||||
|
If MT5 crashed, edit `<terminal_dir>/terminal.ini` and remove line containing `OptMode=-1`, then retry.
|
||||||
|
|
||||||
|
## Permission Denied
|
||||||
|
|
||||||
|
```bash
|
||||||
|
chmod +x /path/to/mt5-quant
|
||||||
|
```
|
||||||
|
|
||||||
|
## Still Stuck?
|
||||||
|
|
||||||
|
1. Run `verify_setup` and share output
|
||||||
|
2. Check `tail_log` for errors
|
||||||
|
3. Review `<terminal_dir>/MQL5/Logs/` for EA errors
|
||||||
Reference in New Issue
Block a user