High frequency data backtesting: what changes at tick and 1-minute
On 1-minute or tick data the trade count multiplies and the move per trade shrinks, so commission, slippage and timestamp errors decide the result more than the entry rule does. Check bar timestamps first, set slippage per side in ticks and double it in a second run, and expect tick and 1-minute runs of the same rule to disagree.
By Soren Huang · Published · updated · Editorial policy
Contents
- What changes when you backtest on high frequency data?
- How much data does high frequency backtesting need?
- Why does timestamp accuracy matter more on intraday data?
- How should you set slippage in a high frequency backtest?
- How much do tick and 1-minute backtest results differ on ES?
- How does hardware affect high frequency backtesting?
- Frequently asked questions
- References
What changes when you backtest on high frequency data?
High frequency data backtesting changes three things at once: the number of trades multiplies, the price move each trade captures shrinks, and so commission, slippage and timestamp errors become the main drivers of the result. On daily bars the rule decides the outcome. On 1-minute or tick data the cost and data assumptions do.
High frequency data is price data recorded many times per trading day. Tick data is a record of every trade, with its price, size and time. A 1-minute bar is a summary of one minute of trading: the first, highest, lowest and last price, plus the volume. Both are far finer than the daily bar most traders learn on. This article is about testing retail-speed rules on fine data, not about co-located trading firms; the two worlds are set side by side in high-frequency trading vs retail algo trading.
Think of each trade as a trip on a toll road. The toll, which is commission plus slippage, is the same whether the trip is long or short. A daily-bar trade travels far, so the toll is a small part of the trip. A 1-minute trade travels a short distance and pays the same toll, so the toll can take most of the gain. A tick-level trade travels shorter still. Nothing about the rule changed; the ratio of cost to captured move did.
This is why a rule that looks excellent on 1-minute bars without costs often looks ordinary once costs are added, while the same rule barely changes on daily bars. The rest of this article follows one claim: on intraday data, the cost and data assumptions decide the result more than the entry rule does, so they are checked before the rule is judged.
How much data does high frequency backtesting need?
The amount of data you need is set by completed trades, not calendar years, and a 1-minute strategy reaches a few hundred out-of-sample trades in months rather than years. Out-of-sample trades are trades on data the rule never saw while its settings were chosen. Many systematic traders treat a few hundred of them as the minimum before a per-trade figure means anything, and fewer than about 30 as a hint. A rule that trades twice a day on 1-minute bars collects a few hundred trades in well under a year. A daily-bar swing rule that trades once a month needs many years for the same count.
The price of that faster trade count is file size. A near-24-hour futures session holds about fourteen hundred one-minute bars per trading day (23 hours of trading times 60 minutes), against one daily bar. Over roughly 250 trading days that is about three hundred and fifty thousand one-minute bars a year, more than a thousand times the daily file. Tick files are larger again: every trade is a row, so a year of a liquid index future runs to many millions of rows, and the exact count depends on how many trades printed. Loading, storing and checking such a file is work the daily-bar trader never meets.
| Question | Daily bars | 1-minute bars | Tick data |
|---|---|---|---|
| Bars per trading day (near-24-hour session) | 1 | About fourteen hundred | Thousands to tens of thousands, set by volume |
| Bars per year | About 250 | Hundreds of thousands | Millions |
| Time to reach a few hundred out-of-sample trades | Years, often a decade for a monthly rule | Months for a rule that trades daily | Weeks to months |
| Checks that grow in effort | Holidays, rolls | Gaps, session boundaries, bar timestamps | Gaps, bad ticks, session boundaries, print order |
Three data-quality checks grow with the row count. Gaps: a missing hour of 1-minute bars is invisible on a chart zoomed out to years, but a rule reads it as a sudden jump. Bad ticks: a single wrong print far from the market triggers stops on tick data and sets a false high or low on bar data. Session boundaries: the daily maintenance break and the roll from one contract month to the next land inside the intraday sequence. The roll is explained in futures backtesting with contract specs and rollover; on intraday data the roll gap is the same size, but it falls between two bars that are one minute apart, so it looks like a price move and a rule will trade it unless the series is adjusted.
Why does timestamp accuracy matter more on intraday data?
Timestamp accuracy matters more on intraday data because the same error moves a fill by dozens of bars instead of one day, and a bar stamped at its open can let the rule read a price that did not exist yet. A timestamp is the time written on each bar or tick in the data file. On daily bars there is little to get wrong: the date is the date. On 1-minute bars two conventions exist, and the file rarely says which one it uses.
Open-stamped bars carry the time the bar began: a bar labelled 09:30 covers 09:30:00 to 09:30:59. Close-stamped bars carry the time the bar ended: the same minute is labelled 09:31. If your backtester assumes close stamps and the file uses open stamps, every bar is read one minute early. A rule that decides "at the close of the 09:30 bar" is then given the bar that closed at 09:31, a price that had not printed when the decision was supposed to be made. This is look-ahead bias, and in an intraday data backtest it is the most common way a rule gets a result it could never have traded. The second error is a time-zone shift. A file in Chicago time loaded as Taipei time, or a daylight-saving change applied to one half of the file, moves every session open and close by whole hours, so an "open of the day session" rule fires on the wrong bar every affected day.
Four checks settle the question before any rule is run:
- Open the first day of the file. Compare the first bar's label with the exchange's published session open for that date. If the label is the open time, the file is open-stamped; if it is one bar later, it is close-stamped. Set the backtester to match.
- Check one spring and one autumn daylight-saving date. The session open label should move only as the exchange schedule moves, never by an extra hour.
- Delay every signal by one extra bar and run again. If the result collapses, the original run was reading a price too early.
- Match the session template to the exchange hours for every year tested. Exchanges have changed their hours over the years, and one template for the whole file can be wrong at both ends.
How should you set slippage in a high frequency backtest?
Set slippage per side in ticks, from your own fills if you have them or at least one tick per side for liquid futures traded with market or stop orders, and run the test again with twice that number. Slippage is the distance between the price the test assumed and the fill a real order would have received. Per side means it is charged on the entry and again on the exit, so one tick per side is two ticks per round trip. On intraday bars that round trip is a large share of the average trade, and the second run shows whether the rule survives a slightly worse fill.
- Start from fill records if you have any. Compare the price your live orders filled at with the price the signal bar showed, and take the average difference in ticks.
- Without records, use one tick per side for liquid index futures and more for thin contracts, for the first minutes after a session opens and for scheduled news times.
- Add commission and exchange fees per round trip in the same units as the results. Trading costs in backtests lists what belongs in the number.
- Double the slippage and run again. Write down the net average trade from both runs before you read anything else in the report.
- Decide with a rule written in advance, for example: the gross average trade must be several times the round-trip cost, and the doubled-slippage run must stay above zero.
Hypothetical example
A future with a $5 tick, $4 commission per round trip and $5 of slippage per tick per side. A daily rule captures a gross average trade of $600: net $586 at one tick per side and $576 at two ticks. A 1-minute rule captures $24: net $10 at one tick and $0 at two ticks. A tick-level rule captures $16: net $2 at one tick and −$8 at two ticks. The same one-tick change in the assumption leaves the daily rule almost untouched and flips the tick rule from positive to negative.
The daily-bar end of this scale is the contrast a high frequency test loses, and a real run in AlphaPrime (Valynox) shows what it looks like. The run below tested NQ daily bars from 2019-01-02 to 2025-06-30, long and short, one contract, with $20 commission and $10 slippage per trade. Its rule is a stand-in, not the subject of this article: a Stochastics rule as the only entry and exit, with no stop, target or filter. The search tried 1,024 candidates and kept this one for its return against its drawdown, and picking the kept candidate after the fact flatters its figures.
Source: AlphaPrime product engine (CPU), run 2026-10-31. NQ daily bars, 2019-01-02 to 2025-06-30, long and short, 1 contract, $20 commission and $10 slippage per trade.
| Number | Result |
|---|---|
| Net profit (closed trades) | $49,380 |
| Max drawdown | $32,935 |
| Trades | 62 |
| Win rate | 56.45% |
| Profit factor | 1.374 |
| Average trade | $796.45 |
| Time in market | 11.44% |

Read this run for one thing only: $30 of round-trip cost against an average trade of $796.45, well under one twentieth of the move captured. On NQ one tick is 0.25 index points, worth $5.00 (CME Group contract specifications), so the $10 slippage in the settings is one tick per side. The same $30 against a 1-minute rule whose average trade is a few tens of dollars would be the largest item in the result. The run also shows the other side of the trade-count rule: 62 trades over six and a half years is far below the few hundred needed to trust a per-trade figure, so the $796.45 says nothing about what the rule would earn and is not a figure a reader can expect. Exchanges revise tick sizes and fees from time to time, so confirm the current value on the exchange's contract page; the free futures contract calculator shows tick value and point value for the main contracts. In AlphaPrime, the slippage and commission you type into the backtesting settings are charged on every candidate during the search itself, with next-bar execution, so the doubled-slippage run is one changed number rather than a second project.
How much do tick and 1-minute backtest results differ on ES?
The same rule run on tick data and on 1-minute bars of ES gives different trade counts and fill prices, because the 1-minute bar hides the order of prices inside it, and the gap widens as the rule gets faster. ES is the E-mini S&P 500 future. Its 1-minute bar records a high and a low but not which came first. When a stop and a target both sit inside one bar's range, bar data has to assume the order; tick data shows it.
Most backtesters resolve the tie with a fixed assumption: stop first (conservative), target first (optimistic), or whichever level is closer to the bar's open. Each assumption moves many trades from win to loss or back. Tick data removes the assumption, because the sequence of prints shows which level traded first. Fill prices differ too. On bars, a stop order fills at the trigger price or at the next bar's open; on ticks, it fills at the first print at or beyond the trigger, which is often a tick or more worse. A rule that works on tick data has therefore been tested against the real order of events; the same rule on bars has been tested against an assumption about them. A tick chart compared with time bars shows what the bar compresses.
Hypothetical example
One short-term breakout rule on ES with a 4-tick stop and a 6-tick target. On 1-minute bars with the "stop first" assumption: 1,040 trades and an average trade after costs of $13. On tick data: 1,180 trades, because some entries and exits that fell inside one bar were not reached in that order on bars, and an average trade after costs of $8, with stop fills on average 0.7 ticks worse than the trigger price. Same rule, same period, two results. The larger the stop and target distances compared with the typical 1-minute range, the smaller this gap becomes.
The gap widens as the rule gets faster for a simple reason. A rule whose stop and target are 40 ticks apart rarely has both inside one 1-minute bar, so few trades are decided by assumption. A rule with 4 ticks of stop and 6 of target has both inside almost every bar, so almost every trade is. A working rule of thumb: if the typical 1-minute range of the market is larger than the distance between your stop and your target, test on tick data, or use the conservative assumption and treat the bar result as a floor. Whichever you choose, keep it the same in-sample and out-of-sample, so both sides of the split are graded on the same fill assumption.
How does hardware affect high frequency backtesting?
Classic runs on the CPU, and Reserve uses an NVIDIA GPU to speed up strategy generation and backtesting. The workflow is the same in both: check timestamps and sessions, set commission, slippage and next-bar execution, run the strategy search across candidates, run the survivors through strategy validation, and review the results in the databank and the report. One step waits longer when the file holds hundreds of thousands of bars; the other four take the same human time regardless.
The wait at the search step grows with bars per candidate times candidates. The one measured reference point is the published benchmark: AlphaPrime completed 1,268,200,000 strategy evaluations in 18 h 23 min on one RTX 3090, measured 2026-10-05, on TY 37-minute bars from 2015-01-01 to 2026-09-25, 114,371 bars per candidate, with commission and slippage charged in every evaluation; the conditions are listed on the benchmark page. Real speed depends on the graphics card, the length of the data and the research settings, and a 1-minute or tick file with many more bars per candidate takes longer per candidate than that run did. How the two editions compare on speed is worked through in GPU vs CPU backtesting. Classic runs on the CPU and Reserve uses an NVIDIA GPU to speed up strategy generation and backtesting; either way the edition changes how long you wait at step three, not what the test checks.
A good next step with a rule you already have: open the first day of its 1-minute file and settle whether the bars are open-stamped or close-stamped, then run the rule twice, at one and at two ticks of slippage per side, and write down the net average trade from both runs before you look at any other number in the report.
Frequently asked questions
How much data do I need for a high frequency backtest?
Count completed trades, not years. Aim for at least a few hundred out-of-sample trades before you trust a per-trade figure, and treat fewer than about 30 as a hint. A 1-minute rule that trades daily reaches that count in months, but one year of 1-minute bars for a near-24-hour futures session holds hundreds of thousands of bars, so storage, loading and data-quality checks become part of the work.
How much do tick and 1-minute backtest results differ?
They differ most when the rule's stop and target can both fit inside one bar. The 1-minute bar does not record whether the high or the low came first, so the backtester must assume the order, while tick data shows it. The faster the rule, the more trades are decided by that assumption, and the further the two trade counts and average trades move apart. For slow rules with wide stops the two results are usually close.
How should I set slippage in a high frequency backtest?
Set it per side in ticks. Use your own fill records if you have them; otherwise start at one tick per side for liquid futures with market or stop orders, and more for thin contracts and the first minutes after an open. Then double the number and run the test again. If the net average trade turns negative at two ticks, the rule depended on cheap execution.
Is 1-minute data good enough as HFT backtest data?
For retail-speed rules that hold positions for many minutes or hours, 1-minute bars are usually adequate once their timestamps and session boundaries are checked. For rules that enter and exit within a few ticks, 1-minute bars hide the order of prices inside each bar and the real fill price of stop orders. Those rules need tick data, or a conservative assumption whose result you read as a floor.
How does hardware affect high frequency backtesting?
Classic runs on the CPU, and Reserve uses an NVIDIA GPU to speed up strategy generation and backtesting. The edition changes the wait at the search step, when the bar count and the candidate count are both large. The checks on timestamps, slippage and results take the same human time in either one.
References
- Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2014). Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance. Notices of the American Mathematical Society, 61(5), 458–471.
- Harvey, C. R., & Liu, Y. (2015). Backtesting. The Journal of Portfolio Management, 42(1), 13–28.
- CME Group. E-mini Nasdaq-100 Futures Contract Specs. https://www.cmegroup.com/markets/equities/nasdaq/e-mini-nasdaq-100.contractSpecs.html

