# TR-Donchian — Results (vectorbtpro)

Article claim: ~100 hand-picked 30m trades at fixed 1.5R, win rate ~58%.
Measurement (base, pooled): 1,021 trades, 426 TP / 594 SL / 1 END, win rate 41.76%.

## Measurement

- Period: Dukascopy H1 Bid, 2017-01-02 to 2026-06-26 (59,132 / 59,131 bars).
- Split (predeclared): IS = exit before 2024-01-01, OOS = exit on/after it.
- Engine: vectorbtpro 2026.9.5 Portfolio.from_signals, closed-bar signals,
  next-bar entry at open, one position per symbol, stop-first on ambiguous bars.
  (Run used interpreter Python 3.13.9; canonical command is `py -3.11 test.py`.)
- Base: Donchian(20) alternating low-then-high event + SMA200 filter, SL at the
  opposite band, 1.5R.

| Scope | Trades | TP | SL | END | Win rate | IS (n/rate) | OOS (n/rate) |
| EURUSD | 544 | 213 | 331 | 0 | 39.15% | 391 / 38.6% | 153 / 40.5% |
| EURJPY | 477 | 213 | 263 | 1 | 44.75% | 344 / 46.2% | 132 / 40.9% |
| POOLED | 1,021 | 426 | 594 | 1 | 41.76% | 735 / 42.2% | 285 / 40.7% |

## Costs (fixed assumptions, bid-only data)

- Spread EURUSD 1.0 pip / EURJPY 1.2 pip, half-spread adverse on every fill.
- Commission $7/lot round trip ($0.07 at 0.01 lot); EURJPY converted to
  price at a fixed USDJPY 140 (simplification, recorded in summary.csv).
- Pooled base: breakeven win rate with costs 41.12%, effective R 1.43,
  R-denominated max drawdown 28.3R (trade-sequence units, no profit claim).

## Variants (one dimension each, both symbols)

- dc10 Donchian(10): pooled 2,028 trades, 40.03%.
- atrstop (fixed 2.0 x ATR14 stop): pooled 2,454 trades, 41.08%.
- Range across variants: 40.0-41.8%, all below the claimed ~58%.

## Limits

- H1 bid bars: intrabar paths unknown; a bar touching both TP and SL exits
  at SL (0 pooled base trades affected); fills are modeled, not observed.
- Spread, commission and USDJPY are fixed assumptions, not measured costs.
- Mechanical variant only: the article's hand-picked 30m sample and fixed stop
  cannot be reconstructed; no exact replication is claimed and no parity with
  the ~58% manual figure is asserted.
- No profitability claim is made.
- Audit trail: results/summary.csv + results/trades.csv (no raw bars).
- Engine receipt: test.py requires vectorbtpro and replays every ledger trade
  in the engine at exact fills (same-bar trades as single-trade receipts);
  see vbt_reconciled in summary.csv.
