# BTC MLP Deep Sweep - 2026-06-18

## Scope

Goal: run a deeper threshold-focused sweep for BTC MLP presets after Pine/Python
score and trade parity were validated.

Approach:

- Keep existing MLP weight artifacts fixed.
- Sweep thresholds/configs around current winners and artifact-recommended
  thresholds using `tools/run_mlp_deep_sweep.py`.
- Rank by canonical optimizer metrics plus drawdown/P&L-DD, subperiod behavior,
  WFO behavior, OOS behavior where available, and threshold fragility.
- Do not promote candidates that improve only one dimension while worsening the
  generalization profile.

Runs:

```bash
.venv/bin/python tools/run_mlp_deep_sweep.py --timeframes 6H 8H 12H 1D --samples 10000 --top-k 2000
.venv/bin/python tools/run_mlp_deep_sweep.py --timeframes 4H --samples 5000 --top-k 2000
```

Generated CSVs are intentionally under ignored paths:

- `results/sweeps/optimization_sweep_strategy_mlp_scores_COINBASE_BTCUSD_{TF}.csv`
- `results/reports/mlp_deep_sweep_summary_all.csv`

## Results

Current metrics below are re-evaluated on the current tracked data and may differ
from older winner CSV metrics.

| TF | Decision | Current summary | Best candidate summary | Reason |
| --- | --- | --- | --- | --- |
| 4H | Leave current | 42 trades, 1398.9% P&L, -79.1% DD, Calmar 0.071, P&L/DD 0, 4 fragile bars | 58 trades, 1066.3% P&L, -73.9% DD, Calmar 0.069, P&L/DD 0, 4 fragile bars | Threshold-only search did not fix high drawdown or P&L/DD. Needs weight/model work, not a winner swap. |
| 6H | Leave current | 159 trades, 4107.8% P&L, -32.0% DD, Calmar 0.375, P&L/DD 128.4, WFO min 0.198, 0 fragile bars | Incumbent remained best strict candidate | Strongest incumbent. No replacement improved the full profile. |
| 8H | Leave current | 55 trades, 410.1% P&L, -46.2% DD, Calmar 0.147, P&L/DD 0, WFO min -0.267, 1 fragile bar | 63 trades, 198.6% P&L, -38.3% DD, Calmar 0.118, P&L/DD 5.19, WFO min 0.216, 0 fragile bars | Candidate improves drawdown/P&L-DD and WFO, but gives up too much P&L and Calmar. Review only. |
| 12H | Leave current | 83 trades, 1204.8% P&L, -57.6% DD, Calmar 0.293, P&L/DD 0, WFO min 0.0069, 7 fragile bars | 145 trades, 2078.6% P&L, -58.6% DD, Calmar 0.350, P&L/DD 0, WFO min -0.534, 0 fragile bars | Best ranked candidate worsens WFO worst fold and still has zero P&L/DD. |
| 1D | Leave current for now | 37 trades, 593.6% P&L, -31.6% DD, Calmar 0.838, P&L/DD 18.8, 1 fragile bar | 57 trades, 332.8% P&L, -18.9% DD, Calmar 1.031, P&L/DD 17.6, WFO min 2.013, 0 tracked-data fragile bars | Candidate is a genuine tradeoff: better DD/Calmar/WFO, slightly worse P&L/DD, much lower P&L. TV export still showed one 0.05-fragile bar for the first candidate; fully TV-safe alternatives gave up more performance. Do not promote without user preference for lower drawdown over return. |

## Validation

Fast tests:

```bash
.venv/bin/python -m pytest tests/ -q --ignore=tests/test_acceptance_mlp.py
# 36 passed
```

Current MLP score parity against refreshed TradingView exports:

| TF | TV export | Weights | Result |
| --- | --- | --- | --- |
| 4H | `data/mlp/COINBASE_BTCUSD, 240.csv` | 4H | PASS, max delta 0.000000, 0 side disagreements, 6 fragile bars |
| 6H | `data/mlp/COINBASE_BTCUSD, 360.csv` | 6H | PASS, max delta 0.000000, 0 side disagreements, 1 fragile bar |
| 8H | `data/mlp/COINBASE_BTCUSD, 480.csv` | 8H | PASS, max delta 0.000000, 0 side disagreements, 1 fragile bar |
| 12H | `data/mlp/COINBASE_BTCUSD, 720.csv` | 12H | PASS, max delta 0.000000, 0 side disagreements, 2 fragile bars |
| 1D | `data/mlp/COINBASE_BTCUSD, 1D.csv` | 12H alias | PASS, max delta 0.000000, 0 side disagreements, 1 fragile bar |

No winner CSV changed, so Pine preset regeneration was not required.

## Continuation Plan

1. Run a broader 4H and 8H pass only if lower drawdown is worth sacrificing P&L,
   because threshold-only search found safer but weaker candidates.
2. For 4H, prioritize retraining or alternate weight selection; threshold-only
   sweeps did not solve the zero P&L/DD profile.
3. For 1D, decide explicitly whether the objective is lower drawdown/WFO strength
   or higher total return/P&L-DD before promoting a tradeoff candidate.
4. If any winner changes, rerun `tools/generate_pine_mlp_presets.py`, re-export
   TradingView scores, and rerun `tools/check_mlp_parity.py` for the changed TF.
