processGridCycle (Paritätstest gegen runGridBacktest), GridEngine mit DB-Recovery (grid_state/grid_lots, bot_state id=2), bot-Spalte in paper_trades/equity_snapshots, /api/grid, Dashboard-Panel. Bewusster Paper-Probelauf trotz Gate-Fail (User-Entscheidung 2026-06-10). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1.8 KiB
1.8 KiB
trade-kuns
Zwei Paper-Engines in einem Prozess (paper-only — keine Order-Ausführung):
- Trend-Bot (BTC/ETH/SOL/XRP_USDT): Donchian-20-Breakout auf 4h, EMA-200 + ADX-20-Filter, Chandelier-Trailing-Stop (3×ATR), long-only, fixe Parameter. State:
bot_stateid=1. - GridBot (nur XRP): No-Stop-ATR-Grid — 8 Levels, Spacing 3×ATR(4h), nie Verlust-Verkäufe, verlustfreies Re-Center bei leerem Grid außerhalb der Range. State:
bot_stateid=2,grid_state/grid_lots. Spec/Validierung:docs/walkforward-grid-2026-06-10.md.
Stack & Befehle
- Bun 1.3 + TypeScript, Drizzle (Postgres), Zod. Tests collocated (
*.test.ts). bun test·bun run start(Migration + Server) ·bun run backfill·bun run walkforward --fixed·bun run db:generate/db:migrate- Env:
DATABASE_URL(lokal:localhost:54320/tradekuns, siehe.env),PORT(default 8080)
Architektur
- Ein Code-Pfad:
live/process-cycle.ts(Live) undbacktest/runner.ts(Backtest) nutzen dieselben puren Funktionen (strategy/,engine/,indicators/) mit identischer Semantik — Paritätstest inprocess-cycle.test.tserzwingt das. Änderungen an Entry/Exit/Sizing immer in den geteilten Modulen, nie in Runner oder Live-Loop einzeln. - Live-State lebt in der DB (
bot_state.cursor_ts= letzte verarbeitete 15m-Candle); der 5-min-Loop ist cursor-idempotent, Restart-Recovery gratis. - Specs:
docs/specs/· Walk-Forward-Ergebnisse:docs/walkforward-ergebnisse-2026-06-09.md(Gate nicht bestanden → bewusster Paper-Probelauf, User-Entscheidung 2026-06-10)
Deployment
- https://trading.kuns.dev (Alias: trade.kuns.dev) · Coolify-App-UUID
j7xbvfezctcxmeuon6gh6v5z· Port 8080 - Redeploy:
redeploy j7xbvfezctcxmeuon6gh6v5z "msg" - DB im Container:
l8kogcggsc80sgcgk8kswww4:5432(shared-postgres über Coolify-Netz;connect_to_docker_network=true)