Phase C v2: Practical Win-Rate Reversal Risk Backtest Results
Run date: 2026-04-13
Period: 2016-01-01 to 2025-06-30 (OOS from 2024-01-01)
Universe: v5.1 optimized filter
Patterns: bullish_engulfing, outside_reversal, 2b_reversal, 3bar_flush_reclaim
Matrix: 4 patterns x 5 SL x 5 TP = 100 configs
Max hold: 120 calendar days
Design Changes vs v1
| Aspect | v1 | v2 |
|---|
| Stop-loss | 6 variants incl. intraday & fixed 1% | 5 variants, all close-based, no ultra-tight |
| Exit/TP | 7 variants incl. 5R, 10R wide | 5 variants, max 3R fixed + runner/trail |
| Max hold | 180-200 days | 120 days |
| Scoring | expectancy x sqrt(N) | balanced: exp x sqrt(N) x (1 + wr_bonus) |
| Goal | Raw expectancy | Practical win rate (40-60%) with positive expectancy |
Test Matrix Summary
- Total configs tested: 100
- Configs with trades: 100
- Total trades across all configs: 59600
- Avg trades per config: 596.0
- Configs with n>=30: 100
- Avg win rate across configs: 28.9%
- Configs with WR in 40-60% band: 0
Best Configs for Target Win-Rate Band (40-60%)
This is the primary result section. These configs balance practical tradeability with positive expectancy.
No configs achieved win rate in the 40-60% band.
Closest to 50% win rate:
| Config | WR | Exp(R) | PF | N |
|---|
| outside_reversal_SL-A_TP-A | 38.1% | 0.215 | 1.22 | 362 |
| outside_reversal_SL-B_TP-A | 37.9% | 0.046 | 1.05 | 362 |
| 3bar_flush_reclaim_SL-E_TP-A | 37.8% | -0.028 | 0.98 | 714 |
| outside_reversal_SL-B_TP-C | 37.6% | 0.124 | 1.14 | 362 |
| bullish_engulfing_SL-E_TP-A | 37.5% | 0.079 | 1.05 | 517 |
| outside_reversal_SL-C_TP-A | 37.3% | 0.132 | 1.15 | 362 |
| outside_reversal_SL-D_TP-A | 37.3% | 0.073 | 1.08 | 362 |
| outside_reversal_SL-A_TP-C | 37.0% | 0.588 | 1.60 | 362 |
| outside_reversal_SL-C_TP-C | 37.0% | 0.367 | 1.43 | 362 |
| 3bar_flush_reclaim_SL-C_TP-C | 37.0% | 0.148 | 1.18 | 714 |
Top 20 Configs (by Balanced Score)
| Rank | Config | Pattern | SL | TP | N | Exp(R) | WR | PF | Sharpe | MaxDD(R) | Bars | Bal.Score |
|---|
| 1 | bullish_engulfing_SL-E_TP-E | bullish_engulfing | SL-E | TP-E | 517 | 0.945 | 8.3% | 1.39 | 0.23 | -268.48 | 14 | 21.48 |
| 2 | 3bar_flush_reclaim_SL-E_TP-E | 3bar_flush_reclaim | SL-E | TP-E | 714 | 0.800 | 7.7% | 1.32 | 0.19 | -435.02 | 14 | 21.38 |
| 3 | bullish_engulfing_SL-E_TP-D | bullish_engulfing | SL-E | TP-D | 517 | 0.807 | 18.2% | 1.38 | 0.40 | -128.43 | 8 | 18.34 |
| 4 | bullish_engulfing_SL-A_TP-C | bullish_engulfing | SL-A | TP-C | 517 | 0.494 | 36.2% | 1.52 | 0.41 | -52.04 | 14 | 16.86 |
| 5 | outside_reversal_SL-A_TP-C | outside_reversal | SL-A | TP-C | 362 | 0.588 | 37.0% | 1.60 | 0.31 | -64.24 | 14 | 16.77 |
| 6 | bullish_engulfing_SL-A_TP-D | bullish_engulfing | SL-A | TP-D | 517 | 0.687 | 29.2% | 1.70 | 0.38 | -57.79 | 13 | 15.63 |
| 7 | outside_reversal_SL-E_TP-E | outside_reversal | SL-E | TP-E | 362 | 0.769 | 8.8% | 1.32 | 0.21 | -171.31 | 13 | 14.64 |
| 8 | bullish_engulfing_SL-D_TP-C | bullish_engulfing | SL-D | TP-C | 517 | 0.429 | 35.0% | 1.45 | 0.18 | -92.51 | 21 | 14.62 |
| 9 | bullish_engulfing_SL-C_TP-D | bullish_engulfing | SL-C | TP-D | 517 | 0.637 | 31.1% | 1.78 | 0.30 | -52.08 | 15 | 14.49 |
| 10 | bullish_engulfing_SL-E_TP-C | bullish_engulfing | SL-E | TP-C | 517 | 0.388 | 35.6% | 1.23 | 0.34 | -74.09 | 6 | 13.24 |
| 11 | outside_reversal_SL-A_TP-D | outside_reversal | SL-A | TP-D | 362 | 0.693 | 28.2% | 1.65 | 0.26 | -80.44 | 13 | 13.19 |
| 12 | bullish_engulfing_SL-C_TP-E | bullish_engulfing | SL-C | TP-E | 517 | 0.541 | 16.8% | 1.54 | 0.21 | -106.56 | 28 | 12.31 |
| 13 | bullish_engulfing_SL-D_TP-D | bullish_engulfing | SL-D | TP-D | 517 | 0.533 | 30.6% | 1.60 | 0.22 | -96.90 | 15 | 12.11 |
| 14 | bullish_engulfing_SL-B_TP-D | bullish_engulfing | SL-B | TP-D | 517 | 0.530 | 30.6% | 1.60 | 0.39 | -51.64 | 15 | 12.04 |
| 15 | bullish_engulfing_SL-B_TP-C | bullish_engulfing | SL-B | TP-C | 517 | 0.319 | 35.2% | 1.35 | 0.32 | -45.71 | 15 | 10.89 |
| 16 | bullish_engulfing_SL-A_TP-A | bullish_engulfing | SL-A | TP-A | 517 | 0.311 | 36.9% | 1.33 | 0.45 | -50.87 | 10 | 10.60 |
| 17 | outside_reversal_SL-C_TP-C | outside_reversal | SL-C | TP-C | 362 | 0.367 | 37.0% | 1.43 | 0.24 | -45.33 | 18 | 10.49 |
| 18 | outside_reversal_SL-C_TP-D | outside_reversal | SL-C | TP-D | 362 | 0.521 | 31.8% | 1.65 | 0.22 | -52.06 | 16 | 9.92 |
| 19 | bullish_engulfing_SL-D_TP-A | bullish_engulfing | SL-D | TP-A | 517 | 0.290 | 35.2% | 1.31 | 0.18 | -89.12 | 18 | 9.88 |
| 20 | bullish_engulfing_SL-B_TP-E | bullish_engulfing | SL-B | TP-E | 517 | 0.415 | 16.1% | 1.38 | 0.17 | -132.10 | 26 | 9.43 |
Best Config Per Pattern (by Balanced Score)
bullish_engulfing
- Best config: bullish_engulfing_SL-E_TP-E
- SL: SL-E (fixed_2pct)
- TP: TP-E (structure_break)
- Trades: 517 (IS: 357, OOS: 160)
- Expectancy: 0.945R (IS: 1.138, OOS: 0.513)
- Win rate: 8.3%
- Profit factor: 1.39
- Sharpe: 0.23
- Max DD: -268.48R
outside_reversal
- Best config: outside_reversal_SL-A_TP-C
- SL: SL-A (pattern_low_close_break)
- TP: TP-C (partial_runner)
- Trades: 362 (IS: 247, OOS: 115)
- Expectancy: 0.588R (IS: 0.756, OOS: 0.227)
- Win rate: 37.0%
- Profit factor: 1.60
- Sharpe: 0.31
- Max DD: -64.24R
2b_reversal
- Best config: 2b_reversal_SL-D_TP-A
- SL: SL-D (swing_low_close_break)
- TP: TP-A (2R_fixed)
- Trades: 791 (IS: 570, OOS: 221)
- Expectancy: 0.138R (IS: 0.078, OOS: 0.294)
- Win rate: 34.8%
- Profit factor: 1.16
- Sharpe: 0.17
- Max DD: -46.47R
3bar_flush_reclaim
- Best config: 3bar_flush_reclaim_SL-E_TP-E
- SL: SL-E (fixed_2pct)
- TP: TP-E (structure_break)
- Trades: 714 (IS: 502, OOS: 212)
- Expectancy: 0.800R (IS: 1.072, OOS: 0.156)
- Win rate: 7.7%
- Profit factor: 1.32
- Sharpe: 0.19
- Max DD: -435.02R
Stop-Loss Variant Comparison
| SL | Name | Avg Exp(R) | Avg WR | Avg PF | Avg MaxDD(R) | Total Trades |
|---|
| SL-A | pattern_low_close_break | 0.252 | 29.1% | 1.25 | -77.41 | 11920 |
| SL-B | pattern_low_minus_1pct | 0.163 | 29.7% | 1.17 | -66.46 | 11920 |
| SL-C | pattern_low_minus_2pct | 0.215 | 30.1% | 1.25 | -59.48 | 11920 |
| SL-D | swing_low_close_break | 0.176 | 29.8% | 1.19 | -73.70 | 11920 |
| SL-E | fixed_2pct | 0.152 | 26.0% | 1.07 | -196.66 | 11920 |
Exit Variant Comparison
| TP | Name | Avg Exp(R) | Avg WR | Avg PF | Avg MaxDD(R) | Total Trades |
|---|
| TP-A | 2R_fixed | 0.104 | 36.2% | 1.12 | -73.03 | 11920 |
| TP-B | 3R_fixed | 0.133 | 30.5% | 1.14 | -70.58 | 11920 |
| TP-C | partial_runner | 0.193 | 35.5% | 1.21 | -74.31 | 11920 |
| TP-D | trailing_only | 0.253 | 28.0% | 1.26 | -93.03 | 11920 |
| TP-E | structure_break | 0.274 | 14.5% | 1.21 | -162.78 | 11920 |
Win Rate Distribution Across Configs
| WR Band | # Configs | Avg Exp(R) | Avg PF |
|---|
| 0%-10% | 4 | 0.526 | 1.22 |
| 10%-20% | 20 | 0.211 | 1.18 |
| 20%-30% | 13 | 0.199 | 1.20 |
| 30%-40% | 63 | 0.163 | 1.18 |
Comparison to v1 (Prior Experiment)
v1 Findings (for reference)
- Best config: 3bar_flush_reclaim_SL-3_TP-6 (Exp: 3.013R, PF: 4.11, WR: ~2-3%)
- Runner-up: bullish_engulfing_SL-3_TP-6 (Exp: 3.453R, PF: 4.58)
- Dominant SL: SL-3 (fixed_1pct) - ultra-tight, very low win rate
- Dominant TP: TP-6 (structure_break) - long hold, rare but large wins
- Problem: 2-3% win rate is psychologically and practically very difficult to trade
v2 Changes
- Removed SL-3 (fixed 1%) which dominated v1 but produced impractical win rates
- All stops close-based (avoids intraday whipsaw noise)
- Removed 5R and 10R exit targets (reduced overlong holding)
- Reduced max hold from 180 to 120 days
- Added balanced scoring that rewards 35-65% win rate band
v2 Results vs v1
- v2 best (balanced): bullish_engulfing_SL-E_TP-E (Exp: 0.945R, WR: 8.3%, PF: 1.39)
- v2 average win rate: 28.9% (vs v1’s avg dominated by ~2-3%)
- v2 configs in 40-60% band: 0
IS/OOS Consistency
- IS/OOS expectancy correlation: -0.05 (n=100 configs)
- Avg IS exp: 0.225R
- Avg OOS exp: 0.116R
Caveats
- Backtest uses next-bar open entry - real fills may differ (slippage, gaps)
- Close-based stops avoid intraday noise but can gap through in fast moves
- Biotech universe is inherently volatile - even ‘practical’ configs will have streaks
- R-multiple metrics assume 1% risk sizing; actual P&L depends on position sizing
- No transaction costs or slippage modeled
- Cooldown of 90 days between signals for same symbol