feat: MT5-Quant MCP server for backtesting and optimization

MCP server exposing MetaTrader 5 strategy development tools to AI
assistants (Claude, Cursor, etc.) on macOS (CrossOver) and Linux (Wine).

Tools:
- run_backtest: full pipeline — compile EA, clean cache, backtest,
  parse HTML/XML report, analyze deals → metrics.json + analysis.json
- run_optimization: background genetic optimization with nohup/disown,
  UTF-16LE .set file handling, OptMode reset
- compile_ea: MQL5 compilation via MetaEditor with auto-detected
  include/ directory sync
- get_backtest_status / get_optimization_status: job polling
- verify_environment: Wine/MT5 path validation

Analytics:
- extract.py: MT5 HTML and SpreadsheetML XML report parser
- analyze.py: deal-level analysis (drawdown events, grid depth,
  loss sequences, monthly P&L) → analysis.json
- optimize_parser.py: optimization result parser with convergence analysis

Platform support:
- macOS CrossOver (GUI mode, no Xvfb needed)
- Linux Wine + Xvfb (headless, CI/CD compatible)
- Auto-detection of Wine executable and MT5 terminal paths
This commit is contained in:
Devid HW
2026-04-18 11:41:41 +07:00
commit 3f763827f4
25 changed files with 9824 additions and 0 deletions
+27
View File
@@ -0,0 +1,27 @@
; MT5 optimization .set file — example
; Format: param=current_value||start||step||stop||Y (Y=sweep this param)
; param=current_value||N (N=fixed, no sweep)
;
; MT5-Quant handles encoding automatically:
; - Converts to UTF-16LE (MT5 strips ||Y flags from UTF-8 files)
; - Sets read-only flag after writing
; - Resets OptMode in terminal.ini before launch
;
; Copy to your project dir and point --set to it.
; ── Entry parameters (sweep) ─────────────────────────────────────────────────
Min_Entry_Confidence=0.610||0.580||0.010||0.650||Y
Max_Entry_Spread=30||10||5||50||Y
; ── Take-profit and stop-loss (sweep) ────────────────────────────────────────
TP_Pips=400||300||50||600||Y
SL_Pips=800||600||100||1200||Y
; ── Grid / martingale settings (fixed) ───────────────────────────────────────
MaxLayers=6||N
LotMultiplier=1.5||N
GridStep_Pips=150||N
; ── Risk management (fixed) ──────────────────────────────────────────────────
Max_DD_Percent=15.0||N
CutLoss_Percent=25.0||N
+45
View File
@@ -0,0 +1,45 @@
# mt5-quant configuration (flat key format — no YAML nesting)
# Copy this file to config/mt5-quant.yaml and fill in your paths.
# ── MT5 / Wine paths ──────────────────────────────────────────────────────────
# macOS (CrossOver / MetaTrader 5.app)
wine_executable: "/Applications/MetaTrader 5.app/Contents/SharedSupport/wine/bin/wine64"
terminal_dir: "$HOME/Library/Application Support/net.metaquotes.wine.metatrader5/drive_c/Program Files/MetaTrader 5"
experts_dir: "$HOME/Library/Application Support/net.metaquotes.wine.metatrader5/drive_c/Program Files/MetaTrader 5/MQL5/Experts"
tester_profiles_dir: "$HOME/Library/Application Support/net.metaquotes.wine.metatrader5/drive_c/Program Files/MetaTrader 5/MQL5/Profiles/Tester"
tester_cache_dir: "$HOME/Library/Application Support/net.metaquotes.wine.metatrader5/drive_c/Program Files/MetaTrader 5/Tester"
# Linux (Wine)
# wine_executable: "/usr/bin/wine64"
# terminal_dir: "$HOME/.wine/drive_c/Program Files/MetaTrader 5"
# experts_dir: "$HOME/.wine/drive_c/Program Files/MetaTrader 5/MQL5/Experts"
# tester_profiles_dir: "$HOME/.wine/drive_c/Program Files/MetaTrader 5/MQL5/Profiles/Tester"
# tester_cache_dir: "$HOME/.wine/drive_c/Program Files/MetaTrader 5/Tester"
# ── Display ───────────────────────────────────────────────────────────────────
# auto: GUI on macOS CrossOver, Xvfb on Linux without $DISPLAY
# gui: always use display (requires active session)
# headless: always use Xvfb (requires xvfb-run)
display_mode: auto
# ── Project ───────────────────────────────────────────────────────────────────
# Root directory of your EA project (where .mq5 and .set files live)
project_dir: "/path/to/your/ea/project"
# ── Backtest defaults ─────────────────────────────────────────────────────────
# These are fallbacks when not passed as MCP tool arguments
backtest_symbol: "EURUSD"
backtest_deposit: 10000
backtest_currency: USD
backtest_leverage: 100
backtest_model: 0
backtest_timeframe: H1
backtest_timeout: 900
# ── Optimization ──────────────────────────────────────────────────────────────
opt_log_dir: /tmp
opt_min_agents: 1
# ── Reports output ────────────────────────────────────────────────────────────
reports_dir: "/path/to/your/ea/project/reports"