Chapter 3
Bias Controls & Validation
Most retail backtests are invalidated by systematic biases that make results look far better than reality. We have identified the six most common biases and engineered hard controls against each one.
Look-Ahead Bias
Most DangerousWhat it is
Look-ahead bias occurs when a strategy uses information that would not have been available at the time a trading decision was made. The most common form is using the closing price of bar T to generate a signal, and then executing that trade also at bar T's close. In reality, the close price is only known after the bar closes — at which point the market is already closed.
✗ Biased (what most retail tools do)
Signal generated at bar T's close → trade filled at bar T's close. Impossible in practice — you cannot trade at a price that you just discovered.
✓ Our approach
Signal generated at bar T's close → trade queued → filled at bar T+1's open. This is the earliest realistically executable price.
Other forms of look-ahead bias we guard against
- Using bar T's high/low to trigger stops — these are only known after the bar closes
- Indicators computed with a "future" period (e.g., a centered moving average)
- Normalization using the full dataset's min/max rather than rolling min/max
- Strategy parameters optimized on the full period, then tested on the same period
- Earnings surprise signals using actual EPS before the announcement date
Survivorship Bias
Overstatement RiskSurvivorship bias occurs when a backtest only includes stocks that are currently listed on the exchange. Companies that went bankrupt, were acquired, or were delisted during the test period are excluded — even though they were valid trading candidates at the time. The result is that historical returns look much better than they actually were, because all the "losers" have been silently removed from the dataset.
Quantified impact on the Hang Seng Index universe:
~15–20%
of HSI component history contains at least one delisted stock in a 10-year backtest
~3–8%
typical annual return overstatement from survivorship bias in momentum strategies
100%
of our backtests include delisted securities in the historical universe
✗ Biased universe
Only test on the 500 stocks currently in the S&P 500. All past bankruptcies, delistings, and removals are excluded. Return bias: +3% to +8% per year.
✓ Our approach
The universe at each historical date includes all stocks that were listed at that date — including those subsequently delisted or bankrupt. Point-in-time universe construction.
Overfitting (Curve-Fitting) Bias
Most CommonOverfitting occurs when a strategy has been optimized so heavily on historical data that it has effectively "memorized" the past rather than learned a generalizable rule. A strategy with 12 parameters, all tuned on 3 years of data, will show spectacular historical results — and fail immediately in live trading.
How we detect and prevent overfitting
We prefer strategies with fewer than 5 free parameters. Every additional parameter doubles the risk of curve-fitting.
We perturb each parameter ±10–20% and measure the impact on returns. Robust strategies show smooth, flat surfaces — not sharp peaks.
We divide the historical period into 5 non-overlapping folds and measure consistency of results across all folds.
A backtest with fewer than 50 trades provides insufficient statistical evidence. We require at least 100 completed round-trip trades.
We randomly shuffle the order of trades 10,000 times to measure return distribution and worst-case scenario under random sequencing.
Selection Bias
Often OverlookedSelection bias occurs when the choice of which instruments to backtest is influenced — consciously or not — by knowledge of how those instruments performed historically. Testing a momentum strategy only on the biggest winners of the last decade will produce a biased result.
Instrument Selection
We define the trading universe before looking at results. Universe criteria are based on objective filters: market cap, liquidity, sector — not historical performance.
Time Period Selection
We use the full available history for each instrument, not a cherry-picked period. If we test 2010–2024, we include the 2015 China crash, 2018 correction, and 2020 COVID crash.
Strategy Selection
We document all strategies tested, not just the ones that worked. Publication bias (only showing winners) is a form of selection bias.
Benchmark Selection
The benchmark for comparison is defined before testing begins. We do not swap benchmarks after seeing results to make relative performance look better.
Optimization Bias
Parameter RiskOptimization bias is a specific form of overfitting. When you run a grid search over hundreds of parameter combinations and pick the best performer, you are not finding the "true" optimal parameters — you are finding the parameters that happened to work best on that specific historical period due to random noise.
Illustration: Why "best" parameters are misleading
Our optimization rules
- ● Strategy parameters are set before running the in-sample backtest
- ● If optimization is used, it is performed only on the training set — never on the validation set
- ● We report the optimization surface (not just the peak) so readers can see robustness
- ● We prefer parameter values that lie on flat plateaus, not narrow peaks
- ● Walk-forward optimization: parameters are re-optimized periodically, simulating real adaptive management
Out-of-Sample Validation
Final GateOut-of-sample (OOS) testing is the most important validation step. After a strategy is developed and optimized on the training set, it is tested once on a completely separate holdout period. The OOS result cannot be used to further refine the strategy — if it is, the holdout is no longer truly out-of-sample.
Typical data split for a 15-year backtest
Strategy development
(20%)
(20%)
Walk-Forward Testing
Walk-forward testing is a more sophisticated form of OOS testing that simulates how a real trader would periodically re-optimize their strategy. Instead of one fixed training/test split, we use a rolling window: optimize on the first N bars, test on the next M bars, advance by M bars, and repeat.
Rolling Windows
We use 12-month optimization windows with 3-month walk-forward steps. Each window is independent.
Consistency Check
We measure the ratio of walk-forward performance to in-sample performance. Ratios above 50% indicate a robust strategy.
Reported Both
All reports show both in-sample and walk-forward (out-of-sample) results side by side for full transparency.
Bias Controls Summary
| Bias Type | Typical Impact | Our Control | Status |
|---|---|---|---|
| Look-Ahead | Very high — can double reported returns | Next-bar-open execution; event-driven engine | Controlled |
| Survivorship | +3–8% annual return overstatement | Point-in-time universe with delisted stocks | Controlled |
| Overfitting | Strategy fails in live trading | Parameter sensitivity; Monte Carlo; ≥100 trades | Controlled |
| Selection | Cherry-picked winners presented | Pre-defined universe; full history; all tests reported | Controlled |
| Optimization | False "optimal" parameters | Economic logic; walk-forward; flat plateau preference | Controlled |
| No OOS validation | In-sample results ≠ live results | 60/20/20 split; walk-forward testing | Controlled |