6.2.1Backtesting Frameworks

Understand backtesting methodology

2,913 words13 min readdifficulty · medium1 backlinks

Backtesting is the process of testing a trading strategy on historical data to evaluate how it would have performed in the past. It's like running a controlled experiment on your trading idea before risking real money.

The core insight: Past market data is our only laboratory. We can't experiment with real money repeatedly, but we can replay history as many times as needed.

Core Components of Backtesting Methodology

Why Each Component Exists

Historical Data = The foundation. Without accurate past prices, your backtest is testing fiction, not reality.

Strategy Rules = The hypothesis. "If RSI < 30, buy" is a testable claim about market behavior.

Execution Model = The reality check. In real trading, you don't get filled at the exact closing price with zero costs. Ignoring this makes your backtest dangerously optimistic.

Performance Metrics = The measurement tools. You need standardized ways to compare "Strategy A made 50% but lost 30% in one month" vs "Strategy B made 40% with 5% max drawdown."

The Step-by-Step Backtesting Process

Why this order? Each step builds on the previous. You can't simulate trades without data, can't calculate realistic returns without costs, can't improve the strategy without analyzing what failed.

Detailed Breakdown

Step 1: Define Strategy Logic

Strategy logic specifies WHEN to enter, WHEN to exit, and HOW MUCH to trade.

Example Strategy: Moving Average Crossover

  • Entry: When 50-day SMA crosses above 200-day SMA (golden cross)
  • Exit: When 50-day SMA crosses below 200-day SMA (death cross)
  • Position Size: 100% of capital (full allocation)

Why explicit rules? Vague rules like "buy when momentum looks good" cannot be backtested. The computer needs precise mathematical conditions.

Step 2: Acquire & Clean Historical Data

Why this happens: Corporate actions! Infosys did a 5:1 stock split. The price didn't actually crash80%.

The Fix: Use adjusted prices that account for splits and dividends. The adjusted series would show smooth continuity: ₹249 → ₹248.

Why cleaning matters: If you don't adjust for splits, your backtest will show a massive "loss" on split dates and generate false signals.

Step 3: Simulate Trades (Walk-Forward)

This is the heart of backtesting. We step through history day-by-day, making decisions with only past data.

Data:

Day 1: Price = ₹100, 20-day MA = ₹98
Day 2: Price = ₹102, 20-day MA = ₹99
Day 3: Price = ₹98,  20-day MA = ₹100
Day 4: Price = ₹101, 20-day MA = ₹100

Simulation:

  • Day 1: Price (100) > MA (98) → BUY signal. Buy 100 shares at ₹100. Capital used: ₹10,000.

    • Why this step? We only know Day 1 data. We cannot peek at Day 2 prices yet.
  • Day 2: Price (102) > MA (99) → HOLD. Still in position.

    • Why this step? Signal hasn't changed. We maintain the position.
  • Day 3: Price (98) < MA (100) → SELL signal. Sell 100 shares at ₹98. Proceeds: ₹9,800. Loss: ₹200.

    • Why this step? The signal flipped. In walk-forward, we react when the condition changes.
  • Day 4: Price (101) > MA (100) → BUY signal. Re-enter with the ₹9,800 in cash: buy 97 shares (₹9,800 ÷ ₹101 ≈ 97.03, rounded down to whole shares). ₹100 stays as leftover cash.

    • Why this step? Signal is back to bullish. We re-enter with the remaining capital, and since we can only buy whole shares, we round down.

Key principle: Look-ahead bias is the fatal flaw where you accidentally use future information. Walk-forward prevents this—we strictly process data in chronological order.

Step 4: Apply Transaction Costs

Where: Transaction Costs=Brokerage+Slippage+Taxes+Impact Cost\text{Transaction Costs} = \text{Brokerage} + \text{Slippage} + \text{Taxes} + \text{Impact Cost}

Derivation from scratch:

Suppose you buy shares worth ₹100,000:

  • Brokerage: 0.03% on equity delivery = ₹30
  • STT (Securities Transaction Tax): 0.1% on buy side = ₹100
  • Slippage: You wanted ₹100 per share but got filled at ₹100.20 on 1,000 shares = ₹200 extra
  • Exchange fees + GST: ~₹50

Total cost on entry: ₹380

When you sell at ₹105,000 (5% gain):

  • Brokerage: ₹31.50
  • STT: 0.1% on sell = ₹105
  • Slippage: ₹210
  • Fees: ₹50

Total cost on exit: ₹396.50

Gross profit: ₹5,000
Net profit: ₹5,000 - ₹380 - ₹396.50 = ₹4,223.50

Actual return: 4.22% (not 5%)

Why this matters: A strategy showing 15% annual returns might show only 8% after costs. High-frequency strategies can be completely wiped out by transaction costs.

Step 5: Calculate Performance Metrics

Why these metrics?

Total Return alone is meaningless. "I made 100% return" — over what time? With how much risk?

Annualized Return standardizes time. 100% over 5 years (14.87% annual) is very different from 100% in 1 year.

Maximum Drawdown measures pain. A strategy with 50% return but 45% drawdown is emotionally unbearable. Most traders quit before recovery.

Sharpe Ratio measures risk-adjusted return. A strategy with 20% return and 30% volatility (Sharpe = 0.67) is worse than 15% return with 10% volatility (Sharpe = 1.5).

  • Peak at ₹12,000
  • Trough at ₹9,000
  • Drawdown = (9,000 - 12,000) / 12,000 = -25%

Why calculate this? Drawdown shows the worst-case experience. It answers: "How much of my peak wealth could I have lost?"

Step 6: Analyze Results & Iterate

Look for:

  • Regime changes: Did the strategy work 2010-2015 but fail 2020-2025? Markets evolve.
  • Overfitting: 100 rules perfectly fitted to past data will fail in future. Overfitting is curve-fitting to noise.
  • Sample size: 5 trades over 10 years is not statistically meaningful. You need enough trades to distinguish luck from skill.

Mistake 1: Look-Ahead Bias What it looks like: Using the full day's high/low to generate signals, when in real-time you only know the high/low after the day ends.

Why it feels right: "I'll buy if today's low is below ₹100." This seems logical.

The problem: At 9:15 AM, you don't know if the low will be ₹99 or ₹101. You can only check this condition at 3:30 PM, too late to buy "at the low."

The fix: Use previous day's data for signals, or intraday timestamps strictly in sequence.


Mistake 2: Survivorship Bias What it looks like: Backtesting only on stocks currently in NIFTY 50.

Why it feels right: "NIFTY 50 represents the best Indian companies."

The problem: Today's NIFTY 50 excludes companies that went bankrupt or were removed. Testing only survivors inflates returns artificially. Your strategy would have bought some of those delisted stocks in real-time.

The fix: Use historical index constituents (who was in NIFTY 50 in 2010, not just who is there now), or test on the full universe of stocks.


Mistake 3: Ignoring Transaction Costs What it looks like: Backtest shows 30% annual returns with daily trading.

Why it feels right: "In my simulation, I bought at ₹100 and sold at ₹103, making 3%."

The problem: Each trade costs ~0.5-1% in total (brokerage, taxes, slippage). Daily trading = ~250 trades/year = 125% cost! Returns evaporate.

The fix: Model realistic costs. If returns disappear after costs, the strategy is unusable.


Mistake 4: Overfitting to Noise What it looks like: "My strategy works when RSI is between 32.7 and 34.1, only Tuesdays, when volume is 1.3× average."

Why it feels right: Hyper-specific rules perfectly match past data peaks.

The problem: You've memorized history's randomness. Future markets won't have that exact pattern.

The fix: Keep strategies simple (Occam's Razor). Test on out-of-sample data. If performance colapses on new data, you overfit.

Monte Carlo Simulation in Backtesting

Advanced backtesting uses Monte Carlo simulation to test robustness. Instead of one linear path through history, we generate thousands of alternate histories by:

  1. Randomizing trade order
  2. Bootstrapping return samples
  3. Adding noise to entry/exit prices

Why? One historical path could be lucky. Monte Carlo shows the range of outcomes.

Conclusion: You got lucky. The median outcome was 8%. Don't expect 25% to repeat.

Connections

  • Forward-Testingvs-Backtesting — What backtesting cannot tell you
  • Parameter-Optimization — Finding best strategy settings without overfitting
  • Transaction-Cost-Models — Detailed cost modeling
  • Statistical-Significance-of-Backtest — When results are meaningful vs. lucky
  • Walk-Forward-Analysis — Advanced validation technique
  • Benchmark-Comparison — Comparing strategy returns to buy-and-hold
Recall Feynman Explanation (Age 12)

Imagine you invented a new cricket batting technique and want to know if it's actually good. You can't play 100 real matches to test it—that takes years! So instead, you watch recordings of 100 past matches and imagine: "If I used my technique in THAT situation, would I have hit a six or gotten out?"

Backtesting is exactly this for trading. You have an idea: "Buy when stock price drops10%." You rewind the market's "video" to 5 years ago and pretend to trade using your rule. You see: "Oh, I would have made money in 2020 but lost in 2022."

The tricks:

  1. No cheating: You can only use info available THEN, not stuff you learned later.
  2. Count the costs: In real cricket, you get tired, make mistakes. In real trading, you pay fees and sometimes can't buy at the exact price you want.
  3. Don't memorize the tape: If your technique works ONLY for that one delivery from Bumrah in the 2023 final, it's useless. It needs to work in general.

Backtesting helps you practice thousands of trades in days instead of years, so you learn if your idea is brilliant or just hopeful.


Flashcards

What is backtesting in trading? :: Testing a trading strategy on historical market data to evaluate how it would have performed in the past, before risking real money.

What are the four core components of a backtesting framework?
(1) Historical data, (2) Strategy rules (entry/exit logic), (3) Execution model (slippage, costs), (4) Performance metrics (returns, Sharpe ratio).
What is look-ahead bias in backtesting?
Using future information that wouldn't have been available at the time of decision-making, which artificially inflates backtest performance. Example: using the day's closing high to generate a morning buy signal.

What is survivorship bias in backtesting? :: Testing only on stocks that survived to the present, excluding delisted or bankrupt companies, which inflates returns because it ignores real losses from failed companies.

Why must backtesting include transaction costs?
Because real trading incurs brokerage, taxes, slippage, and impact costs. A strategy showing 20% returns before costs might show only 8% after costs, or even be unprofitable for high-frequency strategies.
What is walk-forward simulation in backtesting?
Processing historical data chronologically day-by-day, making decisions using only past information at each step, to prevent look-ahead bias and simulate real-time trading conditions.
What is maximum drawdown and why does it matter?
The largest peak-to-trough decline in portfolio value. It matters because it measures the worst pain investors would experience—a 40% drawdown causes most traders to quit emotionally before recovery.

What is overfitting in backtesting? :: Creating overly complex rules that perfectly match historical noise but fail on new data. It's like memorizing specific past price patterns instead of capturing real market dynamics.

Why use adjusted prices in backtesting?
To account for stock splits and dividends. Without adjustment, a 5:1 split looks like an 80% crash, generating false signals and unrealistic losses in the backtest.
What does Sharpe ratio measure?
Risk-adjusted return, calculated as (Return - Risk-Free Rate) / Volatility. It shows whether returns justify the risk taken—higher is better.
What is Monte Carlo simulation in backtesting?
Running thousands of simulations with randomized trade orders or bootstrapped returns to test strategy robustness and see the range of possible outcomes, not just one historical path.
How do you calculate net return in backtesting?
Net Return = Gross Return - Transaction Costs, where transaction costs include brokerage, slippage, taxes (STT), and impact cost on both entry and exit.
What is annualized return and why use it?
The equivalent constant yearly return over a period, calculated as (1+Total Return)(365/Days)1(1 + \text{Total Return})^{(365/\text{Days})} - 1. It standardizes returns across different time periods for fair comparison.
What is win rate in backtesting?
The percentage of trades that were profitable, calculated as (Winning Trades) / (Total Trades). However, high win rate doesn't guarantee profitability if losing trades are much larger.

Why is sample size important in backtesting? :: Small sample sizes (e.g., 5 trades over 10 years) cannot distinguish skill from luck. You need enough trades for statistical significance—typically hundreds to draw meaningful conclusions.

Concept Map

justifies

structured by

foundation

hypothesis

reality filter

report card

feeds

drives

adjusts fills for

produces

inform

refines

Backtesting on historical data

Past data as only laboratory

Backtesting Framework

Historical Data

Strategy Rules

Execution Model

Performance Metrics

Simulate Trades walk-forward

Analyze and Iterate

Hinglish (regional understanding)

Intuition Hinglish mein samjho

Chalo yaar, isko simple tarike se samajhte hain. Backtesting ka matlab hai apni trading strategy ko purane historical data pe test karna, taaki pata chale ki agar humne ye strategy pehle use ki hoti to kaisa perform karti. Socho isko ek flight simulator ki tarah — jaise pilot asli plane udane se pehle simulator mein practice karta hai, waise hi tum apni trading idea ko market ki purani history mein "uda ke" dekh sakte ho, bina ek bhi rupaya risk kiye. Core idea yahi hai ki past market data hi humari ek matra laboratory hai — hum baar-baar asli paise se experiment nahi kar sakte, par history ko jitni baar chahe replay kar sakte hain.

Ab ye kaam karta kaise hai? Iske chaar main components hote hain. Pehla, historical data — yani purane prices, volume, fundamentals, jo hamara "past environment" banate hain. Doosra, strategy rules — jaise "agar RSI 30 se neeche jaaye to buy karo", yani ek clear testable hypothesis. Teesra, execution model — yeh reality check hai, kyunki asli trading mein tumhe exact closing price pe fill nahi milta, slippage aur commission lagte hain. Agar ye ignore karoge to tumhara backtest jhoothi umeed dikhayega. Aur chautha, performance metrics — jaise returns, drawdown, Sharpe ratio, jo tumhari strategy ka "report card" hai jisse tum alag-alag strategies compare kar sako.

Ek important baat: data cleaning bahut zaruri hai. Jaise Infosys ka 5:1 stock split hua to price ₹1245 se ₹248 pe aa gaya — par ye actual crash nahi tha, sirf split tha. Isliye adjusted prices use karo warna backtest galat "loss" signals dega. Aur puri process ek fixed order mein chalti hai — strategy define karo, data clean karo, walk-forward tarike se din-by-din trades simulate karo (sirf past data use karke, taaki cheating na ho), phir costs add karo aur results analyze karo. Ye samajhna isliye matter karta hai kyunki jab tum asli paise lagaoge, to yahi discipline tumhe bade nuksaan se bachayega — pehle test, phir invest!

Test yourself — Backtesting Frameworks

Connections