mt5-robot-tester
Select the best MetaTrader 5 trading robots (Expert Advisors) that have not been backtested yet, by running the MT5 Strategy Tester from the command line through a 3-round pipeline. Use when the user wants to batch-test MT5 bots/EAs, screen robots across all symbols, optimize EA parameters, or move
By tradermonty · 1,049 installs
npx skills add tradermonty/claude-trading-skills --skill mt5-robot-tester
Source repository · Upstream listing
MT5 Robot Tester
Overview
Select the best MetaTrader 5 robots (Expert Advisors) from a candidates folder
by driving the Strategy Tester from the command line through a 3 round
pipeline , moving each bot between folders as it advances, and learning across
runs to improve selection each loop. The whole run is checkpointed and
resumable.
Round 1 — screening (all pairs): backtest the EA on each symbol in the
configured common.symbols list (one Optimization=0 backtest per symbol —
MT5 build 6061 leaves the Optimization=3 XML empty, so per symbol backtests
are used). Gate: ≥5 symbols profitable AND best symbol ≥3× deposit .
Round 2 — best pair backtest: single backtest on the best symbol; analyze
net profit %, worst drawdown %, % positive months, all years positive, LR
Correlation, months to new high.
Round 3 — sequential parameter optimization: optimize the 5–6 inputs after
MagicNumber , one at a time, range ±50% step 5%; then a final backtest.
Finalist: optimized result improves on Round 2 and profit ≥4×
deposit and worst drawdown ≤12% .
Tested bots move to in testing ; finalists are also copied to finalists with
their optimized .set .
When to Use
"Prueba robots / bots / EAs en MetaTrader 5."
Screen a folder of MT5 Expert Advisors and pick the best across all pairs.
Optimize EA parameters and decide finalists by profit/drawdown/consistency.
Resume an interrupted testing run.
Prerequisites
Windows + MetaTrader 5 installed (the tester runs terminal64.exe ).
Broker tick data downloaded (default modeling is real ticks, Model=4 ).
The three folders under MQL5\Experts : candidates , in testing , finalists .
common.symbols set in the config — the pairs Round 1 backtests (your
Market Watch symbols).
Optional per bot .set files (config sets dir ) for the Round 2 baseline and
Round 3 parameter optimization. Every input is fixed during optimization
except the one parameter currently being searched; without a .set , Round 3
is skipped and the verdict comes from Round 2.
Close MetaTrader 5 before running — the tester needs exclusive use of the
data folder.
Python 3.9+ (standard library only). No paid API.
Workflow
Step 1 — Configure
Copy assets/pipeline config.template.json , fill in the three folder paths and
(optionally) terminal path . Never commit real personal paths — pass the config
at run time. Defaults already encode the agreed settings (2020.01.01→2026.06.30,
H1, Model=4, 10000 USD, 1:100, gates and thresholds).
Step 2 — Dry run (optional)
Verify the generated Round 1 INIs without launching MT5:
Step 3 — Run the pipeline
Each bot flows R1 → R2 → R3 → finalist decision. Progress is written to
state.json and run.log after every step.
Step 4 — Resume if interrupted
resume skips completed bots and reuses finished rounds only while the
execution config, EA binary, and input .set fingerprints still match. A
changed period, symbol list, binary, or .set restarts that bot safely.
Optional — HTML control panel
Launch a local dashboard to see the bots in each folder, each bot's phase and
verdict, and a Launch button — no CLI needed after starting it:
It serves http://127.0.0.1:8765/ (opens automatically, localhost only). The
page auto refreshes every 3 s: folder contents, per bot phase (R1/R2/R3/done),
pass/fail verdicts, summary counts, and the live run.log . Start/stop requests
are limited to the exact local origin and require the per server CSRF token.
Step 5 — Read the results
leaderboard <ts .md / .json — ranking with verdict and key metrics.
learnings.json / learnings.md — what the skill learned this loop
(parameter impact and symbol priors) under the configured output directory.
mt5 reports/ and mt5 ini/ — raw MT5 reports and configs per bot/round.
Round details
Round 1 gate (both required)
1. count positive profit(passes) ≥ round1 min positive (default 5).
2. best symbol profit ≥ round1 min profit multiple × deposit (default 3×).
Fail → bot rejected (moved to in testing ).
Round 2 quality profile (reference thresholds)
Net profit ≥300%, worst DD <15% (larger of balance/equity %), positive months
70%, all years positive, LR Correlation ≥0.80 , months to new high ≤3.
Reported per bot; the hard finalist gate is Round 3.
Round 3 sequential optimization
For each of the 5–6 inputs after MagicNumber (learned order first), optimize
that single parameter over [V×0.5, V×1.5] step V×0.05 ( Optimization=1 )
while fixing every other .set input, fix its best value, then continue. Run a
final backtest with the exact complete input set saved for a finalist.
Finalist
evaluate finalist : improved on Round 2 and profit ≥4× deposit and worst
DD ≤12%. → copied to finalists with <bot .set .
Self learning across loops
learnings.json accumulates, per run: parameter average profit improvement
(reorders Round 3 optimization so the most impactful parameters are tried first),
symbol priors (how often each is a best pair), and per bot verdicts. This makes
selection converge faster each loop. Deterministic — plain aggregate statistics.
Output Format
leaderboard <ts .json — list of {name, verdict, best symbol, r2 profit,
final profit, final dd pct, lr, reason} sorted finalists first by profit.
leaderboard <ts .md — same as a table.
state.json — resumable per bot/per round checkpoint.
Resources
scripts/mt5 batch tester.py — pipeline orchestrator + INI builders (CLI).
scripts/parse mt5 optimization.py — optimization report (XML/HTML) parser +
Round 1 gate.
scripts/parse mt5 report.py — backtest report parser + balance series metrics.
scripts/mt5 learnings.py — cross run learning store.
scripts/mt5 common.py — shared parsing helpers (EN/ES headers, numbers).
references/mt5 cli reference.md — MT5 [Tester] / [TesterInputs] keys, enums,
report formats and caveats.
assets/pipeline config.template.json — config template with placeholders.
Key Principles
1. Never commit personal paths — folders/terminal come from config/ENV/args.
2. Relative Report= names because build 6061 ignores absolute report paths;
collect completed reports from the terminal data directory.
3. Real ticks ( Model=4 ) need broker tick data; it is slow — expect long runs.
4. Resumable : every round checkpoints; resume reuses only fingerprint
matching work and retries execution errors.
5. Fail closed : incomplete, timed out, stale, or unparsable reports never
reject, promote, or move a candidate. Every unique Round 1 symbol must finish.
6. Single MT5 owner : an OS lock is held for the process lifetime for each
shared MT5 data folder. If child termination cannot be confirmed, the whole
run stops and writes a .blocked marker; verify the recorded PID/process tree
has exited before removing that marker manually.
7. Full period metrics : months without deals at the start, end, or across a
full year remain part of the configured test period.
8. Learn each loop : parameter/symbol statistics bias future runs toward wins.
9. Verify against your build : report layout (esp. the deals table) and the
32 ms delay mapping can differ — see the reference's (verify) notes.