VALYNOXSTRATEGY RESEARCH TECHNOLOGY
AlphaPrimeAlphaPrime
ACADEMY / Backtesting and validation

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 · Published · updated · Editorial policy

Contents
  1. What changes when you backtest on high frequency data?
  2. How much data does high frequency backtesting need?
  3. Why does timestamp accuracy matter more on intraday data?
  4. How should you set slippage in a high frequency backtest?
  5. How much do tick and 1-minute backtest results differ on ES?
  6. How does hardware affect high frequency backtesting?
  7. Frequently asked questions
  8. 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.

Illustration: a daily-bar trade and a 1-minute-bar trade pay the same round-trip cost, but the 1-minute trade captures a much smaller move, so the cost takes most of it Same cost, smaller move Per trade, by bar size Kept Cost Illustration Daily 1-minute Cost eats most On fine data, cost is the result. So: set costs before the rule.
The cost per trade stays fixed while the move per trade shrinks with the bar size. On fine data the cost slice is the result.

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.

QuestionDaily bars1-minute barsTick data
Bars per trading day (near-24-hour session)1About fourteen hundredThousands to tens of thousands, set by volume
Bars per yearAbout 250Hundreds of thousandsMillions
Time to reach a few hundred out-of-sample tradesYears, often a decade for a monthly ruleMonths for a rule that trades dailyWeeks to months
Checks that grow in effortHolidays, rollsGaps, session boundaries, bar timestampsGaps, bad ticks, session boundaries, print order
For a near-24-hour futures session, bars per year grow from about 250 on daily data to hundreds of thousands on 1-minute data and millions on tick data, while the roughly 300 out-of-sample trades needed to judge a result stay the same Far more bars to check Near-24-hour futures session Bars a year Trades needed ~300 Daily 1-min Tick Bars grow; trades needed don't. So: count trades, check the file.
Bars and file size grow by orders of magnitude from daily to tick, while the number of trades needed to judge a result stays the same.

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.

Two timestamp errors on 1-minute bars: an open-stamped file read as close-stamped makes the test read the bar one minute early, and a time-zone offset puts the session open on the wrong bar When did the bar close? A wrong stamp moves every signal True bar Bar read Stamp mix-up 1 bar early Time zone Wrong open bar Know when each bar closed. So: check stamps before any run.
An open-stamped bar read as close-stamped puts the signal one bar early; a time-zone offset puts the session open on the wrong bar for the whole day.

Four checks settle the question before any rule is run:

  1. 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.
  2. 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.
  3. Delay every signal by one extra bar and run again. If the result collapses, the original run was reading a price too early.
  4. 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.

  1. 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.
  2. 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.
  3. 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.
  4. Double the slippage and run again. Write down the net average trade from both runs before you read anything else in the report.
  5. 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.

Hypothetical average trade in dollars for a daily, a 1-minute and a tick rule: gross, net at one tick of slippage per side and net at two ticks; daily goes 600, 586, 576; 1-minute 24, 10, 0; tick 16, 2, minus 8; bars scaled per rule One tick flips fast rules Hypothetical $; bars scaled per rule Gross Net, 1 tick Net, 2 ticks 600 586 576 24 10 0 16 2 −8 Daily 1-minute Tick Fast rules live on cheap fills. So: rerun at twice the slippage.
Hypothetical figures from the example above: one extra tick of slippage per side barely moves the daily rule and flips the tick rule below zero.

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.

NumberResult
Net profit (closed trades)$49,380
Max drawdown$32,935
Trades62
Win rate56.45%
Profit factor1.374
Average trade$796.45
Time in market11.44%
Read the average trade against the $30 round-trip cost in the settings line. On daily bars the cost is a thin slice of each trade; on 1-minute bars the same $30 would be most of it.
Read the average trade against the $30 round-trip cost in the settings line. On daily bars the cost is a thin slice of each trade; on 1-minute bars the same $30 would be most of it. NQ · daily · 2019-01-02 to 2025-06-30 · CPU engine backtest

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.

A 1-minute ES bar holds both a stop and a target, so the order is unknown; the ticks inside that minute show the stop was hit first. Hypothetical table: tick data gives 140 more trades than 1-minute bars, and an average net of 8 dollars instead of 13, with stop fills 0.7 ticks worse than the trigger Which level hit first? A bar hides it, ticks show it 1-min bar Ticks: stop first Target Stop ? Hypothetical Trades Avg net Stop fill 1-min bars Base $13 Trigger Tick data +140 $8 −0.7 tick
A 1-minute bar cannot say whether the stop or the target was touched first; the tick sequence can. The hypothetical table shows how that difference reaches the trade count and the average trade.

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.

Five steps of a large intraday test: check timestamps, set costs, run the search, walk-forward, review the report; only the wait at the search step depends on bars times candidates, with the published GPU benchmark as reference Five steps, one wait Only the search wait changes Wait: bars × candidates 1 2 4 5 3 Check stamps Set costs Run search Walk- forward Review report Ref: published GPU benchmark The checks take the same time. So: start now; one step waits.
The five steps of a large intraday test run in one fixed order. Only the wait at the search step changes with the number of bars and candidates.

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