Your MT5 trade history contains everything you need to audit your broker's execution quality. Here is how to extract it, analyse it, and what the numbers actually mean.
For every executed trade, MT5 stores:
The granularity is millisecond on timestamps and full price precision on prices. This is enough for solid execution analysis.
In MT5 toolbox (Ctrl+T), the History tab shows all closed deals. By default it shows the last week. Right-click to select a custom range (last month, last quarter, custom dates, all history).
Double-click any trade in History. You see full details including timestamps and slippage.
Right-click in the History tab, choose Report > Save as CSV or HTML. CSV is preferable for analysis (open in Excel, Python, R, whatever you use).
The CSV columns map directly to the on-screen fields. Some brokers strip the order-placed timestamp from the export, leaving only the executed timestamp. If your CSV is missing that column, check Tools > Options > Trade > Show order timestamps.
The most useful single analysis. Take all market orders (skip pending orders), calculate the slippage for each:
slippage_pips = (fill_price - requested_price) / point_size * direction_multiplier
where direction_multiplier is +1 for buy orders and -1 for sell orders (so that "negative slippage" always means "worse fill").
Plot the distribution. A healthy execution profile looks like this:
Concerning patterns:
The time between order placed and order executed:
fill_latency_ms = executed_timestamp - placed_timestamp
Typical ranges:
If latency varies wildly across trades, the issue is your network (likely wifi or ISP congestion).
If latency is consistently high but stable, the issue is geographic distance to broker. Consider a VPS closer to their server.
Many brokers leave informative strings in the Comment field. Look at 50 of your recent trades and tabulate the patterns:
| Comment pattern | What it likely means |
|---|---|
| LP name (LMAX, CITI, UBS, etc.) | A-book, this specific LP filled the trade |
| Empty / blank | Inconclusive, often B-book |
| "order #123456" | Generic, inconclusive |
| "sl" or "tp" | This trade closed at SL or TP, not a market order |
| "so" or "stop out" | Forced close due to margin call |
| "split" | Order was filled across multiple LPs/prices |
If most of your comments are LP names, that is a strong A-book signal. If they are mostly blank, the broker is not voluntarily disclosing LP information, which suggests B-book or hybrid.
MT5 logs failed order attempts in the Journal tab (Toolbox, Journal tab). Filter for "Order error" or "Requote" entries.
For a sample of 100 attempted orders:
Requote rate is similar. Modern Market Execution accounts essentially never requote. If you are seeing requotes, you are on Instant Execution, which is much more common on B-book setups.
Plot the spread on a high-frequency symbol (EUR/USD or USD/JPY) over 24 hours. Most easily done by saving spread snapshots via an EA or using MT5's Spread chart indicator.
Look for:
If spread is suspiciously stable across all hours, your broker is setting prices manually rather than relaying LP quotes. B-book indicator.
If you trade different lot sizes, weight your statistics by volume. A broker might give you good fills on 0.01 lots and terrible fills on 1.0 lots, because the 1.0 lots actually need to go to LPs while 0.01 lots stay internal.
Group your trades by lot size buckets (0.01-0.05, 0.06-0.20, 0.21-1.00, 1.01+) and calculate slippage stats per bucket. Significant degradation as size increases is a sign of execution-quality limits that may matter for your strategy.
For traders comfortable with code, a 30-line Python script using pandas can produce all the above analyses. Rough structure:
import pandas as pd
df = pd.read_csv('trades.csv')
df['slippage'] = (df.fill_price - df.req_price) / df.point * df.direction
df['latency_ms'] = (df.executed - df.placed).dt.total_seconds() * 1000
print('Slippage statistics:')
print(df.slippage.describe())
print('Skewness:', df.slippage.skew())
print('\nLatency statistics:')
print(df.latency_ms.describe())
The point is to make broker quality measurable rather than vibe-based.
If you have accounts at multiple brokers, run identical analyses on each. This is the most informative comparison you can do, because it controls for your trading style.
Useful pattern: run the same EA on demo accounts at three brokers for one month. Compare execution statistics. The broker with best slippage profile, lowest latency, fewest rejections is empirically the best for your style.
100 trades minimum for slippage analysis. 300+ for confident detection of systematic patterns. Below 50, you are looking at noise.
Zero is ideal. -0.1 to +0.1 pips is normal. Beyond -0.5 pips mean slippage on majors, something is wrong.
You can log it yourself via an EA that records the millisecond timestamp on every order send. Alternatively, ask broker support for raw execution logs.
One bad analysis is not enough. Look at multiple weeks and multiple market conditions. If the pattern persists, yes - the broker is costing you measurable money.
We have an introducing broker relationship with VT Markets. Clients who sign up with VT Markets through us get free access to our signal channel. Full disclosure on the affiliate disclosure page.
Sign up & get signals → Disclosure →