New

Complete Suite: all 11 tools. 5 new Premium desks inside.All 11 tools $557.98 one by one

$557.98 one by one $97 once Save $460.98Get the SuiteGet it

MT5 report analyzer

Choose an MT5 HTML statement or a trade-history CSV and this page reads it in your browser; the file isn't uploaded or stored.

Updated 21 October 2026. Runs in your browser; nothing you type is uploaded.

Sample statementSample report read in your browser

Free · no account required · local file processing

Analyze an MT5 statement without uploading it

Your file is read in this browser. The analyzer does not upload it or store it in browser storage. Site analytics may record fixed tool actions; report contents, filenames, numbers and simulation settings are not included in those events.

Free here: one file at a time, kept nowhere. To keep every statement in one journal, TradeLens is ProEA’s paid MT5 trading journal.

Start with the right account history

Continue below with a supported English table-based HTML statement or transaction CSV. Different CSV headings open the column mapper. PDF and XLSX files cannot be read by this posting importer; use a desktop HTML statement, or save the relevant transaction table as CSV and check its columns.

Download CSV exampleDownload HTML example
Paste report text instead
Supported formats and import instructions

In MT5 desktop, open Toolbox → History, choose the reporting period, then use the report command in the history context menu to save a table-based HTML report. Use English column headings. Menu wording and report layouts vary by build; an Overview dashboard or PDF is not a supported input. The downloadable HTML example shows the supported Deals layout.

The analyzer selects the English Deals section if present. It requires Time, Deal, Symbol, Type, Direction, Commission, Swap and Profit columns. Otherwise it accepts a closed Positions table with two Time columns plus Position, Symbol, Type, Commission, Swap and Profit. A missing Fee column is explicitly flagged and treated as zero. Missing monetary cells in performance rows are errors; blank cost cells on cash rows are treated as zero.

CSV uses comma delimiters and this header, with an optional dataset column:

time,id,kind,symbol,entry,profit,commission,swap,fee

Use kind deal for each execution (entry: in, out, inout or out by), position for a complete closed-position row, cash for deposits/withdrawals, or fee for a separate broker cost posting. Credit/bonus operations are not supported: MT5 credit is separate from balance and needs manual reconciliation. Do not mix deals and positions. Cash profit is the signed movement; its other amounts must be 0. Fee profit is a signed adjustment. Charges are negative, rebates positive: net = profit + commission + swap + fee. Do not enter a positive charge or duplicate a fee already in another column.

Use one account currency, dot decimal numbers, explicit zeros, unique IDs and chronological rows. Times are broker-clock values, not converted to your timezone. UTF-8 and UTF-16 with a byte-order mark are supported. Limits: 2 MiB, 20,000 data rows, 512 characters per cell. No rows are silently reordered or deduplicated.

For another CSV layout, choose column mapping and explicitly select its decimal format and gross/net meaning. The mapper supports comma, semicolon and tab separators; it does not translate operation types. Review correction, tax, dividend and broker-specific balance entries yourself: the tool cannot infer whether they represent external cash or a strategy cost.

SYNTHETIC SAMPLE — fabricated teaching data, not trading evidence.

Format: csv. Accepted 15 of 15 candidate rows; excluded 0 invalid rows.

2. Review the accepted rows

First 15 accepted rows. Full normalized data is in the CSV download.
Source row / IDTime / kindSymbolGross P/LCostsNet
2 / S0012026-01-01 09:00:00
cash
—500.000.00500.00
3 / S0022026-01-02 10:00:00
position
XAUUSD120.00-5.00115.00
4 / S0032026-01-03 10:00:00
position
XAUUSD-90.00-4.00-94.00
5 / S0042026-01-04 10:00:00
position
EURUSD70.00-3.0067.00
6 / S0052026-01-05 10:00:00
position
XAUUSD-140.00-6.00-146.00
7 / S0062026-01-06 10:00:00
position
XAUUSD-60.00-4.00-64.00
8 / S0072026-01-07 10:00:00
position
EURUSD180.00-2.00178.00
9 / S0082026-01-08 10:00:00
fee
—-5.000.00-5.00
10 / S0092026-01-09 10:00:00
position
XAUUSD0.00-4.00-4.00
11 / S0102026-01-10 10:00:00
cash
—-200.000.00-200.00
12 / S0112026-01-11 10:00:00
position
XAUUSD210.00-5.00205.00
13 / S0122026-01-12 10:00:00
position
EURUSD-100.00-3.00-103.00
14 / S0132026-01-13 10:00:00
position
XAUUSD-80.00-4.00-84.00
15 / S0142026-01-14 10:00:00
position
XAUUSD95.00-4.0091.00
16 / S0152026-01-15 10:00:00
position
EURUSD45.00-3.0042.00

3. Check the balances and clock

Times stay exactly in the source clock. These declarations travel with the audit; no timezone conversion or session classification is applied. If the broker offset changed during the period, keep it unknown or split the file. Use one account and currency per file.

If the first row funds a new account, enter 0 so that deposit is not counted twice. A positive baseline is needed for the bootstrap. Percent drawdown is unavailable where a loss starts from a zero performance baseline.

Report analysis

Synthetic teaching data. All amounts are in your account currency. Displays are rounded to 2 decimals; exports retain parsed numeric precision. This is arithmetic on the accepted rows, not verification of a broker account.

Net performance after recorded costs
198.00
Reconstructed ending balance
10,498.00
Realized performance drawdown
237.00 / 2.34%
Cash net (excluded from performance)
300.00

12 closed-position rows · 0 execution deals (0 exit/reversal deals) · 1 separate fee postings · 2 cash movements. A deal count is not a count of complete trades. Partial closes, reversals and entry costs require position reconstruction to calculate per-trade statistics.

Gross trading P/L
250.00
Signed commission
-44.00
Signed swap
-3.00
Signed fees / separate adjustments
-5.00
Deposits / withdrawals
500.00 / 200.00
Positive / negative / zero non-cash postings
6 / 7 / 0
Posting profit factor (after recorded costs)
1.40
Account balance drawdown including cash
268.00 / 2.52%
10,252.009,878.00 · posting order →
Realized performance balance: starting balance plus non-cash postings. Floating P/L is unavailable; the line is not an equity curve.

Performance drawdown removes deposits and withdrawals by adding only non-cash P/L to the starting baseline. This is a fixed-currency comparison, not a time-weighted return. Account drawdown includes cash movements and can be distorted by withdrawals. Neither series measures intratrade equity drawdown or a prop firm's breach rules. Missing rows and broker costs can change both.

CSV contains accepted normalized rows only. JSON also includes diagnostics, assumptions, analysis and the current simulation. Formula-like text is escaped in CSV exports. Treat exports as private account data.

4. Take a closed-position draft into your journal

Journal draft needs complete closed-position details for every performance row, no excluded rows and no unallocated fee/deal rows. Use accepted postings CSV to review this file.

Free journal workbook and column guide

The draft uses the workbook’s column order. CSV has values, not formulas. Leave the workbook’s R and Win/Loss formula columns intact when copying input columns. Planned risk, initial stop, setup and plan notes need your own records; a final stop is not assumed to be your initial stop. Free one-file exports stay local.

Next: keep every statement in one journal

This page reads one file and forgets it. TradeLens, ProEA’s paid trading journal, imports MT4, MT5 and CSV history, keeps it between sessions and shows where your trading leaks money. It never places trades.

See TradeLens

Bootstrap the observed postings

Resample your 13 accepted non-cash postings, including entry costs, zero results and separate fee postings. Amounts stay fixed; deposits and withdrawals are excluded. Block length 1 draws each posting independently. Larger blocks draw contiguous stretches with replacement, preserving some local order but breaking the sequence between blocks. No new market conditions are generated.

This does not estimate your true probability of profit or ruin. Repeated historical amounts assume the selected sample remains relevant. Independent draws discard clustering; blocks retain only short stretches and underweight edge observations. Sizing, spread changes, unrecorded fees, margin stop-outs, floating losses and market regimes are not modeled. Paths continue arithmetically below zero, so drawdown can exceed 100%; that is not an executable trading account.

Share this calculator

Post on XPost to Reddit
Embed or cite it on your site

Free on any site, blog, Notion page or Substack: paste this code to show the live calculator. The credit line is optional; keep it, edit it, add rel="nofollow" or remove it.

<iframe src="https://proea.app/embed/tools/mt5-report-analyzer" title="MT5 report analyzer" loading="lazy" referrerpolicy="strict-origin-when-cross-origin" style="display:block;width:100%;height:820px;border:0;border-radius:12px"></iframe>
<p style="font-size:12px">MT5 report analyzer by <a href="https://proea.app/en/tools/mt5-report-analyzer?utm_source=embed&utm_medium=referral&utm_campaign=mt5-report-analyzer">ProEA</a></p>

Writing about it instead? Cite the method and link the page:

MT5 trade return codes in the Experts and Journal tabs

When an Expert Advisor's order fails, or a trade you expected is missing from your exported Deals table, the terminal's Experts and Journal tabs show the trade server's return code (MqlTradeResult.retcode). The common ones:

10027 TRADE_RETCODE_CLIENT_DISABLES_AT
Autotrading disabled by client terminal. The Algo Trading button in MT5's toolbar is off, or Allow Algo Trading is unticked in the EA's settings. The fix for 10027
10026 TRADE_RETCODE_SERVER_DISABLES_AT
Autotrading disabled by server. The broker or prop firm has switched off automated trading on this account; ask them why (a breached or read-only account is a common reason). The fix for 10026
10030 TRADE_RETCODE_INVALID_FILL
Invalid order filling type. The order's type_filling (FOK, IOC or RETURN) is one the symbol does not allow; read SYMBOL_FILLING_MODE instead of hard-coding it. The fix for 10030
10014 TRADE_RETCODE_INVALID_VOLUME
Invalid volume in the request. The lot size is below SYMBOL_VOLUME_MIN, above SYMBOL_VOLUME_MAX, or not a multiple of SYMBOL_VOLUME_STEP. The fix for 10014 · Size the position in lots
10016 TRADE_RETCODE_INVALID_STOPS
Invalid stops in the request. The stop-loss or take-profit is on the wrong side, or closer to the price than SYMBOL_TRADE_STOPS_LEVEL points. (SYMBOL_TRADE_FREEZE_LEVEL is a separate distance, inside which orders cannot be changed.) The fix for 10016
10017 TRADE_RETCODE_TRADE_DISABLED
Trade is disabled. Trading is off for this symbol, for example when its trade mode is SYMBOL_TRADE_MODE_DISABLED. The fix for 10017
10018 TRADE_RETCODE_MARKET_CLOSED
Market is closed. The order was sent outside the symbol's trading sessions: the weekend, a holiday or the broker's daily break. The fix for 10018 · Forex and gold trading hours
10019 TRADE_RETCODE_NO_MONEY
There is not enough money to complete the request. Free margin does not cover the margin this size needs at your leverage. The fix for 10019 · Forex margin calculator

Look up any other return code, in MQL5's words.

Read the full guide

Try the complete workflow with a synthetic sample

The built-in sample is fabricated teaching data. It includes losing postings, recorded fees and cash movements so you can check the distinctions before opening your own report.

  1. Select Load synthetic sample. Confirm the sample label and accepted-row count; the example has 15 accepted rows.
  2. Keep the starting balance at 10,000 for this example, then select Analyze accepted rows. Net performance is 198 after recorded costs. Cash net is 300, so the reconstructed ending balance is 10,498. These amounts have no live-account provenance.
  3. Inspect the performance drawdown and the separate account-balance drawdown metric. Deposits and withdrawals belong to the cash calculation. Neither measure includes floating equity.
  4. Set seed 7, 1,000 paths, 100 postings per path and block length 1; select Run seeded bootstrap. Repeat with unchanged settings to reproduce the result. Change the block length to inspect sensitivity to short sequences.
  5. Export CSV for accepted rows or JSON for the complete analysis, then choose Clear local data. For your own export, select a supported HTML report or open your transaction CSV in the column mapper. Confirm the columns, decimal format, row type and whether P/L already includes costs, then check every diagnostic.

A resampling frequency describes synthetic paths drawn from this sample. It does not estimate future profits or prove that an account passed trading rules.

Mobile MT5 report analyzer showing the local-processing notice and sample and import controls
Actual mobile browser preview, 8 September 2026. No customer report is shown.

Check an HTML import against the same rows in CSV

Use this seven-row example to check that entry commissions, a separate fee and cash movements survive a format conversion. Both files are fabricated teaching data, not a broker-generated statement or proof of account performance. This is a different dataset from the 15-row default sample above.

  1. Choose the HTML file in the analyzer. Check that all seven rows are accepted and the synthetic label appears.
  2. Enter 10,000 as the balance before the first row, then select Analyze accepted rows. The first row deposits another 500; it is not the opening balance.
  3. Import the matching CSV and enter 10,000 again. Compare both results with the arithmetic below. Each should show four execution deals, one separate fee posting and two cash movements.
Expected totals for either seven-row file, in the same hypothetical account currency. Swap is zero.
CheckCalculationExpected
Trading P/L before costs120 − 9030.00
Commission on four execution deals−2 − 2 − 2 − 2−8.00
Separate fee posting−5−5.00
Net performance30 − 8 − 517.00
Net cash movement500 − 200300.00
Reconstructed ending balance10,000 + 17 + 30010,317.00

For your own report, compare the opening balance, period, accepted rows, costs and cash movements before trusting the ending total. A matching final balance alone can hide offsetting mistakes. Keep the original broker clock and check the meaning of each adjustment; these examples do not test another journal’s importer or convert time zones.

Need the original file? Follow the MT5 history export guide. This check covers realized monetary postings, not floating equity or the authenticity of a statement.

From statement file to a checked export

Import an English MT5 HTML table or a transaction CSV. Other CSV headings open a column mapper: choose the separator, decimal format, row type and whether the result already includes costs. Review the accepted rows, enter the opening balance and compare a statement closing balance. Download the normalized postings and row issues, or keep the full audit as JSON. Matching totals are a useful cross-check; review the period and any excluded rows as well.

A complete closed-position table can also produce a CSV draft in the free journal template’s column order. Initial risk, stop, target and R remain blank for your own records. Execution deals, unallocated fee rows or incomplete position details need further review before they can become journal trades. The free workflow processes one file in memory; ongoing journal storage and account sync are separate TradeLens features.

What an MT5 report can tell you

A report is a record of selected account activity. This analyzer adds accepted monetary postings, separates external cash movements and computes a realized balance path. It cannot prove the file came from a broker, identify whether an account was live or demo, or reproduce missing executions. Its default sample is fabricated teaching data. Use your own complete export to investigate a specific trading period, and reconcile the starting balance and final totals with the original statement before making any decision.

Deals, positions and cash are different records

One position can involve multiple execution deals. Entries, partial exits and reversals do not correspond one-to-one with complete trades, and commissions can be recorded before an exit. If an HTML report contains both Deals and Positions, this tool uses Deals alone to avoid counting the same activity twice. It reports the unit being counted and includes recorded costs instead of presenting an execution count as a trade win rate. A report containing only closed Positions cannot reveal entry-time costs or cash operations omitted from that table.

Deposits and withdrawals change account balance without being trading profit. The performance path excludes classified cash rows, while the account path includes them. Broker-specific adjustments need inspection: a row labelled balance might be a funding movement or a manually posted cost. Classify ambiguous rows explicitly in the CSV mapper. Blank required amounts are errors rather than assumed zeros; an absent cost column needs your explicit zero-cost confirmation. Unsupported or duplicate rows are reported for review.

Realized drawdown does not measure floating risk

Drawdown is the fall from the running peak to a later balance. The performance drawdown shown here uses the chosen opening balance plus recorded non-cash outcomes. Its denominator is each running peak, so changing the opening balance changes the percentage. Floating P/L between postings is absent. A strategy could suffer a much larger intratrade equity loss, or violate a daily loss rule, even if its closed balance path looks modest. Do not use this figure as certification that an account passed a broker or prop-firm rule.

A seeded bootstrap asks a limited question

The simulation asks what arithmetic paths arise if the observed monetary postings are drawn again under a selected sampling rule. Each path starts with the same stated balance; recorded amounts are added without scaling position size. A fixed seed makes the draws repeatable. Individual draws assume independent postings. Blocks retain short sequences, but new block boundaries break longer dependencies and edge observations receive less weight. Loss magnitudes or market regimes absent from the observed sample are not generated by this method.

The displayed percentiles summarize simulated paths, not confidence bounds for your future account. A profitable sample can remain favorable under resampling while being unrepresentative of future markets. Missing fees, different lot sizing, changing volatility and margin rules are outside the calculation. Compare several block lengths as a sensitivity check and review the original sequence alongside the simulation. The tool does not label its below-start frequency as a probability of future profit or ruin.

Local processing and export

The analyzer reads your selected file into browser memory and does not send it to an analysis server or persist it in local storage. Clear local data removes it from the tool state. CSV exports contain accepted normalized postings; JSON exports include diagnostics, methods and any current simulation. Files you download remain on your device until you remove them. Share an export only after checking it for private account identifiers or symbols you do not want to disclose.

Format references: MetaTrader 5 table-based trading report and MQL5 deal properties. Platform documentation explains the source record types; the supported parser subset and sampling assumptions are defined above.

Why “Every tick based on real ticks” can disagree with your other tests

If an Expert Advisor's Strategy Tester report looks smooth under 1 minute OHLC or Every tick but loses money or skips trades under Every tick based on real ticks, check two things:

  • Real spreads instead of a bar's spread: in Every tick mode MT5 builds each tick's ask from the minute bar's fixed spread. Real ticks (stored by month in bases\[server] icks\[symbol]\ as .tkc files) carry the spread as it was, including the widening around the daily rollover and news, which can hit stops or bring 10016 rejections the other modes never show.
  • Months without real ticks: where a minute bar has no real ticks, the tester generates that minute's ticks the way Every tick does, and the Journal says so (for example “real ticks absent for N minutes… every tick generation used”). Read the Journal before trusting a long real-tick test.

To see how filling modes, spread filters and session guards are written in a full gold EA, MTR FullSystemEA ships its whole source: 21 MQL5 files, 16,923 lines, nothing obfuscated.

MT5 file extensions (.html, .csv, .mq5, .ex5, .set)

MetaTrader 5 uses different file types for account reports, source code, compiled programs and input presets. Only the statement exports (.html and .csv) can be read by this analyzer:

  • .html / .htm and .csv (account and Strategy Tester reports): trade history and deal exports, read here in your browser, or imported into the TradeLens journal to keep every account's history in one place.
  • .mq5 (MQL5 source): editable source code, opened in MetaEditor (F4 in MT5).
  • .ex5 (compiled MQL5 program): the file MetaEditor builds from an .mq5; it goes in MQL5/Experts or MQL5/Indicators to run on a chart.
  • .set (input preset): a plain-text list of an EA's input values (lot sizing, stop distance, session hours), loaded with Inputs → Load in the Strategy Tester or the EA's settings.
Method and privacy

Method: Historical deal or position postings, not live equity: missing rows and open positions can change results. Bootstrap frequencies describe only the imported sample and assumptions.

Calculations run entirely in your browser — nothing you type is uploaded. Your last numbers stay in this browser so you can pick up where you left off; Forget them clears them. A link with your numbers carries them after the # sign, which browsers do not send to servers, and the page takes them out of the address before any analytics loads. Copy and download actions save your calculation locally. The site may record coarse tool actions under its privacy policy, without inputs, results, file contents or filenames.

Common questions

How do I analyze an MT5 report?

Export a detailed HTML report from MT5, then choose the file here. English Deals tables are preferred; supported Positions tables and the documented CSV schema can also be read. Check the diagnostics and supply the balance immediately before the imported window.

Is my trading report uploaded?

Report parsing, calculations and downloads happen locally in your browser. This tool does not send file contents, account values or filenames to a server. The site may record coarse tool actions under its privacy policy, without report values.

Does this calculate equity drawdown or a trade win rate?

It calculates realized balance drawdown from imported postings and your starting balance, separating cash movements. Deals can be partial fills or opening costs, so deal statistics are not a completed-trade win rate. Open-position floating equity is unavailable in these rows.

What does the bootstrap estimate mean?

It resamples the imported historical postings using the displayed settings and seed. Its frequencies depend on that sample, ordering assumptions and starting balance. They do not include unseen market regimes or predict future profitability.

What if the report format is unsupported?

Read the parsing diagnostics. An unknown header, missing required value or ambiguous number must be resolved before relying on a result. Use the included synthetic sample and explicit CSV template to understand the supported schema.

Does it work on a Mac?

Yes. It's a web page, not a Windows program, so it runs in a current browser on a Mac and reads the file there. MetaQuotes' MT5 for Mac runs the Windows terminal in Wine, so its History tab should save the same HTML statement; we haven't tested that export on a Mac.

Can I keep my reports in a journal?

Not on this page: it reads one file at a time and keeps nothing once you clear it or close the tab. TradeLens, ProEA's paid trading journal, imports MT4, MT5 and CSV history, keeps it, and shows where your trading leaks money.

See TradeLens, the MT5 trading journal

What is the difference between an MT5 .html report, .set file, .mq5 and .ex5?

An .html or .csv file is a trade-history or Strategy Tester statement that this analyzer can parse. A .set file is a plain-text preset of EA input parameters, an .mq5 file is editable MQL5 source code for MetaEditor, and an .ex5 file is a compiled binary executable for MetaTrader 5.

Read a full gold EA's source: MTR FullSystemEA, 21 MQL5 files

What do MT5 return codes 10027, 10026, 10030, 10014 and 10016 mean in the Journal?

Retcode 10027 (TRADE_RETCODE_CLIENT_DISABLES_AT) means the terminal's Algo Trading button is off; 10026 (TRADE_RETCODE_SERVER_DISABLES_AT) means the broker's server disabled automated trading on the account; 10030 (TRADE_RETCODE_INVALID_FILL) means the order's filling mode (FOK/IOC/RETURN) does not match SYMBOL_FILLING_MODE; 10014 (INVALID_VOLUME) means the lot size violates min/max/step; and 10016 (INVALID_STOPS) means a stop is on the wrong side or closer to the price than the symbol's stops level (SYMBOL_TRADE_STOPS_LEVEL).

Why does MT5 Strategy Tester differ between Every tick based on real ticks and Every tick?

Every tick based on real ticks replays recorded bid/ask ticks (.tkc files), including the spread widening around the daily rollover and news, which can hit stops or bring 10016 rejections. Every tick builds each tick's ask from the minute bar's fixed spread. Where a minute has no real ticks, the tester generates them the Every tick way and says so in the Journal.

Keep every report in one journal

  • TradeLens journal Imports your MT4, MT5 or CSV history and prices your biggest leaks in dollars: revenge trades, trades without a stop, oversized trades.

Goes deeper

Limits and trading risk

These tools calculate from your inputs, supported historical records or explicitly labelled teaching examples. They do not verify a live account, predict future returns or confirm that a broker or prop-firm rule has been met. Missing costs, floating losses and changed market conditions can materially change outcomes. Trading can lose the capital committed to it; check the stated method and your account specifications.

Read the risk disclosure