VALYNOXSTRATEGY RESEARCH TECHNOLOGY
AlphaPrimeAlphaPrime
ACADEMY / Backtesting and validation

Strategy validation checklist: 7 checks before you trust a backtest

Run seven checks in a fixed order, cheapest first: data quality, costs, look-ahead bias, a time-ordered in-sample/out-of-sample split, walk-forward efficiency, Monte Carlo and parameter stress tests, and a minimum trade count. Write every pass/fail number before the first run, and stop a strategy at the first check it fails.

By · Published · updated · Editorial policy

Contents
  1. What is on a strategy validation checklist for a futures strategy?
  2. Checks 1 to 3: are the data, the costs and the execution order right before you read any result?
  3. Check 4: how should you split in-sample and out-of-sample data?
  4. Check 5: what walk-forward efficiency counts as a pass?
  5. Check 6: what do Monte Carlo and parameter stress tests add that one equity curve cannot?
  6. Check 7: how many trades does a backtest need, and which thresholds do you set beforehand?
  7. Why does the best backtest in a search still need all seven checks?
  8. Frequently asked questions
  9. References

What is on a strategy validation checklist for a futures strategy?

A strategy validation checklist for a futures strategy is seven checks run in a fixed order: data quality, costs, look-ahead bias, an in-sample/out-of-sample split, walk-forward analysis, Monte Carlo and parameter stress tests, and a minimum trade count with pass/fail thresholds written down before the first run. A strategy that fails one check stops there.

A strategy validation checklist is a fixed list of tests, applied in the same order to every candidate, with the pass line for each test written before the first result is read. Think of seven gates at an airport: a passenger who fails the passport check is not sent on to the baggage scanner to see whether that goes better. The order matters because the first three checks fix the inputs, and every later check reads results built on those inputs. The claim of this article is that the order and the pre-written numbers do more for you than any single test, including the slow, impressive ones.

CheckWhat it catchesTime it takes
1 Data qualityUnadjusted rolls, gaps, bad ticks, wrong time zoneMinutes
2 Costs inAn edge smaller than the round-trip costMinutes
3 Look-ahead checkFills at prices the rule could not have hadMinutes
4 In-sample / out-of-sampleRules that describe one stretch of historyOne extra run
5 Walk-forwardSettings that stop working when re-chosen on new dataMany runs
6 Monte Carlo and parameter stressA lucky trade order; a setting with no good neighboursMany runs
7 Trade count and thresholdsA result built on too few trades; goalposts moved after the factOne reading

AlphaPrime (Valynox) works this way inside strategy validation: the thresholds are yours, set before the search, and a candidate that fails an early check does not go on to the slower ones.

Seven validation gates in a fixed order: a strategy that passes a gate moves on to the next one, a strategy that fails any gate stops there, and the cheap, fast gates 1 to 3 come before the slow gates 4 to 7 Fail one gate, stop there Seven checks in a fixed order 1 2 3 4 5 6 7 Cheap, fast Slow Pass: go on Fail: stop Slow tests only see clean inputs. So: run the cheap gates first.
Seven gates in a fixed order. A strategy that fails one gate stops there; the cheap gates come first so the slow ones only run on candidates with correct inputs.

Checks 1 to 3: are the data, the costs and the execution order right before you read any result?

Run the cheap checks first, because a bad roll, a missing round-trip cost or a rule that reads the close of the bar it trades on can turn a losing rule into a winning backtest, and no later check can repair that. These three checks take minutes and remove most false winners before any statistics are involved.

  1. Check 1, data quality. A continuous futures series is built by joining several contract months, and the price jump at each roll has to be adjusted, or a trend rule will trade a gap that nobody could trade. Look at the roll dates, the overnight gaps, the time zone of the bars and the holiday calendar. Pass when every roll is adjusted the same way, no bar sits far outside its neighbours, and the session hours match the hours you would trade.
  2. Check 2, costs. Put commission, exchange fees and slippage into every run from the start, per round trip (entry plus exit). Then compare the average trade after costs with the round-trip cost. A rule whose gross average trade is close to the cost of taking it has no edge, and it is usually the rule with the most trades.
  3. Check 3, look-ahead bias. Look-ahead bias is a backtest using information that was not available at the moment the rule decided. The most common leak is a rule that decides on the close of a bar and fills at that same close. The fix is next-bar execution: decide on the close, fill at the next open. The one-bar check: run the strategy with fills one bar later than the signal; if the result collapses, the rule was reading the future.

Whether your software shows roll adjustments, takes a per-side slippage and can force next-bar fills is worth knowing before any result; the six checks in backtesting software compared cover what to look for.

Two rows of five daily bars with a signal on the close of bar 3: the wrong row fills at that same close, the right row fills at the open of bar 4, and the gap between the two prices is profit a same-bar backtest invents Fill on the next bar Decide at close, fill at next open signal fill Same bar Next bar Gap The gap is profit nobody could get. So: always fill on the next bar.
A rule that decides on a bar's close fills on the next bar. The gap between the two prices is the profit a same-bar backtest invents.

Check 4: how should you split in-sample and out-of-sample data?

Split by time, tune only on the earlier part, run the rules unchanged on the later part, and keep a final block of recent bars that nothing touches until one last test. In-sample data is the part of the history used to choose rules and settings. Out-of-sample data is the part set aside and used only to run the finished rules and read the result. Study material and exam paper have to be different pages.

  1. Pick the split dates before the first run and write them down. A common shape is about 70 percent in-sample, about 20 percent out-of-sample, and the most recent 10 percent reserved for one final test.
  2. Check that both sides contain a trend, a range and a volatile stretch. If the out-of-sample years are one long rise, a rule that is simply long passes for the wrong reason.
  3. Count the out-of-sample trades, not the years; check 7 explains why.
  4. Keep every setting frozen after you read the out-of-sample result. A changed setting makes that data part of the tuning, and the test is spent.

How much of the in-sample result should survive, and what to do with a result that is weaker but not broken, is covered in in-sample vs out-of-sample: how to split and how much is enough.

One time-ordered history from 2019 to 2025 split into three blocks: in-sample, about 70 percent, looked at as often as you like; out-of-sample, about 20 percent, looked at a few times; and a reserved final block, about 10 percent, tested exactly once Three blocks, three jobs One history, split by time 2019 2025 In-sample: many looks Out-of-sample: few looks Reserved: one look Each look at new data spends it. So: freeze settings, then test.
Three blocks of one time-ordered history, three jobs, three allowances of looks: many, few, one.

Check 5: what walk-forward efficiency counts as a pass?

Walk-forward efficiency is the out-of-sample profit per unit of time divided by the in-sample profit per unit of time, and a figure around half or better, read across all windows rather than the best one, is the common pass line that you write down before the run. Walk-forward analysis is a test that tunes settings on one window of history, runs them unchanged on the window that follows, moves both windows forward and repeats, until the joined out-of-sample pieces form one result. It turns one split into many and produces more out-of-sample trades from the same data.

Dividing by time is what makes the two sides comparable: a three-year in-sample window and a one-year out-of-sample window cannot be compared on total profit. Pardo (2008) describes the ratio; many systematic traders use about 50 percent as the floor. Read the number pooled across all windows. One weak window is normal, because markets change between windows. A pooled figure well under the line, a sign that flips from window to window, or a result that lives in one window is a fail.

Hypothetical example

Five rolling windows. Each in-sample window earns about 100 units per year. The out-of-sample windows earn 60, 45, 70, 20 and 55 units per year, so the efficiencies are 60, 45, 70, 20 and 55 percent. Pooled, 250 of 500 units survive, which is 50 percent and meets a pass line of 50 written before the run. Window four alone would fail; the pooled figure passes.

Hypothetical walk-forward test with five windows: each in-sample window earns about 100 units per year, the out-of-sample windows earn 60, 45, 70, 20 and 55, giving efficiencies of 60, 45, 70, 20 and 55 percent; pooled, 50 percent survives and meets the pass line written before the run Judge the pooled figure Hypothetical, five rolling windows In-sample Out-of-sample 60% 45% 70% 20% 55% Pass 50% Pooled 50%: one weak window is fine. So: judge all windows, not the best.
Walk-forward efficiency per window and the pass line set before the run. Judge the pooled figure, not the best window.

Window lengths, how many windows you need and how to read the joined curve are in walk-forward analysis: the one backtest number you could have traded.

Check 6: what do Monte Carlo and parameter stress tests add that one equity curve cannot?

One equity curve is one ordering of trades and one point on the parameter grid; shuffling the trade order shows how deep the drawdown could have been, and moving each setting up and down shows whether the result lives on a plateau or on a spike. The curve you see is one deal of the cards. The same 200 trades dealt in another order give the same net profit and a different worst drawdown.

A Monte Carlo test is a test that reorders or resamples the trade list many times and records the maximum drawdown of each new sequence, giving a range instead of a single value. You can run one on any trade list with the free Monte Carlo drawdown simulator, and the reason the historical drawdown usually sits on the kind side of that range is set out in Monte Carlo backtest: your real max drawdown is probably worse. A workable pass rule, written in advance: the drawdown that 95 percent of the shuffles stay under must fit the account you will trade.

The Monte Carlo report of the ES run described under check 7. Look at how far the right tail of the drawdown distribution reaches past the drawdown the single historical trade order produced.
The Monte Carlo report of the ES run described under check 7. Look at how far the right tail of the drawdown distribution reaches past the drawdown the single historical trade order produced. ES · daily · 2019-01-02 to 2025-06-30 · CPU engine backtest

A parameter stress test is a test that moves each setting a few steps up and down from the chosen value and reruns the strategy. A lookback of 20 that works while 18 and 22 are near zero is a spike: the setting describes noise in that history. A lookback of 20 whose neighbours from 16 to 26 all behave alike sits on a plateau, and a plateau is what you keep. Doubling the slippage and shifting the start date by a few months belong to the same check.

Hypothetical net profit by lookback setting from 10 to 30 with 20 chosen: on the left a plateau where the neighbours of 20 earn about the same, which you keep; on the right a spike where only 20 works and 18 and 22 are near zero, which you reject Keep the plateau Hypothetical net profit by lookback Plateau Keep Spike Reject 10 20 30 10 20 30 Good neighbours mean a real setting. So: move each setting up and down.
Plateau versus spike. A robust setting has neighbours that agree with it; a setting that works at one value only describes the past.

Check 7: how many trades does a backtest need, and which thresholds do you set beforehand?

The uncertainty of the average trade shrinks with the square root of the trade count, so a run with a few dozen trades is a hint rather than a result, and every pass/fail number (trades, efficiency, drawdown, profit factor after costs) must be written before the search so the result cannot move the goalposts. An average built from a dozen trades moves a long way when three trades are swapped; one built from several hundred barely moves.

uncertainty of the mean trade = spread of the single trades ÷ √N

Here the spread of single trades is how far a typical trade sits from the average (the standard deviation), N is the number of trades and √N is its square root. Four times the trades give half the uncertainty.

Hypothetical example

The average trade is 1,000 units and single trades typically sit 4,000 units from that average. With 41 trades the uncertainty is about 4,000 ÷ 6.4 ≈ 625 units, so the true average could be well below 1,000. With 160 trades it is about 316 units; with 640 trades about 158 units. Only the two larger samples put the average clear of zero by a comfortable margin.

Hypothetical average trade with a single-trade spread four times as large as the average: the uncertainty is about plus or minus 625 units with 41 trades, 316 with 160 trades and 158 with 640 trades, so four times the trades give half the uncertainty More trades, less doubt Hypothetical: same average trade 41 trades 160 trades 640 trades ±625 ±316 ±158 0 Average 4× the trades, half the range. So: aim for a few hundred trades.
The same average trade with three trade counts. The error bar shrinks with the square root of the count, so 41 trades say far less than 640.

Write the pass lines before the search. Example values many systematic traders use:

ThresholdExample pass lineWhy
Completed tradesA few hundred in total; fewer than 30 out-of-sample counts as a hint onlyThe average trade is not stable below that
Walk-forward efficiency, pooled50 percent or betterHalf the in-sample edge survives re-chosen settings
Profit factor after costs1.3 or betterProfit factor is gross profit divided by gross loss; a value near 1 is cost and noise
Monte Carlo drawdown95th percentile fits the accountThe historical drawdown is one deal of the cards
Parameter neighboursSame sign two steps either sidePlateau, not spike

The run below shows why the trade count decides so much. AlphaPrime ran a search on ES daily bars from 2019-01-02 to 2025-06-30, long and short, one contract, with $20 commission and $25 slippage charged on every trade. The rule is a stand-in, not the subject of this article: an Efficiency Ratio rule as the only entry and exit, no stop, no target, no filter. The candidate shown is the one the search kept out of 1,024 it tried, chosen for its return against its drawdown; picking the kept one after the fact flatters it, and the numbers describe one past path, not what the rule earns or what a reader can expect.

Source: AlphaPrime product engine (CPU), run 2026-10-31. ES daily bars, 2019-01-02 to 2025-06-30, long and short, 1 contract, $20 commission and $25 slippage per trade.

NumberResult
Net profit (closed trades)$50,967.5
Max drawdown$19,100
Trades41
Win rate56.1%
Profit factor2.107
Average trade$1,243.11
Time in market15.84%
The equity curve of the same run with its out-of-sample stretch marked. Read it together with the trade count in the box above, not from its shape alone.
The equity curve of the same run with its out-of-sample stretch marked. Read it together with the trade count in the box above, not from its shape alone. ES · daily · 2019-01-02 to 2025-06-30 · CPU engine backtest

Read the trade count first: 41 trades over about six and a half years. By the formula above, 41 trades leave the $1,243.11 average trade with a wide margin of error, and the $50,967.5 net profit and $19,100 maximum drawdown are one sequence of those 41 trades. Against a pass line of a few hundred trades written beforehand, this candidate is a hint to carry into a walk-forward run with more windows or a shorter bar size, not a result to trade.

Why does the best backtest in a search still need all seven checks?

The kept candidate is the best of many tries and carries a selection bonus that only unseen data and pre-written thresholds can discount, and a strategy that passes alone still has to be tested together with the others you already trade. A selection bonus is the part of the best backtest in a search that comes from having searched, not from the rule.

Give 1,024 people a coin each and ask them to flip it ten times. About one of them flips ten heads, and that person has no skill. The ES run above kept one candidate out of 1,024 tries, so part of its result is this bonus, and the in-sample numbers cannot say how much. Bailey, Borwein, López de Prado and Zhu (2014) show that the expected best backtest in a search rises with the number of tries even when every rule is noise, and Harvey and Liu (2015) propose discounting a result for the number of tests behind it. The size of the effect and the research behind it are in backtest overfitting: why the best backtest is usually inflated.

Backtest results of rules that are all pure noise, sorted around zero: the best of about a thousand tries sits far to the right of zero, the best of 10 tries sits close to zero, so the number of tries sets the size of the selection bonus More tries, luckier best Every rule here is pure noise Best Best Many tries 10 tries 0 The best of many is partly luck. So: judge it on unseen data.
The best of 1,024 tries sits far to the right even when every try is noise; the best of 10 tries sits much closer to zero. The number of tries sets the size of the bonus.

This is why checks 4 to 7 exist and why their lines are written first: unseen data does not carry the bonus, and a threshold written before the run cannot be moved to fit the result. One more gate follows the seven. A strategy that passes alone changes your account only in combination with what you already trade, and two strategies that lose in the same weeks add their drawdowns; how to measure that is in portfolio backtest: the combined drawdown is the one you live through.

Next step: take one strategy you are considering, write its seven pass lines on a single page with today's date, and run check 1 on its data before you look at its equity curve again.

Frequently asked questions

What should you validate before trading a strategy live?

Check the inputs first: adjusted rolls and clean bars, commission and slippage charged on every trade, and next-bar execution. Then test on data the rules never saw: a time-ordered out-of-sample block, a walk-forward run with pooled efficiency around half or better, a Monte Carlo drawdown range and a parameter plateau. Finally confirm the trade count is in the hundreds and that every pass line was written before the run.

How many trades does a backtest need to be trustworthy?

Enough that the average trade cannot move much when a few trades change. The uncertainty of the average shrinks with the square root of the trade count, so four times as many trades halve it. Many systematic traders want a few hundred trades in total and treat fewer than about 30 out-of-sample trades as a hint only. A shorter bar size or a walk-forward design produces more trades from the same history.

What walk-forward efficiency counts as a pass?

Walk-forward efficiency divides out-of-sample profit per unit of time by in-sample profit per unit of time. A pooled figure across all windows of about 50 percent or better is the common pass line. One weak window is normal because markets change; a pooled figure well below the line, or out-of-sample profit that lives in a single window, is a fail. Write the line down before the run.

How do you avoid overfitting a backtest?

Keep the number of tuned settings small relative to the trade count, include costs from the first run, and judge only on data the search never touched. Prefer settings whose neighbours behave alike over a single value that stands out. Remember that the best candidate out of many tries carries a selection bonus, so set every pass threshold before the search and apply it to the out-of-sample and walk-forward results, not the in-sample curve.

References

  • Pardo, R. (2008). The Evaluation and Optimization of Trading Strategies (2nd ed.). John Wiley & Sons.
  • 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.