Skip to content
GetProfitable
Search

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

  1. Pick one setup from Module 5. The pullback-to-level is the recommended first choice.
  2. Pick one instrument and one trading timeframe, with its context and entry timeframes.
  3. Pick a start date at least a year back for daily charts, or several months back for intraday.
  4. 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.

The win rate needed to break evenA falling curve: the more a winning trade pays relative to the amount risked, the smaller the share of trades that must win to break even.BREAKEVEN WIN RATE0%20%40%60%80%1:11:21:31:41:5REWARD-TO-RISK RATIO1:1 needs 50%1:2 needs 33.3%1:3 needs 25%breakeven win rate = 1 ÷ (1 + reward-to-risk)above the curve, wins more than cover losses
The win rate needed to break even. How often a method must win just to stay level, for each reward-to-risk ratio. At 1:1 half the trades must win, at 1:2 a third, and at 1:3 a quarter, because each win covers more losses.
The spread of outcomes behind an expectancyA histogram of forty trades: a tall block of small losses on the left, a low spread of larger wins on the right, and a line marking the average outcome.NUMBER OF TRADES051024 LOSSES, AVG −$20016 WINS, AVG +$600EXPECTANCY +$120−$400−$200$0+$200+$400+$600+$800PROFIT OR LOSS PER TRADEexpectancy = (40% × $600) − (60% × $200) = +$120 per trade
Expectancy: the average trade. Forty trades sorted by outcome: 24 small losses and 16 larger wins. Weighting each side by how often it happens gives the average result per trade, marked here by the dashed line at +$120.
One daily candle broken into four six-hour candlesA tall daily candle on the left and the four six-hour candles that make it up on the right, with dashed lines linking the day's open to the first candle and the day's close to the last.ONE DAILY CANDLEFOUR 6-HOUR CANDLEScloseopenhighlow=00:0006:0012:0018:00one dayThe same trading, summed up in one bar or spelled out in four.
How timeframes stack up. A daily candle is not different data, only coarser data: it opens where the first six-hour candle opened, closes where the last one closed, and its wicks reach the highest and lowest prices any of the four touched.