⚠️ Personal research and trading journal — not investment advice. The author does not provide licensed advisory services.
A backtest that spans one or two market cycles can tell you whether a method worked historically. A 20-year out-of-sample walk-forward test can tell you something rarer: whether the edge is structural.
In May 2026, after more than three years of development and testing, I ran the final validation on the contracting-base breakout method. The test covered 2006 through 2025 — two full market cycles, including the 2008 financial crisis, the 2020 COVID crash, the 2022 rate shock, and every correction in between.
The verdict: the method passed.
This is what the test was, what it found, and what it means.
Why walk-forward testing matters
Most backtests are curve-fit. You run an optimization, find settings that worked over the past decade, and call it a system. The problem: optimal settings for 2015–2025 may have been accidental. They worked because the market happened to behave a certain way during that window — not because the underlying logic is durable.
Walk-forward testing addresses this by simulating how the system would have run in real time:
1. Train on years 1–5. Find the best settings. 2. Lock those settings. Test on year 6 (out-of-sample). 3. Move the window forward. Train on years 2–6. Lock. Test on year 7. 4. Repeat until you've run the full 20-year range.
Each test year is genuinely out-of-sample — the system never sees it during training. The overall result is the uncontaminated forward performance across the full period.
The test ran six windows across the 2006–2025 range. Each window had a 5-year training period and a 1–2 year test period.
What the test found
All four system configurations passed:
| System | Mode | per-trade R | Notes |
|---|---|---|---|
| System W (Thai) | Same-day fill | +185% per-trade R | Best |
| System W (Thai) | Realistic next-open | +154% per-trade R | Passes |
| System W (US) | Same-day fill | +126% per-trade R | Passes |
| System W (US) | Realistic next-open | +96% per-trade R | Passes |
"Per-trade R" is the return expressed as a multiple of the initial risk. A +100% per-trade R means the system returned an average of 1× the amount risked per trade. The benchmark for a viable breakout system is any positive R after realistic fill assumptions.
The realistic next-open mode is the important one. Same-day fill assumes you get the exact breakout price — which almost never happens. Next-open assumes you enter the following morning at whatever the market opens, which is how a retail trader actually operates. All four configurations showed positive per-trade R in the realistic mode.
What changed at each window
The system settings that came out of training were not identical across all six windows. Position sizing parameters shifted slightly. Volume thresholds adjusted. But the core logic remained stable: contracting pullbacks (higher lows into the pivot) + volume pop on breakout day + RS≥80 universe.
The fact that settings drifted by 10–15% between windows but the system still passed each out-of-sample test is actually the most important finding. It means the edge is not in the specific parameter values — it's in the structural logic. Contracting price action followed by a volume pop at a new high works because of what it represents (supply exhaustion, institutional buying, momentum confirmation), not because of the exact threshold used to identify it.
What it does NOT tell you
A 20-year walk-forward test is the most rigorous validation I know how to run on a discretionary-systematic hybrid method. It is not infallible.
It doesn't guarantee future performance. Market structure changes. The 2020s US market has a different character than the 2010s — shorter bases, more algo-driven price action. The Thai market has changed too. The test validates the method over historical periods; it's evidence, not a guarantee.
It doesn't cover the live trading gap. From Nov 2026, the method runs on real capital for the first time. Real positions, real fills, real psychological pressure. Paper trading is a proxy; real trading is different in ways that matter. The first 6–12 months of live trading will be the next real test.
Trade count dropped ~50% from the locked configuration. The strictest filter combination — the one running in paper trading — produces roughly half as many trades as a loose baseline. This was an intentional decision: fewer, higher-conviction trades rather than chasing every signal. The cost is that bad luck on any single trade hurts more. Position sizing (max 0.25% risk per trade, kill switch at -10% portfolio) manages this.
What it means for the method
The locked configuration runs two systems:
- System W (Thai): contracting-base breakout, partial 2R at first leg, rest on MA21 trail. Thai universe, SET50/100.
- System W (US): same logic, US RS≥80 universe, longer-base filter applied.
Each system runs at 0.25% portfolio risk per trade. Maximum 5 concurrent positions. Kill switch: -10% monthly drawdown triggers halt; -15% triggers review; -25% triggers full shutdown.
The walk-forward result means I can run these with confidence that the edge existed over 20 years of real market data. The paper trading period (through Jan 2027) is generating a clean, real-time record. The live launch builds on both.
This is the end of the research phase. The next test is the market.
Track. Study. Wait. Strike.
Personal research and trading journal — not investment advice. The author does not provide licensed advisory services. — MOEasymmetry