LLM-Trading-Fleet · MEXC Futures · Review + Umsetzungsplan
Das Konzept v3 ist als Software-Architektur stark. Als Trading-System optimiert es die falsche Sache: ~90 % „schnell live", ~10 % „messen ob überhaupt Edge da ist". Dieser Plan dreht das um — ohne die guten Kern-Entscheidungen anzufassen — und zieht, weil Echtgeld das Hauptziel ist, die Execution-Härtung von Anfang an mit.
01 · Mein Review — was bleibt, was ich anders mache
mandatory_stop als reduce-only Stop-Order auf MEXC — schützt auch bei totem Stack (Single-Worker = SPOF).builtin·http·mcp. script/sub-agent + Tool-Studio später (dort liegt die Sandbox-Frage).02 · Delta zum Konzept v3
| Thema | Konzept v3 | Plan v3.1 | Warum |
|---|---|---|---|
| Paper-Fills | ohne Fees, „bewusst einfach" | Fees + Funding + Slippage ab v1 | Sonst ist jeder Track-Record geschönt |
| Evaluation | Backtest zuletzt (Phase 6) | Forward-Test-Rig + Scorecard früh (Phase 2) | LLM-Backtest ist leakage-verseucht; Forward misst ehrlich |
| Risk | Risk-LLM (opus) + Guardrails | Deterministisches Sizing + Guardrails; LLM-Risk später | Reproduzierbar, billig, real-money-tauglich |
| Manager | LLM-Loop (sonnet) pro Position | Regel-Engine; LLM nur bei Invalidierung / langsamem Takt | LLMs sind schlecht in schneller Risikoführung; Kosten |
| Stops | Guardrail mandatory_stop | Exchange-native reduce-only Stop-Order | Schutz auch bei App-/Worker-Ausfall |
| Kill-Switch | Bot + global | + zweistufig: Halt vs. Flatten (pipeline-bypass) | Echtgeld braucht harten, un-umgehbaren Notaus |
| Services | web + worker (+ „später splittbar") | web + worker + provisioner + Postgres | Master-Key vom Tool-ausführenden Worker isolieren |
| Tool-Layer | 5 Provider + Tool-Studio + Sandbox | builtin·http·mcp; script/sub-agent später | Kleinste Angriffs-/Komplexitätsfläche bei unbewiesenem Edge |
| Marktdaten | MEXC direkt | Venue-abstrahiert (Daten ↔ Execution getrennt) | Testnet-Validierung + robuster gegen MEXC-Ausfall |
| Accounting | Mirror-Tabellen + Snapshots | + Ledger (Buchungen), Decimal überall | Equity & Reconciliation erklärbar statt geraten |
03 · Architektur
Drei Deploys + Postgres. Der provisioner ist neu und bewusst isoliert: nur er kennt den Broker-Master-Key. Der worker hält nur scoped Trading-Keys und führt LLM/Tools aus — so kann eine Prompt-Injection nie an den Master-Key.
Später splittbar: worker-runtime (LLM/Execution) vs. worker-sync (market-sync/Reconciliation),
und Redis kommt sauber dazu, sobald SSE über mehrere web-Instanzen skaliert. Kein Dogma — kein vorzeitiges Splitting.
04 · Run = State-Machine + Event-Stream
Jeder Übergang = typisiertes Event in Postgres (Audit + rückspulbar) und live per SSE. Neu:
Order platziert gleichzeitig die exchange-native reduce-only Stop-Order; manager.action läuft über die
deterministische Regel-Engine, das LLM wird nur bei Thesis-Invalidierung geweckt. Reproduzierbarkeit: pro LLM-Entscheidung
Prompt-Snapshot + Modell-ID + Temperatur mitloggen.
05 · Risk, Guardrails & Manager
Analyst-LLM liefert nur die These. Alles danach ist Code — clampt und vetot.
opus-4-8 Analyst · deterministisch Risk · sonnet-5 nur für seltene Re-Evaluation06 · Umsetzung — Step by Step
Reihenfolge ggü. v3 umgestellt: Mirror + Ledger, dann ehrliches Paper mit Kostenmodell und Scorecard — bevor überhaupt eine These generiert wird. Real-Härtung (native Stops, Flatten, Provisioner-Isolation) sitzt vor dem ersten Echtgeld-Euro.
packages/shared = Event- + Tool-Schema (web/worker geteilt, Zod)run_events + NOTIFY → web LISTEN → SSE. Queue: pg-boss. Migrations, CI.balances/positions/orders (synced_at)equity_snapshots → PnL-Kurvesim: füllt zum Kurs mit Taker-Fee + Funding-Accrual + simpler Slippage (Sätze live aus contract/detail / funding_rate)opus-4-8) → Thesis (action, asset, direction, suggested_leverage, confidence, invalidation, used_tools)real: Plumbing zuerst gegen Bybit/Binance-Testnet validieren (MEXC hat keins)script (Sandbox-Entscheidung) + sub-agent + Tool-Studio-UI07 · Datenmodell
bots (id, name, mode_exec[paper|real], mode_appr[approve|auto],
horizon, strategy_profile, fee_profile, subaccount_id)
subaccounts (id, bot_id, mexc_ref, status, provisioned_at)
tools (id, art[builtin|http|mcp], manifest, input_schema, config, enabled_bots[])
secrets (id, scope, ciphertext) -- Vault; master-key NUR im provisioner
runs (id, bot_id, state, created_at) -- State-Machine
run_events (id, run_id, type, payload_jsonb, ts) -- typed, audit + replay + SSE
theses (run_id, action, asset, direction, suggested_leverage, confidence,
invalidation, used_tools, prompt_snapshot, model_id, temperature)
decisions (run_id, approved, leverage, size_usdt, stop_loss, take_profit[],
guardrails_applied, reason)
orders (id, bot_id, run_id, kind[entry|stop|tp], reduce_only, status, synced_at)
positions (id, bot_id, asset, side, qty NUMERIC, entry, liq, synced_at) -- Mirror
balances (bot_id, asset, free NUMERIC, used NUMERIC, synced_at) -- Mirror
ledger (id, bot_id, kind[transfer|fill|fee|funding|realized], amount NUMERIC, ref, ts)
equity_snapshots(bot_id, equity NUMERIC, ts)
manager_actions (id, position_id, kind[hold|move_sl|take_partial|close], by[rule|llm], ts)
Alle Preise/Sizes NUMERIC/Decimal — nie Float. Equity ist die Summe aus dem Ledger,
nicht ein losgelöster Snapshot; der Snapshot ist die Zeitreihe fürs PnL-Chart.
08 · Entschieden & offen