Quant Memo
Core

Intraday Versus Daily Backtest Granularity

Whether a backtest steps through the day trade-by-trade or just marks positions at the close changes what kinds of strategies you can even evaluate honestly, and how much infrastructure the test costs to build.

Prerequisites: Decision Time Versus Data Timestamp

Before you can backtest anything you have to decide how finely to slice time. A daily backtest looks at one price per instrument per day — typically the close — and rebalances at most once a day. An intraday backtest steps through minutes, seconds, or individual ticks, letting a strategy see and react to price moves within the trading session. The choice sounds like a technical detail, but it determines which strategies you're even capable of testing honestly: a signal that decays over two hours simply cannot be evaluated on daily bars, no matter how clever the rest of the backtest is.

The tradeoff

Daily granularity is cheap to build, cheap to store, and fast to run — a decade of daily bars for a few thousand names fits comfortably in memory, and a full backtest takes seconds. But it hides everything that happens between opens and closes: a strategy that would have been stopped out at 11am and re-entered at 2pm just sees one number for the whole day. Intraday granularity captures that path, which matters enormously for anything with a stop-loss, an intraday signal, or execution costs that depend on when exactly you trade. The cost is data volume (tick data for liquid names runs into billions of rows a year) and a much harder simulation problem, since you now need to model the order in which events happen within a bar, not just the bar's summary statistics.

Worked example: a mean-reversion signal that only lives for hours

Suppose a signal says "buy when a stock drops more than 2% in the first hour of trading, and it tends to recover half that move by 2pm." A daily backtest only ever sees the open and the close. If the stock opened down 2%, dropped further to −4% by 11am, and finished the day at −1%, the daily bar records a −1% day — the signal's entire mechanism (drop, then partial recovery within the session) is invisible. An intraday backtest sampling hourly bars would see the −4% trough at 11am, the entry, and the recovery to −1% by the close, letting you measure the actual edge the strategy is trying to capture. Running this strategy on daily data wouldn't just be less precise — it would silently test a completely different, nonexistent strategy.

price time of day open 11am trough close daily bar sees only these two points
The intraday path shows a sharp drop and partial recovery; a daily backtest connects only the open and close, erasing the exact move the strategy is trying to trade.

What this means in practice

The right granularity is set by the strategy's holding period, not by convenience: a rule of thumb is that your bar size should be several times shorter than the shortest thing the signal needs to see. A daily-holding-period portfolio strategy rarely needs tick data, and building tick infrastructure for it is wasted effort; a stat-arb strategy that unwinds within the day cannot be trusted on daily bars at all. Many research teams run daily backtests first to filter ideas cheaply, then re-test survivors on intraday data before committing capital — daily granularity is a fast, coarse filter, not a substitute for the finer test a short-horizon strategy actually needs.

Backtest granularity must match the strategy's holding period. Daily bars are fast and cheap but erase everything that happens within the day; intraday data is expensive to build and run but is the only honest way to test a strategy whose logic depends on intraday price movement.

Testing a short-horizon or intraday-triggered strategy on daily bars doesn't just add noise — it often changes what's being tested into a different strategy entirely, one that happens to share a name with the real idea but never sees the price action the real idea depends on.

Related concepts

Practice in interviews

Further reading

  • Chan, Algorithmic Trading, ch. 3
ShareTwitterLinkedIn