Konzept · Research · v3 — Redesign
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.
✓ 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.
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.)
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.
Jede Stage sendet typisierte Events (in DB + live per SSE). Das ist gleichzeitig Audit-Log und der Treibstoff für die grafische Live-Ansicht.
Statt nur „Ordner+Skript": 5 Anschluss-Arten (builtin, HTTP, MCP, Script, Sub-Agent). Damit hängst du wirklich alles dahinter.
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.
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.
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.
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.
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.
balances, positions, orders mit synced_at.orders/decisions) vs. Ist (Börse) laufend abgleichen.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.
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.
| Art | Was du dahinter hängst | Beispiel |
|---|---|---|
| builtin | Versionierter Code im Repo (schnell, vertrauenswürdig) | chart_patterns, funding_rate |
| http | Jede REST-API/Webhook — nur URL, Methode, Header, Body-Template | n8n-Flow, eigener Microservice, News-API |
| mcp | Jeder MCP-Server — dessen Tools werden importiert & namespaced | DB-MCP, Websuche-MCP, Broker-MCP, Scraper |
| script | Kleines Snippet, das du in der UI schreibst (sandboxed) | Custom-Transform, Kennzahl berechnen |
| sub-agent | Tool, 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.
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.
{ "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"] }{ "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.
Zwei orthogonale, zur Laufzeit umschaltbare Achsen — pro Bot, gesteuert über das Frontend.
| Approve — du bestätigst | Autonom — nur Guardrails | |
|---|---|---|
| Paper | simuliert, mit Freigabe → Training | simuliert, Dauerlauf → Backtest-nah |
| Real | echte Order erst nach Klick in der UI | echte 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.
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:
| Backend | Verhalten | Wann |
|---|---|---|
sim | Füllt zum aktuellen Kurs, ohne Fees/Funding (Fee-Modell später einsteckbar) | Paper-Default |
real | Echte signierte MEXC-Orders auf dem Subaccount | Real-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.
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.
Karten pro Bot: Live-Status (idle / analyse / wartet-auf-freigabe / in-position), Equity, PnL-Sparkline, Modus-Schalter. Alles aus dem Mirror + Event-Stream.
Die animierte Pipeline oben — aktive Stage pulsiert, Tool-Calls tropfen live ein, Thesis & Risk-Entscheidung erscheinen inline. Rückspulbar über die gespeicherten Events.
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.
packages/shared = Event- & Tool-Schema, von web + worker geteiltanthropic TS-SDK (Tool-Runner + MCP-Helfer → passt aufs Tool-Layer)ws für Streamspg-boss, Event-Bus via Postgres LISTEN/NOTIFY| Railway-Service | Rolle |
|---|---|
web | TanStack Start: UI, API, SSE (LISTEN → Browser) |
worker | Node: Run-Engine, LLM, Tool-Gateway, Position-Manager + Mirror |
Postgres | Managed 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.
| Tabelle | Inhalt |
|---|---|
bots | Prompt, aktive Tools, Guardrails, Modus (paper/real, approve/auto), Status |
subaccounts | MEXC-Sub-ID, Vault-Ref des Keys, Startkapital |
tools | Tool-Definitionen: Art (builtin/http/mcp/script/sub-agent), Manifest, Config-Ref |
secrets | Verschlüsselte Keys (Broker-Master, Sub-Keys, Tool-Secrets) |
runs / run_events | Run + typisierter Event-Stream (Audit + Replay der Live-Ansicht) |
theses / decisions | Analyst-Output & Risk-Entscheidung |
orders / positions / balances | Mirror je Subaccount, mit synced_at |
equity_snapshots | Zeitreihe → PnL-Kurve & Kalibrierung |
manager_actions | Jede Manager-Aktion mit Begründung |
| Phase | Ziel | Enthält |
|---|---|---|
| 0 · Skelett | Railway steht | Monorepo, web+worker deployen, Postgres, Event-Bus (LISTEN/NOTIFY), shared Schema |
| 1 · Mirror | Kontosicht | market-sync (REST+WS), Positionen/Guthaben in der UI sichtbar — zuerst, weil MEXC nichts zeigt |
| 2 · Analyse | Thesis + Live-UI | Analyst-LLM, Tool-Gateway (builtin + http + mcp), animierte Run-Pipeline |
| 3 · Risiko | Sichere Entscheidung | Guardrails + Risk-LLM, Paper-Orders end-to-end (ohne Fees), Dry-Run-Diff |
| 4 · Live klein | Echte Orders | MEXC write, Mini-Größen, 2-Achsen-Modus, Approve-UI, Kill-Switch |
| 5 · Fleet | Multi-Bot | Auto-Provisioning (Broker-API), Fleet-Board, fleet_correlation |
| 6 · Manager + Ausbau | Positionen leben | Manager-Loop (WS-Trigger), Trailing/Break-Even, Backtest, Kalibrierung, Tool-Studio |
script-Tools: Isolation wählen (isolated-vm / Container) — untrusted Code.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.