Backtesting by hand: the 50-chart exercise
Lesson 21 · about 10 min
Everything before this lesson was a claim. Engulfing candles trap sellers, levels wear down with touches, pullbacks in trends have favourable R:R. The only way to find out whether those claims hold in the market and timeframe you actually trade is to test them, and the cheapest honest test is done by hand, one chart at a time, before you risk anything. This lesson is the procedure.
Why by hand
Software backtests are faster and, for pattern-based setups, worse. A hammer-at-a-level-in-a-trend cannot be coded without dozens of arbitrary thresholds, and the code will find things your eye would never trade and miss things it would. Hand backtesting is slow, which is also its virtue: after fifty charts you have looked at fifty setups closely enough to recognize the next one live.
The goal is not a precise statistic. Fifty samples give you a win rate with a margin of error of roughly ±14 percentage points, which is wide. What fifty samples do give you is a rough magnitude (is this 30% or 60%?), a feel for what failures look like, and a habit of writing things down before you know the outcome.
The setup
- Pick one setup from Module 5. The pullback-to-level is the recommended first choice.
- Pick one instrument and one trading timeframe, with its context and entry timeframes.
- Pick a start date at least a year back for daily charts, or several months back for intraday.
- Turn on your platform's bar replay, or cover the right-hand side of the chart. This is not optional; it is the entire method.
The procedure, per chart
Advance the chart one candle at a time. Whenever you reach a point where the setup's conditions are met, stop and fill in a row before advancing:
| # | Date | Trend (context) | Level and its story | Signal candle | Entry | Stop | Target | R:R | Outcome | Realized R | Notes |
|---|
Every column before "Outcome" is filled in before you advance. Then advance until either the stop or the target is hit, record which, and compute the realized R (+R:R if the target hit, −1 if the stop hit, or the actual figure if you would have exited otherwise). Repeat until you have fifty rows.
Fifty rows will take several hours, spread over a week. Do not rush it and do not stop at twenty because the numbers look good or bad.
Cover here -> |
|
| | | ? ? ?
+---+ | |
| |+---+ |
+---+|###| |
| +---+ |
| +-- setup forms here; fill the row, THEN advance
The rules that keep it honest
- Level and trend are written down when the setup forms, from the chart as it looked then. Not from how it looks after you know the outcome.
- The stop and target are the Module 5 rules, applied mechanically. If you would "have moved the stop", you were not following the rules, and the test is of the rules.
- Every setup that meets the conditions gets a row, including the ugly ones you would rather skip. Skipping is a rule; if you want a skip rule, write it before starting and apply it every time.
- If a setup is ambiguous (was that a hammer? was that level really there?), record it as ambiguous and count it separately. A high ambiguity count means your definitions need tightening, which is itself a finding.
- No going back to change earlier rows.
Key idea: A hand backtest is a test of your rules, run on a chart whose future is hidden. The moment you can see the outcome before writing the row, the test is measuring your hindsight instead of your rules.
What to compute at the end
From the fifty rows:
- Win rate = wins ÷ (wins + losses).
- Average planned R:R.
- Average realized R per trade (sum of the Realized R column ÷ 50). This is your expectancy.
- Break-even win rate from the average R:R (Module 5, Lesson 4), and whether your actual win rate is above it.
- Longest run of consecutive losses. You will hit this run live at some point; the Risk Management course explains why it matters for sizing.
| Result | Example |
|---|---|
| Setups found | 50 |
| Wins | 21 |
| Losses | 29 |
| Win rate | 42% |
| Average planned R:R | 2.1 |
| Break-even win rate | 32.3% |
| Expectancy (realized R / trade) | +0.30R |
| Longest losing streak | 6 |
An expectancy of +0.30R on fifty samples is encouraging and not proof. It is enough to justify a second fifty, perhaps on a different instrument or period, and then a period of paper trading under live conditions. It is not enough to justify size.
Filter tests
The 50-chart exercise becomes much more useful when you run it twice with one variable changed. Ideas from earlier modules:
- Pattern alone versus pattern at a level (Module 2, Lesson 4).
- First touch of a level versus third-or-later touch (Module 3, Lesson 4).
- Context timeframe aligned versus not aligned (Module 4, Lesson 4).
- Confirmation entry versus anticipation entry (Module 5, Lesson 4).
Each comparison is a hundred rows and tells you something specific: whether the filter earns its keep. Keep the results. A folder of these comparisons is worth more than any course, including this one.
Reading failures
Spend as much time on the losses as the wins. For each loss, write one line: what happened? Common findings:
- The level was wrong (drawn too tightly, or an older level a little further away was the real one).
- The context timeframe was actually against the trade and you called it "undefined" to make the trade fit.
- The stop was inside the noise (buffer too small for that instrument).
- The setup was correct and it lost anyway, which is most of them and is normal.
The last category is the one to make peace with. A 42% win rate means 29 of your 50 rows are losses, and most of them are not mistakes. Trying to eliminate all losses by adding filters produces a system with three trades a year and no statistical meaning.
Try it: Start the exercise today with the pullback-to-level setup on one daily chart. Do ten rows this session. Notice how often you want to peek at the right-hand side of the chart, and notice how different the setup looks when you cannot.
Recap
- Hand backtest one setup, one instrument, one timeframe, with the future covered, fifty rows.
- Fill every column before advancing; the stop and target are mechanical; every qualifying setup gets a row; no revisions.
- Compute win rate, average R:R, expectancy and the longest losing streak; compare the win rate with break-even.
- Fifty samples give a rough magnitude, not a precise number; a positive result justifies more testing, not size.
- Run the exercise twice with one filter changed to find out whether the filter earns its keep; study losses as closely as wins.
See it drawn
Original diagrams for the ideas on this page. Illustrative, not real market data.