plan6.opent.dev · trading-bot-konzept

Konzept · Research · v3 — Redesign

LLM-Trading-Fleet auf MEXC Futures

Mehrere autonome Bots, jeder mit eigenem MEXC-Subaccount. Ein LLM recherchiert mit frei ansteckbaren Tools, eine Risk-Schicht setzt harte Grenzen, ein Manager pflegt Positionen. Neu gedacht rund um drei Erkenntnisse aus dem echten Test — mit einem Live-Frontend, das jeden Schritt sichtbar macht.

Account-Mirror (Subaccounts unsichtbar in MEXC) Live Event-Stream → Frontend Universal Tool-Layer TanStack + shadcn 2 Services + Postgres · kein Redis

✓ 3 Erkenntnisse aus deinem MEXC-Test — die den Plan verändern

1. Subaccounts anlegen, Futures aktivieren, Geld verschieben, per API verwalten: funktioniert. → automatische Provisionierung bleibt.

2. Subaccounts sind im MEXC-Webinterface nicht sichtbar. → unsere UI wird zur einzigen Quelle der Wahrheit für Positionen, Guthaben, PnL. Das erzwingt einen Account-Mirror (§05) und macht ein starkes Frontend zur Pflicht, nicht zur Kür.

3. Du willst „alles Mögliche" als Tool anhängen können. → das Tool-System wird zu einem Universal Tool-Layer (§06) mit 5 Anschluss-Arten, inkl. MCP.

01Was sich ändert — und was bleibt

Ehrliche Einschätzung: Der Kern von v2 war richtig (2-LLM, Guardrails, 1 Bot = 1 Subaccount, Modi, Telegram). Er bleibt. Drei Dinge werden aber von „Empfehlung" zu „Fundament" — getrieben vom echten Test. Kein Teardown, sondern gezielte Verstärkung. (Telegram fällt vorerst weg, die Infrastruktur wird bewusst schlanker — siehe §02.)

① Account-Mirror neu · Pflicht

Weil MEXC die Subaccounts nicht anzeigt, spiegeln wir Positionen/Guthaben/Orders laufend in unsere DB. Sie wird die Quelle der Wahrheit — für UI, Risk und Manager.

② Typed Event-Stream neu · Rückgrat

Jede Stage sendet typisierte Events (in DB + live per SSE). Das ist gleichzeitig Audit-Log und der Treibstoff für die grafische Live-Ansicht.

③ Universal Tool-Layer neu · Flexibilität

Statt nur „Ordner+Skript": 5 Anschluss-Arten (builtin, HTTP, MCP, Script, Sub-Agent). Damit hängst du wirklich alles dahinter.

02System & Services

End-to-end TypeScript, damit das Event-Modell zwischen Backend und Frontend 1:1 geteilt wird — genau das macht die Live-Visualisierung ohne Schema-Drift möglich. Bewusst schlank gehalten: 2 Services + 1 DB, alles auf Railway.

✓ Bewusst einfach — nur so komplex wie nötig

Kein Redis. Der Bot macht Trades im Minuten-/Stunden-Takt, nicht 5.000/s. Postgres reicht für alles: Wahrheit, Audit, Event-Log und Live-Bus via LISTEN/NOTIFY. Die Job-Queue macht pg-boss (auf Postgres). Ein Service weniger, keine Dual-Write-Fehlerquelle, eine Quelle der Wahrheit. Bewusste Entscheidung, kein Dogma: sobald wir web über mehrere Instanzen skalieren (SSE-Fan-out sprengt dann die Postgres-LISTEN-Verbindungen) oder reichere Queue-Semantik brauchen, kommt Redis sauber dazu — die Schnittstellen sind so geschnitten, dass es ein Austausch bleibt.

Kein Telegram (vorerst). Alles läuft über das Frontend — Steuerung, Freigaben, Alerts. Telegram lässt sich später als dünner Zusatz nachrüsten, ändert nichts an der Architektur.

Ein Worker statt drei. Runtime (Run-Engine, LLM, Tool-Gateway, Manager) und Mirror laufen in einem Node-Prozess. Falls später Isolation/Last es verlangen, sauber aufsplittbar — aber nicht auf Verdacht.

Abb. 1 · Service-Topologie (Railway) — 2 Services + Postgres
BrowserTanStack UI · shadcn web · TanStack StartUI · API · SSE worker (Node)Runtime · LLM · Tool-Gateway · Mirror PostgresState · Audit · Mirror · Events · QueueEvent-Bus = LISTEN/NOTIFY (kein Redis) MEXC FuturesAPI + WS Externe ToolsMCP · HTTP HTTP · SSE read · LISTEN events · queue orders · mirror tools
I/O Runtime + Mirror extern

Wie der Live-Bus ohne Redis geht: Der worker schreibt jedes Event in run_events und feuert ein NOTIFY. Der web-Service LISTENt, liest die neue Zeile und schiebt sie per SSE in den Browser. Postgres ist damit Wahrheit und Nervensystem in einem — robust bei dem Volumen, das hier realistisch ist.

03Der Run als State-Machine + Event-Stream

Das Rückgrat. Ein Run ist eine explizite Zustandsmaschine; jeder Übergang erzeugt ein typisiertes Event, das (a) in Postgres landet (Audit) und (b) live per SSE ans Frontend geht. Die grafische „wo ist der Bot gerade"-Ansicht liest genau diesen Strom.

Abb. 2 · Run-Lifecycle — jede Stage emittiert Events
Typed Event-Stream → Live-Frontend (SSE) + Postgres (Audit) QUEUED KONTEXT ANALYSE RISIKO ORDER POSITION(managed) CLOSED approve-mode: Freigabe (Telegram) no_trade / rejected

Event-Beispiele (alle typisiert, ein runId je Run): run.queued · context.built · analyst.tool_call · analyst.tool_result · analyst.thesis · risk.decision · approval.requested · execution.order_placed · position.opened · manager.action · position.closed. Das Frontend rendert daraus die animierte Pipeline; dieselben Events sind der Audit-Trail.

04Account-Mirror — weil MEXC die Subaccounts versteckt

Da im MEXC-Web nichts von den Subaccounts sichtbar ist, spiegelt market-sync jeden Subaccount kontinuierlich in unsere DB. Alles — UI, Risk-Berechnung, Manager — liest aus dem Mirror, nicht direkt von MEXC.

Wie gespiegelt wird

  • WebSocket (privat) pro Subaccount: Order-Updates, Fills, Positionsänderungen in Echtzeit.
  • REST-Poll als Sicherheitsnetz (alle N Sek.): Guthaben, offene Positionen, offene Orders.
  • Schreibt in balances, positions, orders mit synced_at.
  • Equity-Snapshots über Zeit → PnL-Kurve pro Bot „gratis".

Reconciliation (Sicherheit)

  • Soll-Zustand (unsere orders/decisions) vs. Ist (Börse) laufend abgleichen.
  • Drift, unerwartete Positionen, verwaiste Orders → Alert im Frontend + Bot pausieren.
  • Übersteht MEXC-Ausfälle: Mirror zeigt „stale", Manager agiert konservativ.
  • Der Mirror macht die Kontosicht robust — nicht nur, weil MEXC nichts zeigt.

Nebeneffekt: besseres System

Ein eigener Mirror wäre auch ohne das Sichtbarkeits-Problem sinnvoll: er entkoppelt uns von MEXC-Latenz/Ausfällen, liefert die Equity-Historie für Auswertung/Kalibrierung und macht Reconciliation zur First-Class-Sicherheit. Der MEXC-Test hat uns nur früh dahin gezwungen.

05Universal Tool-Layer — „hook anything"

Dein Wunsch: wirklich alles anhängen können. Lösung: jedes Tool erscheint dem LLM als normale Anthropic-Tool-Definition — dahinter steckt aber ein austauschbarer Provider. Fünf Arten decken praktisch alles ab.

Abb. 3 · Ein Gateway, fünf Anschluss-Arten
Analyst-LLMTool-Use-Loop Tool-GatewayManifest → tool_defVault-Config · Limits · Log call/result builtin http mcp script sub-agent Code im Repo jede REST-API · n8n jeder MCP-Server Sandbox-Snippet LLM-Sub-Prompt
ArtWas du dahinter hängstBeispiel
builtinVersionierter Code im Repo (schnell, vertrauenswürdig)chart_patterns, funding_rate
httpJede REST-API/Webhook — nur URL, Methode, Header, Body-Templaten8n-Flow, eigener Microservice, News-API
mcpJeder MCP-Server — dessen Tools werden importiert & namespacedDB-MCP, Websuche-MCP, Broker-MCP, Scraper
scriptKleines Snippet, das du in der UI schreibst (sandboxed)Custom-Transform, Kennzahl berechnen
sub-agentTool, das selbst ein LLM mit Unter-Prompt ruft (komponierbar)„fasse diesen Feed zusammen"

Alle teilen dasselbe Schema: Input-Schema (treibt Tool-Definition und das UI-Config-Formular), Secret/Config-Schema (Vault), Enable-pro-Bot, Timeout, Rate-Limit, Kosten-Logging. In der UI: eine „Tool-Studio"-Ansicht zum Anlegen & Testen (Sample-Input rein, Output sehen) — das ist die Flexibilitäts-Oberfläche.

⚠ Tool-Output ist untrusted

Tweets/News/MCP-Antworten können Prompt-Injection enthalten („ignoriere Limits"). Outputs werden klar als Daten übergeben, nie als Instruktion — und die deterministischen Guardrails fangen finanziellen Schaden ohnehin ab.

06Bots & Subaccounts

Ein Fleet-Manager verwaltet N Bots; jeder Bot ist eine isolierte Instanz der Pipeline mit eigenem Prompt, Tool-Set, Guardrails und eigenem MEXC-Subaccount. Geteilt wird nur Code & Infra — nie Kapital.

Provisionierung (getestet, funktioniert): Bot-Config → Subaccount per Broker-API anlegen → Futures aktivieren → Startkapital transferieren → scoped API-Key erzeugen → Vault → market-sync startet Spiegelung → Runtime läuft → Bot live (Paper-Default). Bot-Vielfalt offen: verschiedene Strategien und gleiche Strategie in Varianten (A/B für Confidence-Kalibrierung).

⚠ Broker-Master-Key

Der Broker-Key kann alle Subaccounts anlegen/verwalten — das kritischste Secret im System. Nur im Vault, IP-gebunden, nie in einen Bot-Prozess geladen. Bot-Keys sind auf ihren einen Subaccount begrenzt.

07Analyst · Risk · Guardrails

Analyst → Thesis LLM

{ "action":"propose"|"no_trade",
  "asset":"BTC_USDT",
  "direction":"long"|"short",
  "suggested_leverage":5,
  "confidence":0.72,
  "thesis":"…", "invalidation":"< 61k",
  "used_tools":["funding_rate","mcp:news"] }

Risk → Entscheidung Guard + LLM

{ "approved":true, "leverage":3,
  "size_usdt":40, "stop_loss":60800,
  "take_profit":[63500,65000],
  "reason":"Event-Risiko → halbe Größe",
  "guardrails_applied":["lev_cap"] }

Deterministische, nicht LLM-überschreibbare Limits (pro Bot konfigurierbar): max_leverage, max_pos_pct, max_total_exposure, min_confidence, mandatory_stop, daily_loss_stop (Kill-Switch), max_open_positions, cooldown, fleet_correlation (≤N Bots gleiche Richtung/Asset), global_kill_switch. Equity/Exposure kommen aus dem Mirror. Manager-Aktionen (hold/move_sl/take_partial/close) laufen erneut durch die Guardrails.

08Betriebsmodi

Zwei orthogonale, zur Laufzeit umschaltbare Achsen — pro Bot, gesteuert über das Frontend.

Approve — du bestätigstAutonom — nur Guardrails
Papersimuliert, mit Freigabe → Trainingsimuliert, Dauerlauf → Backtest-nah
Realechte Order erst nach Klick in der UIechte Order autonom + Kill-Switch

Steuerung im Frontend: Modus umschalten, Trades freigeben/ablehnen, Kill-Switch pro Bot + global, Status/PnL & Positionen (aus dem Mirror), Drift-Alerts als In-App-Benachrichtigung. später optional Telegram als dünner Zusatz-Kanal — ändert nichts an der Architektur.

Paper-Trading — bewusst einfach, ohne Fees

MEXC bietet keine Paper-/Testnet-API (nur Demo im Web-Interface), also simulieren wir selbst — und halten es zunächst schlank: Paper füllt Orders ohne Gebühren, PnL = reine Preisbewegung. Fees & Funding kann man sich vorerst überschlägig selbst dazurechnen; ein echtes Fee-/Funding-Modell ist später einsteckbar, ohne die Architektur zu ändern.

Ein Interface, zwei Backends. Der ExecutionAdapter (place / modify / cancel / close) — der Modus-Schalter wählt nur aus:

BackendVerhaltenWann
simFüllt zum aktuellen Kurs, ohne Fees/Funding (Fee-Modell später einsteckbar)Paper-Default
realEchte signierte MEXC-Orders auf dem SubaccountReal-Modus

Weil die Gebühren-Logik hinter dem sim-Backend gekapselt ist, lässt sich ein Fee-/Funding-Modell (Sätze live aus contract/detail / funding_rate) jederzeit nachrüsten — ohne dass Analyst, Risk oder UI etwas merken.

09Live-Frontend — sehen, was gerade passiert

Das Herzstück deiner Anforderung. Der SSE-Event-Stream treibt eine animierte Pipeline: man sieht in Echtzeit, bei welchem Schritt jeder Bot steht — Analyse, Risiko, Order, Management — inkl. der Tool-Calls, während sie passieren.

Abb. 4 · Mock — Live-Run-Ansicht eines Bots
bot · alpha-funding · REAL · AUTONOM ● in position +2.4% Trigger Kontext 3Analyse… Risiko Order Manage LIVE TOOL-CALLS ✓ funding_rate ✓ mcp:news_search ◴ http:x_sentiment … used 2 · running 1 tokens 4.1k · 3.2s THESIS (entsteht) LONG · BTC_USDT confidence 0.72 · lev 5×→ Risk prüft „Funding negativ, News-Katalysator, Sentiment kippt bullish…" invalidation: Schluss < 61.000 ▶ Dry-Run-Diff

Fleet-Board

Karten pro Bot: Live-Status (idle / analyse / wartet-auf-freigabe / in-position), Equity, PnL-Sparkline, Modus-Schalter. Alles aus dem Mirror + Event-Stream.

Run-Ansicht

Die animierte Pipeline oben — aktive Stage pulsiert, Tool-Calls tropfen live ein, Thesis & Risk-Entscheidung erscheinen inline. Rückspulbar über die gespeicherten Events.

Konto & Approve

Positionen/ Orders/Guthaben (aus dem Mirror, da MEXC sie nicht zeigt). Im Approve-Modus: Pending-Trade-Karte mit Freigeben/Ablehnen direkt in der UI, plus In-App-Benachrichtigungen.

10Tech-Stack & Railway

Frontend

  • TanStack Start (Router · Query · Table) — typsicher, SSR, Server-Functions
  • shadcn/ui — Komponenten via shadcn-MCP gescaffoldet
  • Realtime: SSE → TanStack Query; animierte Pipeline aus dem Event-Stream
  • Charts: leichte SVG/Canvas-Sparklines für Equity/PnL

Backend (TypeScript end-to-end)

  • Monorepo: packages/shared = Event- & Tool-Schema, von web + worker geteilt
  • anthropic TS-SDK (Tool-Runner + MCP-Helfer → passt aufs Tool-Layer)
  • MEXC-Client (signiert, ccxt oder eigen), ws für Streams
  • Kein Redis: Job-Queue via pg-boss, Event-Bus via Postgres LISTEN/NOTIFY
Railway-ServiceRolle
webTanStack Start: UI, API, SSE (LISTEN → Browser)
workerNode: Run-Engine, LLM, Tool-Gateway, Position-Manager + Mirror
PostgresManaged DB — State · Audit · Mirror · Event-Log · Job-Queue · NOTIFY-Bus

Zwei deploybare Services + eine Managed-DB. Falls der worker später mehr Isolation braucht (Mirror darf nicht mit einem Run mitsterben), in worker-runtime + worker-sync splittbar — aber erst wenn es weh tut.

Sobald du „go" sagst, lege ich das Railway-Projekt mit genau diesen Services an (dein Account + Credit) und richte das Monorepo-Deployment ein.

11Datenmodell (Postgres)

TabelleInhalt
botsPrompt, aktive Tools, Guardrails, Modus (paper/real, approve/auto), Status
subaccountsMEXC-Sub-ID, Vault-Ref des Keys, Startkapital
toolsTool-Definitionen: Art (builtin/http/mcp/script/sub-agent), Manifest, Config-Ref
secretsVerschlüsselte Keys (Broker-Master, Sub-Keys, Tool-Secrets)
runs / run_eventsRun + typisierter Event-Stream (Audit + Replay der Live-Ansicht)
theses / decisionsAnalyst-Output & Risk-Entscheidung
orders / positions / balancesMirror je Subaccount, mit synced_at
equity_snapshotsZeitreihe → PnL-Kurve & Kalibrierung
manager_actionsJede Manager-Aktion mit Begründung

12Roadmap & offene Fragen

PhaseZielEnthält
0 · SkelettRailway stehtMonorepo, web+worker deployen, Postgres, Event-Bus (LISTEN/NOTIFY), shared Schema
1 · MirrorKontosichtmarket-sync (REST+WS), Positionen/Guthaben in der UI sichtbar — zuerst, weil MEXC nichts zeigt
2 · AnalyseThesis + Live-UIAnalyst-LLM, Tool-Gateway (builtin + http + mcp), animierte Run-Pipeline
3 · RisikoSichere EntscheidungGuardrails + Risk-LLM, Paper-Orders end-to-end (ohne Fees), Dry-Run-Diff
4 · Live kleinEchte OrdersMEXC write, Mini-Größen, 2-Achsen-Modus, Approve-UI, Kill-Switch
5 · FleetMulti-BotAuto-Provisioning (Broker-API), Fleet-Board, fleet_correlation
6 · Manager + AusbauPositionen lebenManager-Loop (WS-Trigger), Trailing/Break-Even, Backtest, Kalibrierung, Tool-Studio

Ein Satz

Eine TypeScript-Fleet auf Railway: pro Bot ein gespiegelter MEXC-Subaccount, ein Analyst-LLM mit universell ansteckbaren Tools, eine harte Risk-Schicht, ein Live-Frontend, das jeden Schritt in Echtzeit zeigt — Paper-first, komplett übers Frontend steuerbar, mit Kill-Switch pro Bot und global.