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 candidate bots to finalists based on profit, drawdown, positive months/years and equity-curve criteria. Runs terminal64.exe headless; Windows + MetaTrader 5 required at run time.
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.
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.MagicNumber, one at a time, range ±50% step 5%; then a final backtest.Tested bots move to in-testing; finalists are also copied to finalists with
their optimized .set.
terminal64.exe).Model=4).MQL5\Experts: candidates, in-testing, finalists.common.symbols set in the config — the pairs Round 1 backtests (your
Market Watch symbols)..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.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).
Verify the generated Round-1 INIs without launching MT5:
python3 skills/mt5-robot-tester/scripts/mt5_batch_tester.py \
--config my_config.json --output-dir reports/mt5_pipeline --dry-runpython3 skills/mt5-robot-tester/scripts/mt5_batch_tester.py \
--config my_config.json --output-dir reports/mt5_pipelineEach bot flows R1 → R2 → R3 → finalist decision. Progress is written to
state.json and run.log after every step.
python3 skills/mt5-robot-tester/scripts/mt5_batch_tester.py \
--config my_config.json --output-dir reports/mt5_pipeline --resume--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.
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:
python3 skills/mt5-robot-tester/scripts/dashboard.py \
--config my_config.json --output-dir reports/mt5_pipelineIt 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.
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.count_positive_profit(passes) ≥ round1_min_positive (default 5).best_symbol_profit ≥ round1_min_profit_multiple × deposit (default 3×).Fail → bot rejected (moved to in-testing).
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.
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.
evaluate_finalist: improved on Round 2 and profit ≥4× deposit and worst
DD ≤12%. → copied to finalists with <bot>.set.
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.
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.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.Report= names because build 6061 ignores absolute report paths;
collect completed reports from the terminal data directory.Model=4) need broker tick data; it is slow — expect long runs.--resume reuses only fingerprint-
matching work and retries execution errors..blocked marker; verify the recorded PID/process tree
has exited before removing that marker manually.b981835
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.