Post-mortem

Each closed trade is decomposed into a cause — SL caught reversal, entry wrong from start, peer drag, regime mismatch. The data feeds an evolutionary loop: rules that survive the live test are kept, the rest are discarded.

Volume & headline

Where the lab stands

Aggregates over every trade closed by the live bots. Win rate, sum of % P&L (not portfolio-compounded), and the window covered.

Trades
Win rate
P&L sum
Sum of % per trade
Bots tracked
MFE vs MAE

Wins finish clean. Losses leave money behind.

For every trade we reconstruct the max favorable excursion (best gain reached) and max adverse excursion (deepest drawdown). The asymmetry below is what motivates the break-even stop hypothesis tested on sol_btc_magnet.

Cause distribution

Why the trades end the way they do

Rules-based classifier v1 — assigns one cause per trade in priority order. Confidence shown as average across the bucket. unclassified = trade didn't match any clear pattern (yet).

Per bot

Who's doing what

Each bot's dominant failure (or success) mode. Bots are sorted by cumulative P&L. The BE-stop pill marks bots that have the break-even rule active in live.

Bot N WR P&L sum Avg Top cause
Evolutionary loop

Active rules

Each conditional rule activated in live is registered here with its hypothesis and the cohort comparison before vs after activation. With ~1-3 trades/week/bot, a defensible verdict needs roughly 50+ trades post-activation — earlier readings are flagged insufficient or weak.

Hypothesis

Break-even stop

Naïve simulation : if every sl_caught_reversal trade had been exited at break-even instead of running into the stop. Caveat below — the realistic backtest in scripts/backtest_be_stop.py shows a smaller (but still positive) delta when accounting for wins cut too early.