Tick data is the record of every individual price change on a symbol — each one timestamped, with its own bid and ask — and it is what MT5 replays in its 'Every tick based on real ticks' model instead of inventing a path between bars.
also: tick history, real tick data
Updated · Reviewed
In plain English
Bar data keeps four prices per candle: open, high, low and close. Tick data keeps everything between them — every price change, in order, carrying the spread that stood at that moment. The gap between the two only decides anything when a trade opens and closes inside a bar, which is exactly where most EA marketing lives.
Why it matters
A backtest can only trade the prices you hand it. Bar data hands the tester four per candle and lets it invent the route between them, so any strategy that enters and exits inside the bar answers for a path nobody recorded. Tick data swaps the invention for the record. Our own runs then add an uncomfortable second finding: where you take the ticks from moves the result far more than switching from invented ticks to recorded ones.
✓It settles the order of events inside the bar. If the real route touched the stop before the target, an invented route that touched them the other way round flips the sign of the trade.
✓It carries the spread that actually stood at each moment. On one USD/JPY real-tick run here the tick file held 227 distinct spread values between 10 and 350 points, and no single fixed number stands in for that range.
✓It demands real inventory in the terminal. All eleven real-tick runs published here needed a custom symbol built from an imported archive; not one broker-native symbol in the catalogue ever reached the real-tick model.
✓It is not the largest lever. Swapping the data source under a fixed model took one of our runs from a 1.35 profit factor to 1.13; upgrading that same source from generated to real ticks then moved it a further 0.02.
Using it to validate a strategy
Where it is used
Strategy Tester → Settings → Modelling, where 'Every tick based on real ticks' (Model 4) replays the recorded path and plain 'Every tick' (Model 0) generates one out of M1 bars.
View → Symbols (Ctrl+U) → the Ticks tab, where you request a symbol's tick history for a date range before the tester can touch it.
Building a custom symbol from an imported tick archive, which is how every real-tick run in this catalogue got its data.
Re-running a finished strategy on a second tick source, to find out whether the result belongs to the rules or to the data.
What a reliable result looks like
✓The listing names the tick source and the tester model in the same breath, so a reader can rebuild the run rather than trust it.
✓The tick history genuinely spans the window. Every run published here opens on 2019-01-01 except one, on sources that reach back that far.
✓Bid and ask both survive the import, so the tester fills at the recorded spread instead of a substituted constant.
✓A second source reproduces the result — and when it does not, the listing says which one failed.
Warning signs
!'Real tick data' with no vendor named. The vendor turns out to be the half of the claim that decides the outcome.
!A history-quality percentage waved about as proof of real ticks. One Model 0 run in this catalogue printed 100%.
!A test window that opens before the source's ticks do, which quietly hands the early years back to interpolation.
!A fixed spread configured on top of tick data. On Model 4 the tester ignores the field anyway, so the setting misleads the author more than the reader.
Backtest vs live trading
Tick data pins the price path and leaves execution alone. Latency, requotes, partial fills and the broker's own policy all still sit outside the tester.
The recorded spread belongs to whoever recorded it. Another broker quoting the same moment can differ materially, above all outside the main sessions.
Slippage never enters the file. The tester fills at the recorded price; a live order arrives fractionally later and takes whatever sits there.
Expect what remains of the gap to concern execution rather than prices — a narrower and far more predictable gap than bar data leaves behind.
Recommended validation method
1Request the symbol's tick history for the whole window first, then read the Ticks tab to confirm the range it returned actually covers it.
2Write down the Model number next to the source name. 'Every tick' and 'Every tick based on real ticks' sit one line apart in the same dropdown and describe two different experiments.
3Leave the tester's spread field alone on Model 4 and add commission by hand instead. Running Spread=10 against Spread=100 here produced identical tick-by-tick spreads.
4Re-run on a second source before believing the number. Disagreement between sources is the result, not a nuisance.
Example
One EA, one window, three runs. TidewellSlack trades GBP/JPY on M15 from 2019-01-01, and we ran it three ways to prise apart the two things listings routinely fold together: where the ticks come from, and whether the tester replays them or invents them.
Broker M1 history, Model 0 (the published run)
PF 1.35, max drawdown 9.92%
303 trades, history quality 99%, and it clears our gate.
Imported ticks, still Model 0
PF 1.13, max drawdown 18.18%
351 trades. Only the source changed.
Imported ticks, Model 4 real ticks
PF 1.11, max drawdown 18.20%
345 trades. Only the model changed.
Two of the three runs fail our own gate, and the survivor is the one on generated ticks. That is why the listing publishes its symbol and its model number rather than the adjective 'real'.
CalculationSource swap: −0.22 of profit factor and +8.26 points of drawdown. The real-tick upgrade on top of it: −0.02 and +0.02.
ResultThe data source moved the result eleven times as far as the tick model did
How to interpret it
Read tick data against holding time first and against the source second. The finer your target relative to the bar, the more of the outcome the path decided — but the source decides how much of that outcome travels anywhere else.
Range
What it means
Intraday or scalping EA, real ticks, vendor named
The defensible case. The path is recorded and a stranger can rebuild the run from the listing alone.
Multi-day swing system on bar-generated ticks
Usually adequate. One bar's internal route rarely decides a trade held for a week.
Real ticks, but from a single source
Half an answer. Our GBP/JPY run passed on one source and failed on another with identical rules and an identical window.
'Real ticks' with no vendor and no model number
Unverifiable, and the two missing fields are precisely the two that decide the figure.
Confirm the range the Ticks tab returned before choosing a model. A window opening before the source's ticks do reverts to interpolation for the early years and still reports one figure for the whole run.
Keep bid and ask. On Model 4 the tester takes the spread from the tick file and ignores the number you typed — 227 distinct values between 10 and 350 points on one USD/JPY run, none of them the configured one.
Count how rarely anyone measures the spread at all. Exactly one of the 23 runs published here carries a measured average, 19.14 points recorded in-tester, and that run uses Model 0.
Treat a second source as the experiment rather than the chore. Agreement promotes a tick-data backtest to evidence; disagreement teaches you more.
Eleven of the 23 runs published here use Model 4 and twelve use Model 0, and every Model 4 run carries a _DUKA suffix on its symbol name because imported ticks can only live on a custom symbol. Ten of those eleven manifests still name the broker's M1 history in their price-source field, a leftover from the lineage they migrated out of. Read the model number and the symbol; the prose around them ages faster.
Common mistakes
✕Buying the tick model and ignoring the tick source
The model is one dropdown line and the source is a whole different market's record. On the GBP/JPY run above, changing the source cost 0.22 of profit factor and doubled the drawdown, while the real-tick upgrade on the same source cost 0.02. A listing that names its model but not its vendor has told you the smaller half.
✕Reading a history-quality figure as proof of real ticks
The percentage measures how completely the history covered the window, not which model produced it. The Model 0 shadow run behind KestrelHover printed 100% — the same figure its real-tick sibling printed. A number that both models can reach cannot distinguish between them.
✕Setting a fixed spread on top of tick data
On Model 4 the tester fills from the tick file's own ask minus bid and disregards the field entirely; running one USD/JPY test at Spread=10 and again at Spread=100 returned identical tick-by-tick spreads. The setting changes nothing in the run and quietly changes what the author believes the run measured.
✕Testing a window the ticks do not cover
A test from 2015 on a source whose ticks open in 2019 interpolates the early years, replays the later ones, and reports the two as a single result. The Ticks tab states the range it holds; the tester never warns you that your window overshot it.
✕Expecting real ticks to close the gap to live trading
They close the price half and leave the execution half untouched. Latency, requotes, partial fills and the broker's policy stay outside the simulation, so a real-tick run remains an optimistic account of what the fills would have been — just an optimistic account built on a path that genuinely happened.
In depth
Three runs, one variable at a time
TidewellSlack — GBP/JPY, M15, from 2019-01-01
Trades
Profit factor
Max drawdown
History quality
Our gate
Broker M1 history, Model 0 (published)
303
1.35
9.92%
99%
PASS
Imported ticks, Model 0
351
1.13
18.18%
99%
FAIL
Imported ticks, Model 4 real ticks
345
1.11
18.20%
100%
FAIL
Row one to row two changes the data and nothing else: same rules, same window, same
tester model. The profit factor drops 0.22 and the drawdown roughly doubles. Row two
to row three changes the model and nothing else, upgrading generated ticks to the
recorded ones from the same archive, and the profit factor drops 0.02 while the
drawdown moves two hundredths of a point. Both imported-tick rows fail our gate;
the survivor is the run on generated ticks.
That ordering is not universal, which is the honest part. KestrelHover
went the other way: 291 trades and a 1.33 profit factor on real ticks, against 292
trades and 1.30 on the broker’s generated ticks, and both runs cleared. Sometimes the
source is the whole story and sometimes it is noise — and you only find out by
running it twice. Read TidewellSlack’s listing next to that
one and the point makes itself.
Real ticks cost you a custom symbol
Eleven of the 23 runs published here use Model 4 and twelve use Model 0. Every
single Model 4 run trades a symbol whose name ends in _DUKA, because imported ticks
cannot live on the broker’s own symbol — you create a custom symbol in the Symbols
window and import the archive into it. Not one broker-native symbol in this catalogue
ever reached the real-tick model, which is the practical reason so many published
backtests do not use it: the mode is free, the inventory behind it is not.
That also breaks the usual shortcut of trusting a percentage. The Model 0 shadow run
behind KestrelHover printed 100% history quality, the same figure its real-tick
sibling printed, so the number cannot tell the two apart. Modelling
quality answers a different question — how completely
the history covered the window — and answers it for both models.
The spread is the half nobody checks
Tick data’s second gift is the recorded bid and ask, and it is the one most often
thrown away. On Model 4 the tester fills from each tick’s own ask minus bid and
ignores the spread you configured: running one USD/JPY test at Spread=10 and again at
Spread=100 produced identical tick-by-tick spreads, 227 distinct values ranging from
10 to 350 points. The field looks like a control and behaves like a comment.
Almost nobody measures the resulting cost either. Exactly one of the 23 runs here
states a measured spread average — 19.14 points, recorded inside the tester — and that
run uses Model 0, not real ticks. So the honest reading of most real-tick claims,
including several of our own, is that the path was recorded and the cost of walking it
was never totalled.
Frequently asked questions
Do I need real tick data to backtest an EA?
It depends on how long the strategy holds. Anything that opens and closes inside a day should use real ticks, because the intra-bar path decides too many of its trades to assume. A swing system holding for days barely notices. Either way, name the source: on our GBP/JPY test the source change moved the profit factor 0.22 and the real-tick upgrade moved it 0.02.
Where does MT5 tick data come from?
Two places. MetaTrader brokers store tick history on their servers and the terminal downloads it from View → Symbols (Ctrl+U) → Ticks for a symbol and a date range. Independent vendors publish tick archives, which you import onto a custom symbol. Every real-tick run in this catalogue took the second route, which is why each one carries a _DUKA suffix on its symbol name.
Why do two tick sources give different backtest results?
Because each source is one venue's record, and the prices — especially the spreads — differ between venues. The same GBP/JPY EA over the same window scored a 1.35 profit factor on the broker's own history and 1.13 on an imported archive, with the maximum drawdown rising from 9.92% to 18.18%. Comparing two sources is the cheapest robustness test available.
Does real tick data make a backtest accurate?
It makes the price series faithful, which is not the same thing. Execution stays outside the tester, and the source you chose still dominates. Our two EAs run both ways landed in opposite places: one barely moved at all — 291 trades and a 1.33 profit factor on real ticks against 292 trades and 1.30 on generated ones — while the other failed its gate the moment the source changed.
How can I tell what tick data a published backtest used?
Three fields, in order: the model name the tester printed, the symbol the run traded, and the vendor behind that symbol. A custom symbol name is usually the giveaway that ticks were imported. If a listing shows a percentage and an adjective but none of those three, treat the claim as unverified rather than as false.