# D48 optimization execution plan — 2026-07-23

## Frozen scope

Production baseline remains `VolatilityBreakout 5.3-d48-shortgate`, 12 pairs,
5m, 2x isolated, 1000 USDT dry-run wallet, four maximum open trades,
0.035% fee per side, protections enabled, and no cache.

Only one factor may change in each experiment.

## P0 — RiskCapFix

- Baseline: deployed D48 sizing.
- Candidate: `VolatilityBreakoutRiskCap`.
- Single change: size with
  `max(3 * ATR / price * leverage, abs(stoploss))`.
- Training: `20260101-20260501`.
- Validation: `20260501-20260710`.
- Pass: identical trade paths; PF delta at least `-0.02`; drawdown and worst
  single-trade loss improve in both windows.
- Forward: baseline and candidate must start flat with identical wallets and
  pair universes; require at least 30 closed trades on both sides.
- Reject: any signal/exit divergence, risk metric regression, or unequal
  starting exposure.

## P1 — EntryOther

- Baseline: `entry_pricing.price_side=same`.
- Candidate: `entry_pricing.price_side=other`.
- Single change: entry order-book side.
- Causal denominator: matched opportunities where both bots submitted the same
  pair and direction within 90 seconds. Zero-fill timeouts are recovered from
  logs.
- Decision gate: at least 20 matched opportunities.
- Pass: higher matched fill rate and recovered-opportunity PnL exceeds crossing
  spread cost; paired fills and unmatched portfolio-path trades are reported
  separately.
- Reject: no matched fill-rate improvement or recovered PnL fails to cover
  crossing costs.

## P2 — EDGE exclusion

- Baseline: current 12-pair universe.
- Candidate: the same universe without `EDGE/USDT:USDT`.
- Single change: pair universe.
- Training and validation windows match P0.
- Pass: positive return and higher PF in both windows, no worse maximum
  drawdown, and at least 70% of baseline trade count.
- Reject: either window fails, or aggregate improvement is explained only by
  unstable slot reordering without repeated pair/cohort improvement.

## Execution sequence

1. Preserve and audit the P0 result archives and exact source hashes.
2. Continue P1 until its 20 matched-opportunity gate; do not use elapsed days as
   the stopping rule.
3. Run P2 outside the production host. If local Binance metadata access is
   unavailable, require explicit approval for an alternative network path.
4. After P1 concludes and two research slots are available, start a flat,
   equal-wallet P0 forward A/B. Production bot1 remains unchanged until the
   30-closed-trade gate passes.
