Files
trade-kuns/docs/specs/2026-06-10-grid-bot-design.md
Claude b5dd953afc feat: ATR-GridBot mit Regime-Filter — Walk-Forward, Gate nicht bestanden
3 fixe Varianten (spacing 1.0/1.5×ATR, ADX<20/15): OOS-PF 0.87/1.03/0.94.
Grid-Stops bei Range-Breakdowns fressen die TP-Gewinne — kein Paper-Deploy.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 06:43:38 +00:00

2.8 KiB
Raw Blame History

trade-kuns — ATR-GridBot mit Regime-Filter (Design)

Datum: 2026-06-10 Status: Umsetzung Phase Backtest (User-Entscheidung: Walk-Forward-Gate vor Paper-Lauf) Lehren aus krypto-kuns-GridBot v1: Spacing zu eng → Fees fraßen Profit · Level-Chasing/Rebalance-Flapping · kein Regime-Bewusstsein (kaufte in fallende Messer)

1. Strategie (long-only Spot, je Pair unabhängig)

Aktivierung (auf 4h-Close, kein aktives Grid):

  • ADX(14, 4h) < adxMax (Seitwärtsregime — komplementär zum Trend-Bot, der ADX ≥ 20 verlangt)
  • Center C = Close, Spacing S = spacingAtrMult × ATR(14, 4h) — eingefroren für die Grid-Lebensdauer (kein Chasing)
  • N Buy-Levels bei C k·S (k = 1…N), Budget je Level = (Equity / 4 Pairs) / N; unter 10 USDT keine Aktivierung

Fills (auf 15m):

  • Sells zuerst, dann Buys — ein im selben 15m-Bar gekaufter Lot kann nicht im selben Bar verkaufen (pessimistisch, keine Intrabar-Reihenfolge-Annahme)
  • Buy: Low ≤ Level-Preis und Level frei → Fill zum Level-Preis (+ Slippage + Fee)
  • Take-Profit: High ≥ Level-Preis + S → Verkauf genau ein Spacing über dem Einstand; Level wird wieder frei (Re-Buy beim nächsten Dip)

Deaktivierung (auf 4h-Close, alle Lots werden zum Close glattgestellt, grid_stop):

  • Range-Breakdown: Close < C (N+1)·S (harter Stop des gesamten Grids)
  • Range-Ausbruch oben: Close > C + (N+1)·S (Re-Center beim nächsten Aktivierungs-Check)
  • Trend setzt ein: ADX ≥ adxMax + 5 (Hysterese gegen Flapping)

Danach ist Re-Aktivierung an jedem späteren 4h-Close möglich (neues Center).

Fixe A-priori-Parameter (keine Grid-Suche — die hat beim Trend-Bot 2.58× Overfitting erzeugt): spacingAtrMult 1.0 · gridLevels 4 · adxMax 20 · ATR/ADX-Periode 14 · Fees 0.1 % + 5 bps Slippage je Seite (4h-ATR ≈ 13 % → Spacing schlägt die ~0.3 % Round-Trip-Kosten strukturell)

2. Umsetzung

  • src/server/backtest/grid.tsrunGridBacktest(candles15ByPair, cfg): BacktestResult. Eigener Lot-Ledger (mehrere Lots je Pair — Portfolio kann nur eine Position je Pair), identische Fee/Slippage-Mathematik, R-Multiple gegen Grid-Stop-Distanz. 15m-Timeline + 4h-Erkennung wie runner.ts.
  • exitReason erweitert um 'grid_tp' | 'grid_stop'.
  • src/server/scripts/grid-walkforward.ts — wie rotation-walkforward.ts: fixe Params, buildWindows + aggregateOos + Gate, Persistenz in backtest_runs (kind grid-walkforward).
  • Gate unverändert (§5 der Haupt-Spec). Besteht das Grid das Gate, folgt die Paper-Integration als zweite Engine; fällt es durch, ist das ein legitimes Ergebnis.

3. Tests

Aktivierung nur bei ADX < adxMax · Fill bei Low-Touch · TP bei High-Touch (nicht im Entry-Bar) · Breakdown liquidiert alles · Oszillation zwischen zwei Levels ist nach Fees profitabel bei S = 1×ATR · Determinismus.