BTV Backtesting Validation Checklist
The 20 things to verify before trusting any backtest
Learning Objectives
- •Learn a systematic checklist for validating backtest results
- •Understand common backtesting errors and biases
- •Build habits that prevent false confidence in strategies
Explain Like I'm 5
Most backtests are wrong. Not because the code is buggy (though it might be), but because of subtle biases that inflate results. This lesson is a checklist of everything that can go wrong — and how to verify each one.
Think of It This Way
Like a pilot's preflight checklist. You don't skip items because "it was fine last time." Every flight, every backtest — you go through the entire list. This discipline prevents crashes.
1The Validation Checklist
2The Five Most Dangerous Biases
3The "Smells" of a Bad Backtest
4The Realistic Backtest Setup
Key Formulas
Slippage-Adjusted Return
Gross return minus slippage (s) per trade times number of trades. High-frequency strategies are especially sensitive to slippage — small per-trade costs compound rapidly.
Hands-On Code
Backtest Validation Checker
import numpy as np
def validate_backtest(results, config):
"""Systematic backtest validation checklist."""
checks = []
n_trades = results['total_trades']
checks.append(('Sufficient trades (>300)', n_trades > 300, n_trades))
checks.append(('Walk-forward used', results.get('walk_forward', False), ''))
pbo = results.get('pbo', 1.0)
checks.append(('PBO < 0.25', pbo < 0.25, f'{pbo:.3f}'))
checks.append(('Slippage modeled', config.get('slippage', 0) > 0, ''))
checks.append(('Commission included', config.get('commission', 0) > 0, ''))
years = results.get('years', 0)
checks.append(('Backtest > 3 years', years > 3, f'{years:.1f} years'))
print("=== BACKTEST VALIDATION ===")
all_pass = True
for name, passed, detail in checks:
status = '[PASS]' if passed else '[FAIL]'
print(f" {status} {name}: {detail}")
if not passed:
all_pass = False
verdict = "VALIDATED" if all_pass else "FAILED"
print(f"\nVerdict: {verdict}")
return all_passSystematic validation prevents deploying strategies based on flawed backtests. Every item on this checklist has caused someone to lose money when ignored.
Knowledge Check
Q1.Your backtest shows incredible results but slippage wasn't modeled. What happens when you add realistic slippage?
Assignment
Go through the full validation checklist for your strategy. Document each check's result. If any fail, fix them and re-run the backtest.