October 18, 2026 · research

How do I backtest a strategy that trades on a daily signal?

How do I backtest a strategy that trades on a daily signal?

A daily strategy that calculates its signal from Monday’s closing price cannot place an order at Monday’s close. It can submit after that price is known, then trade at a later executable price. That small timing choice can change the result more than a clever indicator.

For a daily backtest, write down the sequence before writing the signal: when the bar becomes complete, when the strategy calculates, when the order reaches the market, and what price could plausibly fill it. If those events all occupy the same instant, the backtest has skipped the hard part.

Can I use today’s closing price to trade at today’s close?

Usually, no. A signal that depends on the final close is only available once the closing auction or final trade has happened. A fill at that same price assumes the strategy knew the result early enough to participate at a price that helped define the result.

Take a simple rule: buy when the close is above the 20-day moving average. At Monday’s close, the rule turns true. A backtest that buys at Monday’s close has used Monday’s completed price to decide and to fill. For a basic daily-bar model, the honest approximation is to generate the order after Monday’s bar completes and fill no earlier than Tuesday’s open, with appropriate costs.

There are strategies that submit orders into a closing auction using information available before the auction cutoff. Those can be backtested, but the signal must use only pre-cutoff data, and the fill needs to reflect auction execution. “Daily signal” alone doesn’t establish either condition.

What is the right fill price for a daily backtest?

There isn’t one universally right price. The next open is a clear starting assumption when the signal is formed from a completed daily bar and the order is sent afterward. It is not a guarantee: an overnight gap can move the market, and a market order will pay spread, fees, and potentially impact.

For the Monday signal above, suppose the Monday close is $100 and Tuesday opens at $103. A close-to-close backtest may show a small gain if it pretends to buy at $100. A next-open entry starts at $103. The $3 difference is not “slippage” to be tuned away; it is the price consequence of learning the signal after Monday’s close.

Signal becomes availableCandidate executionWhat the model assumes
After daily closeNext session’s openOrder can reach the market before or at the open
Before closing auction cutoffClosing auctionSignal uses only pre-cutoff information; auction fill is modeled
After daily closeLater intraday priceStrategy waits; execution needs intraday data and a stated schedule

On crypto markets, “daily close” is a convention because trading continues through the timestamp boundary. A strategy can still use a completed UTC daily candle, but it needs to wait until the candle is complete and data has arrived. If your data pipeline finalizes a bar several seconds late, an order at the boundary price is especially hard to defend.

How should I model orders when I only have daily bars?

Be explicit about what the bar can and cannot tell you. Daily OHLCV can support a next-open approximation, but it cannot reveal the spread at your arrival time, the path through the day, or whether a limit order joined the queue before a price touched it.

For a daily market order, start with the next open, then charge the strategy for the costs it would actually face: venue fees, a spread estimate, and an impact estimate appropriate to order size. Stress those costs. If the result depends on assuming zero spread or negligible impact, the daily bars have not earned that confidence.

For a limit order, a day’s low crossing your limit does not prove you filled. The market might have traded there before your order arrived, or there may have been more quantity ahead of you than traded. Daily bars are often too coarse to support a credible queue model. Use finer data if the claim depends on intraday execution, or make the fill assumption deliberately conservative and label it.

What timing checks catch a daily-bar lookahead?

I like a few blunt checks because they expose assumptions quickly:

A one-session shift is a diagnostic, not a universal execution model. A slow portfolio rebalance, a closing-auction strategy, and a crypto system trading continuously need different clocks. The point is to make the clock visible.

Does daily data make a backtest less useful?

No. Daily data can be entirely appropriate for a strategy whose decisions and holding periods are measured in days or weeks. It is useful for asking whether a broad rule is worth researching. It becomes misleading when the backtest claims precision about fills that the bars cannot show.

I’ve seen more than one strategy improve dramatically because someone changed “signal at close, fill at close” to “signal at close, fill next open.” That result may be disappointing, but it is valuable: it tells you whether the idea survives the moment it becomes tradable. Keep the timing contract beside the strategy code. Otherwise, the next optimization pass will quietly put the impossible fill back.

daily signalsexecution timingbacktestingmarket data
← All posts