12 KiB
Trading Cockpit Dokumentation
Stand: 2026-05-24
Diese Dokumentation beschreibt den aktuellen technischen Stand der Trading-Cockpit-Web-App, die aus dem alten trade.txt/Tkinter-Programm in eine Python/Flask-Webanwendung umgebaut wurde.
Kurzstatus
Die App ist als Web-Cockpit lauffähig und auf pDocker deployed:
http://192.168.178.113:5050
Aktuelle Kernfunktionen:
- Live-Analyse über Binance-Spot-Kerzen
- Demo-Fallback, wenn Datenquellen nicht erreichbar sind
- Long- und Short-Signale
- Entscheidungsampel mit Entry, Stop, Ziel, R/R, Score und Confidence
- technische Indikatoren
- Makro- und Marktstrukturfilter
- Forecast-Ansicht mit Lernkurve
- Backtesting mit Gebühren, Spread und Slippage
- Optimizer mit Fortschritt, Quality-Gate, Out-of-sample und Walk-forward
- Paper-Orders
- Exchange-Guard, der echte Orders standardmäßig blockiert
- Docker/pDocker Betrieb
Start
Lokal:
cd /Users/metacube/Projects/Git/trade_web
python3 -m pip install -r requirements.txt
python3 app.py
Dann öffnen:
http://127.0.0.1:5050
Docker lokal:
docker compose build
docker compose up -d
docker compose ps
docker compose logs -f trading-web
Deployment
Zielsystem:
pDocker: 192.168.178.113
App-Pfad: /data/compose/trade_web
URL: http://192.168.178.113:5050
Container: trading-web
Deployment-Script:
./deploy_pdocker.sh
Beim manuellen Deployment wird config.json nicht überschrieben, wenn nur Codeänderungen ausgeliefert werden sollen. Die laufende Server-Konfiguration bleibt dadurch erhalten.
Git Ablage
Lokales Entwicklungsrepo:
/Users/metacube/Projects/Git/trade_web
GitHub-Ziel:
Repository: metacube2/Ai
Pfad: trade_web/
URL: https://github.com/metacube2/Ai/tree/main/trade_web
Hinweis:
- Das lokale
trade_web-Repo bleibt als eigenständiges Arbeitsrepo bestehen. - Auf GitHub wird der Projektstand im bestehenden Repository
metacube2/Aiunter dem Unterordnertrade_web/abgelegt. - Das lokale
Ai-Repo unter/Users/metacube/Projects/Git/Aikann unabhängig davon eigene offene Änderungen enthalten und wird fürtrade_webnicht automatisch verändert.
Architektur
Wichtige Dateien:
app.py Flask API und Routen
trading_engine.py Indikatoren, Signalmodell, Forecast, Backtest, Optimizer
exchange.py Exchange Safety Guard
storage.py SQLite Persistenz
templates/index.html HTML Layout
static/app.js Frontend-Logik und SVG Charts
static/styles.css UI Design
config.json Symbol, Signalmodus, Risiko, Execution Safety
test_trading_engine.py Regressionstests fuer Kernlogik
docker-compose.yml Containerbetrieb
Dockerfile Image Build
Persistenz:
/app/data/trade_web.sqlite3
Gespeichert werden:
- Backtest-Runs
- Optimizer-Runs
- Paper-Orders
UI Workflow
Tabs:
Analyse: Ampel, Signal, Timeframes, Makro, KorrelationenForecast: Forecast-Pfad, Unsicherheitsband, LernkurveOptimieren: Backtest, Optimizer, Konvergenz, HistorieRisiko: Risk-Plan, Health, Paper-OrdersMethodik: Signalformel und TradingView-Formelcheck
Die Hauptampel zeigt:
- Entscheidung: Kaufen, Short, Beobachten, Short beobachten oder Warten
- Entry
- Stop
- Ziel
- Risk/Reward
- Score
- Confidence
- Signalblocker
Datenquellen
Technische Analyse:
- Binance Spot Klines
- Timeframes:
15m,30m,4h,1d
Makro/Marktstruktur:
- DXY/UUP Proxy
- SPY/QQQ Risk-on/Risk-off
- TLT als Zinsdruck-/Realzins-Proxy
- BTC-Dominanz und Stablecoin-Liquiditaet ueber CoinGecko
- Funding Rate und Open Interest ueber Binance Futures
- News/Event-Risiko ueber RSS-Keyword-Scan
Wenn externe Daten nicht erreichbar sind, wird neutral oder mit Demo-Fallback weitergerechnet. Die App soll nicht blockieren, nur weil eine externe Quelle langsam ist.
Indikatoren
Berechnet werden:
- RSI 14
- MACD 12/26/9
- EMA20
- EMA50
- SMA200
- Volumen gegen SMA20
- Support/Resistance aus den letzten 30 Kerzen
- Fibonacci-Level
- W-Pattern
- Trendstatus
- Korrelationen gegen Benchmark-Assets
TradingView/Pine-Abgleich:
- RSI entspricht
ta.rsi(close, 14)mit Wilder-RMA - MACD entspricht
ta.macd(close, 12, 26, 9) - EMA entspricht
ta.ema(close, length) - SMA entspricht
ta.sma(close, length)
Ein echter 1:1-Vergleich mit TradingView ist nur moeglich, wenn Symbol, Boerse, Timeframe und Kerzenschlusszeit identisch sind.
Signalmodell
Das Signalmodell ist bidirektional:
- bullish Setup -> Long/BUY-Kandidat
- bearish Setup -> Short/SELL-Kandidat
Moegliche Signaltypen:
STRONG_BUY
BUY
WEAK_BUY
NONE
WEAK_SELL
SELL
STRONG_SELL
Long-Geometrie:
Entry = aktueller Preis
Stop = Support
Ziel = Resistance
R/R = (Ziel - Entry) / (Entry - Stop)
Short-Geometrie:
Entry = aktueller Preis
Stop = Resistance
Ziel = Support
R/R = (Entry - Ziel) / (Stop - Entry)
Ein Signal wird nur aktiv, wenn:
- Score die Schwelle erreicht
- Risk/Reward positiv und ausreichend ist
- Modusfilter erlaubt
- Makrofilter nicht blockiert
- Entry/Stop/Ziel geometrisch korrekt sind
Signalmodi
balanced:
- weniger streng
- mehr Signale
- gut fuer Exploration und Backtestvergleich
high_precision:
- verlangt Multi-Timeframe-Bestaetigung
- verlangt hoeheres R/R
- blockiert ueberkaufte Longs bzw. ueberverkaufte Shorts
lux_style:
- trend-, momentum-, volumen- und breakout-orientiert
- long und short getrennt geprueft
- keine LuxAlgo-Kopie und keine proprietaere LuxAlgo-Logik
Aktuelle Logikfixes
Gefundene und behobene Fehler:
- Das System konnte zuerst nur Long-Signale ausgeben. Bearishe Setups wurden dadurch faelschlich
NONE/Warten. - Short-Signale wurden ergaenzt:
WEAK_SELL,SELL,STRONG_SELL. - Short-R/R wird jetzt korrekt mit Stop oberhalb und Ziel unterhalb berechnet.
- Paper-Orders und Risk-Plan kennen jetzt
BUYundSELL. - RSI unter 50 wurde vorher teilweise long-gruen bewertet. Jetzt ist RSI < 50 bearish, RSI > 50 bullish.
- RSI bei konstantem Markt war falsch moeglich als 100. Jetzt ist flacher RSI korrekt 50.
- Backtest konnte 1d-Daten mit Zukunftsblick verwenden. Jetzt werden Tageskerzen nur bis zur aktuellen Backtest-Kerze verwendet.
- Lux/Precision Backtest wurde durch fehlende 15m/30m-Historie zu hart blockiert. Im historischen 4h-Backtest wird dafuer ein 4h-Proxy verwendet.
Backtesting
API:
/api/backtest
/api/backtest?symbols=BTCUSDT,ETHUSDT&candles=360&horizon=12
Der Backtest simuliert:
- Long- und Short-Trades
- Entry
- Stop
- Target
- Timeout-Exit
- Gebuehren
- Slippage
- Spread
Metriken:
- Trades
- Wins/Losses
- Winrate
- Total Return
- Average Trade
- Profit Factor
- Max Drawdown
- Equity Curve
- Drawdown Curve
- Sample Trades
Chart:
- Candlestick-Daten
- Entry-Linien
- Stop-Linien
- Target-Linien
- Trade-Marker
Wichtig: Historische Makrodaten sind nur als Proxy-Schicht vorhanden. Technischer Backtest ist nutzbar, Makro-Historie ist keine vollstaendige institutionelle Makro-Rekonstruktion.
Optimizer
Der Optimizer testet Parameterkombinationen:
- Signal-Schwellen
- R/R-Schwellen
- RSI-Schwellen
- Indikatorgewichte
- Symbolparameter
Bewertet wird mit:
- Training Score
- Out-of-sample Score
- Walk-forward Score
- Quality-Gate
- Robustheitsreport
- Monte-Carlo-Unterseite
- Verlustserien
- Konvergenzverlauf
Ein Vorschlag wird nur uebernehmbar, wenn das Quality-Gate bestanden ist.
Forecast
Forecast-Ansicht:
- historische 4h-Kerzen
- Forecast-Pfad
- Unsicherheitsband
- Lernkurve
- Forecast-Fehler je Lernfenster
Der Forecast ist statistisch:
- Drift aus den letzten Returns
- Volatilitaet aus den letzten Returns
- Unsicherheitsband ueber Volatilitaet und Horizont
Das ist keine Garantie und kein Deep-Learning-Modell. Die Lernkurve zeigt, ob das gewaehlte Fenster historisch weniger Fehler erzeugt.
Risk-Plan
Berechnet wird:
- Entry
- Stop
- Target
- Richtung
- Risiko pro Trade
- Positionsgroesse
- Notional
- Blocker
Risk-Konfiguration in config.json:
{
"risk_per_trade_pct": 0.5,
"max_position_pct": 25,
"max_daily_loss_pct": 2,
"max_drawdown_pct": 12,
"max_open_positions": 3,
"cooldown_after_losses": 3,
"slippage_bps": 5,
"spread_bps": 4,
"taker_fee_bps": 10,
"maker_fee_bps": 6
}
Paper-Trading
Paper-Order Endpunkte:
GET /api/paper/orders
POST /api/paper/order
Paper-Orders speichern:
- Symbol
- Side:
BUYoderSELL - Quantity
- Entry
- Stop
- Target
- Risk Amount
- Signal
- Risk Plan
Live-Exchange-Sicherheit
Echte Orders sind bewusst blockiert.
Default:
{
"mode": "paper",
"kill_switch": true,
"allow_live_orders": false,
"require_manual_confirm": true,
"api_key_env": "",
"api_secret_env": ""
}
Exchange-Guard:
GET /api/exchange/status
POST /api/exchange/order
Vor echtem Live-Trading waeren noetig:
- Testnet zuerst
- API-Key ohne Withdrawal-Rechte
- Secret-Verwaltung ueber ENV/Secret Store
- Tick-Size/Step-Size/Min-Notional Regeln
- Order-Limits
- Positionslimits
- Reconnect- und Retry-Handling
- Rate-Limit-Handling
- Audit-Log
- manuelle Freigabe oder klarer Autotrade-Modus
Aktuell ist der Live-Connector vorbereitet, sendet aber keine echten Exchange-Orders.
API Uebersicht
GET /
GET /api/config
POST /api/config
GET /api/analyze
GET /api/backtest
GET /api/forecast
GET /api/optimize
POST /api/optimize/start
GET /api/optimize/status/<job_id>
POST /api/optimize/cancel/<job_id>
POST /api/optimize/apply
GET /api/history
GET /api/health
GET /api/paper/orders
POST /api/paper/order
GET /api/exchange/status
POST /api/exchange/order
Tests
Vorhandene Tests:
test_trading_engine.py
Aktuell abgedeckt:
- SMA/EMA/RSI/MACD Basics
- RSI bei flachem Markt
- Returns, Performance, Korrelation
- Long/Short-R/R gegen Signaloutput
- bearish Setup wird
STRONG_SELL
Ausfuehrung, wenn pytest installiert ist:
python3 -m pytest test_trading_engine.py
Fallback ohne pytest:
python3 - <<'PY'
import test_trading_engine as tests
for name in sorted(dir(tests)):
if name.startswith("test_"):
getattr(tests, name)()
print(name, "ok")
PY
Syntaxchecks:
python3 -m py_compile app.py trading_engine.py storage.py exchange.py test_trading_engine.py
node --check static/app.js
Bekannte Grenzen
Die App ist ein Analyse- und Paper-Trading-System, kein garantierter Profit-Bot.
Bekannte Grenzen:
- kein vollstaendiger historischer News-/Funding-/Dominanz-Datensatz im Backtest
- Forecast ist einfach-statistisch
- kein produktiver WSGI-Server, aktuell Flask/Werkzeug im Container
- keine echte Binance/Bitget-Orderausfuehrung aktiv
- keine persistente Candle-Cache-Schicht
- Optimizer kann bei vielen Symbolen langsam werden
- keine Purged/Embargoed Cross-Validation
- keine Liquidation-Heatmap
- kein professioneller Wirtschaftskalender
Empfohlene naechste Schritte
Prioritaet hoch:
- Gunicorn/Waitress statt Flask Dev Server
- Candle-Cache in SQLite
- mehr Regressionstests fuer Long/Short/Backtest
- UI-Anzeige fuer Long- und Short-Kandidat nebeneinander
Prioritaet mittel:
- historische Funding/OI-Daten
- historische BTC-Dominanz und Stablecoin-Liquiditaet
- Export von Backtests als CSV/JSON
- gespeicherte Optimizer-Jobs mit Resume
Prioritaet niedrig:
- Bitget-Connector
- echte Exchange-Ausfuehrung mit Testnet
- fortgeschrittene Forecast-Modelle
Wichtige Sicherheitsregel
Live-Trading darf erst aktiviert werden, wenn Testnet, Key-Scope, Order-Limits, Fehlerhandling und manuelle Freigabe sauber umgesetzt und getestet sind.
Bis dahin bleibt das System bewusst bei Analyse, Backtest, Optimierung und Paper-Trading.