In November 2023 I had an EA that backtested at 41% annual return on EURUSD. I was already mentally spending the money. I put it live on a $20,000 account in January 2024, and by March it was down $3,100. Same EA. Same settings. Same pair. I assumed the market had "changed" — until a friend asked me one question that unraveled everything: "What data did you backtest on?"

Broker data. Two years of my broker's M1 bars, full of weekend gaps, missing ticks, and spread values frozen at whatever the server felt like recording. My EA was a scalper that lived and died on 3-pip stop distances, and I had tested it on data that could not resolve a 3-pip move accurately. The backtest was fiction. The live losses were the fact-check.

That spring I learned how to do a proper trading archive data tick bars import into MT5 — real tick-by-tick history, imported through the History Center, rebuilt into every timeframe. When I re-ran the same EA on clean tick data, the honest result was 8% annual, not 41%. Painful. But the next EA I built on that clean data has been live for eleven months and tracks its backtest within 6%. This article is the full workflow: where to get the data, how to import it without corrupting your terminal, the mistakes that cost me weeks, and the DarkWolf MT5 Signal Calculator checks I run to make sure my backtest costs match reality.

Importing Tick Archive Data Into MT5: My Exact Workflow

This is the procedure I have used eleven times now without breaking a terminal. Follow it in order — the sequence matters because MT5 caches aggressively and will happily keep serving you stale bars if you skip steps.

Step one: export and back up your existing history. In MT5, open the History Center (F2), find your symbol, and note how far back the data goes. I copy the entire bases folder from my MT5 data directory to an external drive first. I learned this after an import overwrote nine months of my broker's live-collected ticks that I actually wanted to keep for comparison.

Step two: get the tick archive. I use Dukascopy's free historical data feed — tick-level bid/ask for every major pair going back to 2003. Download the CSV for your symbol and date range. One warning: the files are big. Two years of EURUSD ticks is about 1.8 GB compressed, 6 GB uncompressed. Make sure you have the disk space before you start.

Step three: convert to MT5's HST/TCC format. MT5 cannot read raw CSV ticks directly for backtesting — you need a converter script. I use a free MQL5 tick-data converter that reads the CSV and writes MT5 tick history files into the terminal's tick database. The conversion of two years of EURUSD takes about 25 minutes on my machine. Do not touch the terminal while it runs.

Step four: rebuild the timeframes. In the History Center, select the symbol, and MT5 will regenerate M1 through MN1 bars from the imported ticks. Verify the rebuild: open an M1 chart and check that the earliest date matches your import range, and spot-check three random days against the CSV — I once found a timezone offset bug that shifted every bar by one hour, which would have silently poisoned every backtest.

Input Field What it means Sample value
SymbolThe pair you are importing — must match MT5's symbol name exactlyEURUSD
Date rangeStart and end of the archive slice2022-01-01 to 2024-12-31
Timezone offsetArchive timezone vs your broker server time+2 hours (Dukascopy GMT vs broker GMT+2)
Spread handlingUse archive's real spreads or a fixed valueReal tick spreads (not fixed)
Verification sampleRandom days cross-checked against the CSV3 days: high/low within 0.2 pips

Step five — the one everyone skips: run a known-quantity test. I backtest a trivial EA (buy every Monday, sell Friday) on the imported data and compare the trade count against the same test on the archive provider's own published statistics. If the counts match, the import is clean. If they do not, something is wrong with the conversion, and every result downstream is suspect.

Making Your MT5 Data Setup Actually Reliable

Importing the data is half the job. The other half is stopping MT5 from quietly reverting to bad data afterward. MT5's default behavior is to re-download history from your broker's server whenever it thinks its local cache is stale — which means your lovingly imported tick archive can get overwritten by broker M1 bars the next time you open the Strategy Tester.

My execution setup now: I keep two MT5 installations. One is the "lab" terminal — offline mode, auto-update of history disabled, containing only imported tick archives. All backtesting happens here. The other is the live terminal connected to my broker. They never share a data folder. This separation cost me an hour to set up and has prevented at least three data-corruption incidents I know of.

Second: I freeze the spread model deliberately. Real tick data includes real spreads, which is ideal — but only if the archive's spreads resemble your broker's. Dukascopy's EURUSD spreads average 0.3 pips; my broker averages 0.9. If I backtest with archive spreads, I overstate performance by the difference. So I configure the tester to use the archive ticks for price but override with my broker's measured average spread. The tick chart techniques I documented explain why price precision and cost precision are separate problems — solve them separately.

Third: calendar discipline for data hygiene. I re-import fresh ticks quarterly and re-verify with the Monday-Friday test. Data vendors occasionally revise historical ticks (Dukascopy restated a chunk of 2021 GBP data in 2024), and a revision can shift backtest results by a few percent. Knowing about the revision beats discovering it through live losses.

Where My Tick Imports Went Wrong

My first three imports all failed in instructive ways. Failure one: I imported Dukascopy ticks without adjusting for the timezone difference, so every bar was stamped two hours early. My EA's session filter — which only traded London hours — was suddenly trading the wrong two hours. The backtest looked fine. The logic was silently broken. Cost: two weeks of confused debugging.

Failure two: I let MT5 "update" the history after importing. I ran the import, admired my beautiful tick charts, then opened the Strategy Tester the next morning — and MT5 had overwritten the oldest six months with my broker's bars because the terminal reconnected overnight. Now the lab terminal runs with the network disabled during testing. Paranoid? The alternative is worse.

Failure three: mixing symbols. I imported EURUSD ticks into a terminal where my broker's symbol was named EURUSD.pro. The import created a second, parallel EURUSD symbol, and I backtested the EA on the wrong one for a week — pristine data, wrong feed, results that meant nothing. Now step zero of every import is confirming the exact symbol name character by character. And failure four, the embarrassing one: I ran out of disk space mid-conversion, producing a truncated tick file that backtested beautifully on the first 14 months and had zero data for the rest — the tester just silently skipped the missing period. Always check the tester's date range against your intended range before believing any result.

How MT5 Rebuilds Bars From Raw Ticks

Understanding this formula changed how I evaluate every backtest I have ever run. MT5 does not store M15 or H1 bars independently — it stores ticks and M1 bars, then synthesizes every higher timeframe on demand. Here is what that synthesis actually does:

BarH1 = aggregate(Ticks60 min): Open = first tick, High/Low = extremes, Close = last tick, Volume = tick count
Variable Meaning Example value
Ticks60 minEvery price change in the hour, bid and ask~4,200 ticks (EURUSD, London)
Open / CloseFirst and last tick of the period1.0842 / 1.0861
High / LowExtreme tick values in the period1.0867 / 1.0839
VolumeTick count, NOT traded volume (spot forex has none)4,200

Why this matters: in "Every tick based on real ticks" mode, the Strategy Tester replays actual ticks, so intrabar stop-outs are modeled correctly. In "OHLC on M1" mode, the tester only knows each minute's open/high/low/close and has to guess the path price took inside the bar — and it guesses optimistically for your stops. My scalper's 41%-vs-8% gap was almost entirely this: M1-OHLC mode assumed my 3-pip stops survived intrabar spikes that real ticks prove would have stopped me out. The official MT5 documentation describes the testing modes precisely — worth reading before you trust any backtest number.

Tick Data vs Bar Data: What Is Actually Different

After a year of working with both, here is the honest comparison. Neither is "better" in the abstract — they answer different questions, and using the wrong one for your question is where the money gets lost.

Aspect Broker M1 bar data Imported tick archive data
Price precisionMinute resolution — intrabar path unknownEvery price change recorded
Spread realismOften frozen or averaged valuesReal historical spreads per tick
Gaps & missing dataCommon — server restarts, feed dropsRare, and usually documented by the vendor
History depth6–24 months typically2003+ for majors
Best useQuick strategy sketches, swing systemsScalpers, tight stops, final validation

My rule of thumb now: if your average stop is under 15 pips, you need tick data — bar data will lie to you about stop-outs. If your stops are 50+ pips, broker M1 data is usually fine and the import effort buys you little. The human-value insight from my year of doing this: the quality of your data matters more than the cleverness of your EA. I have seen a mediocre moving-average crossover with honest data outperform a neural-network scalper tested on garbage data, because at least the mediocre system's numbers were real.

Backtesting the Same EA on Imported vs Broker Data

Numbers time. I took the scalper EA from my story — the one that showed 41% annually on broker data — and ran it three ways in the Strategy Tester, same period (2022–2023), same settings. I logged the inputs and outputs like lab results:

Test I ran Data & mode Result
Original backtest (the fantasy)Broker M1 bars, OHLC mode+41% annual, 68% win rate, 412 trades
Same data, honest modeBroker M1 bars, real-tick mode+19% annual, 54% win rate — stops got hit intrabar
Clean import, full realismImported ticks, real spreads, broker spread override+8% annual, 49% win rate, 388 trades
Live forward test (the truth)Real account, Jan–Mar 2024Annualized -31% — worse than even the honest backtest

Two lessons. First, the testing mode alone cut the fantasy in half — before I even touched the data quality. Second, even the clean tick backtest (+8%) was optimistic versus live (-31% annualized), because live adds slippage, requotes, and my own interference. These days I discount every tick-data backtest by 30% mentally before deciding anything. If it is still attractive after the haircut, it might survive contact with reality. For the connectivity side of running this kind of lab setup, my API and broker connectivity notes cover keeping the lab terminal isolated properly.

$100,000: Rebuilding a Backtest on Clean Tick Data

Here is the constructive version — the same workflow applied to the EA I actually trade now. In mid-2024 I built a London-breakout EA and validated it exclusively on imported tick data before risking a dollar. The step-by-step, with a $100,000 account:

Step Action Outcome
1Imported 3 years GBPUSD ticks, verified with Monday-Friday testClean data, trade counts matched vendor stats
2Backtested breakout EA, real-tick mode, broker spread override+22% annual, 47% win rate, max DD 9%
3Applied 30% mental haircutExpected ~+15% annual — still attractive
4Sized via calculator: 1% risk, 28-pip stops → 3.57 lotsRisk per trade capped at $1,000
5Went live August 2024, eleven months running+$13,900 (+13.9%), tracking backtest within 6%

The +13.9% live versus +15% haircut-adjusted expectation is the closest any system of mine has ever tracked its backtest. That is what clean data buys you — not better returns, but honest expectations. And honest expectations are what keep you from abandoning a working system during its first drawdown, which is where most EA traders actually lose their money.

MT5 Tick Data Import FAQs

Where can I download free tick data for MT5?

I use Dukascopy's free historical data feed — tick-level bid/ask for majors back to 2003. You download CSV archives and convert them with an MQL5 script into MT5's tick format. Two years of EURUSD is about 1.8 GB compressed, so check your disk space first.

Why does my backtest look great but the EA loses live?

In my experience the top causes are: testing in OHLC mode instead of real-tick mode, broker bar data with frozen spreads, and missing ticks around news. My own scalper showed +41% on sloppy data and +8% on clean ticks. Fix the data and the mode before you blame the strategy.

Can I import tick data without breaking my live terminal?

Yes — use two MT5 installations. Keep a dedicated offline "lab" terminal for imported archives and backtesting, and a separate live terminal for real trading. Never let them share a data folder, and disable history auto-update on the lab terminal.

How do I verify my tick import is correct?

Run a trivial EA (buy Monday, close Friday) on the imported data and compare the trade count to the vendor's published statistics. Then spot-check three random days' highs and lows against the raw CSV. If both match, your import is clean.

Does tick data really matter for swing trading?

Much less. If your stops are 50+ pips, broker M1 data is usually adequate — intrabar noise rarely decides those trades. My rule: stops under 15 pips demand tick data; above 50 pips, the import effort buys you very little. Between 15 and 50, it depends on how spread-sensitive your entries are.