Files
Trademind/config/config.example.yaml
T
Tobias Zimmermann 9f10f9000e Konfiguration im Dashboard änderbar machen
Neuer Abschnitt "Konfiguration" im Dashboard, aus dem pydantic-Schema erzeugt:
76 Felder in 13 Bereichen mit Kurzbeschreibung, typgerechtem Eingabefeld und den
Grenzen aus dem Modell. 70 davon sind änderbar, 45 greifen sofort, 31 sind als
neustartpflichtig markiert. Dazu GET und POST /control/config sowie
/control/config/reset.

Overlay statt Direktschreiben
- config.yaml ist im Container read-only eingehängt. Änderungen landen deshalb in
  /data/config.overrides.yaml und werden beim Start über die Basiskonfiguration
  gelegt. Rangfolge: YAML, dann ${ENV}, dann TRADEMIND__-Variablen, dann Overlay.
- Gespeichert wird nur, was vom Basiswert abweicht. Ein auf den Ausgangswert
  zurückgestelltes Feld verschwindet wieder aus dem Overlay, damit spätere
  Änderungen an config.yaml dort erneut durchschlagen.
- Beschädigte oder ungültige Overlays werden protokolliert und ignoriert, statt
  den Start zu blockieren.

Übernehmen zur Laufzeit
- apply_config hängt die Laufzeitobjekte auf die neuen Teilkonfigurationen um
  (Risiko, Strategie, Regelwerk, Lernmodell, Paper-Broker, Notifier, Log-Level).
- Was nur beim Aufbau ausgewertet wird - Börsenclient, Symbole, Timeframe,
  Startkapital, Datenbank, Socket - meldet der Store als neustartpflichtig.

Nebenbei behoben: Der Handels-Loop las Abfrageintervall und Historienlänge nur
einmal vor der Schleife. Eine Änderung an poll_interval_seconds hätte nie
gegriffen; beide werden jetzt je Durchlauf frisch gelesen.

Drei Ausnahmen von "komplett", bewusst gesetzt
- exchange.api_key/api_secret/password/uid werden maskiert angezeigt und nicht
  entgegengenommen. Sonst könnte jeder mit Zugriff auf den Port die
  Börsenschlüssel auslesen oder austauschen.
- mode lässt sich zwischen paper und backtest umstellen, nicht auf live.
- live_confirmation ist nicht schreibbar.
Zusammen verhindern sie, dass sich der Bot über das Netz schrittweise auf
Echtgeldhandel umstellen lässt.

222 Tests (36 neue), ruff sauber. Darunter Prüfungen, dass Geheimnisse in keiner
Antwort auftauchen und dass Tippfehler in RESTART_REQUIRED oder NON_WRITABLE
auffallen. Im Browser durchgeklickt: Änderung sofort wirksam, neustartpflichtige
Felder korrekt gemeldet und nach Neustart aktiv, Zurücksetzen einzeln und
komplett, alle Schutzregeln mit HTTP 400 samt lesbarer Begründung.
2026-08-23 13:25:33 +02:00

156 lines
8.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ─────────────────────────────────────────────────────────────────────────────
# TradeMind Beispielkonfiguration
#
# Kopieren nach config/config.yaml und anpassen:
# cp config/config.example.yaml config/config.yaml
#
# ${VAR} wird durch die Umgebungsvariable VAR ersetzt (leer = nicht gesetzt)
# ${VAR:-wert} nutzt "wert" als Rückfallwert
# TRADEMIND__A__B überschreibt zusätzlich den Schlüssel a.b (z. B. TRADEMIND__RISK__MAX_OPEN_POSITIONS=5)
# ─────────────────────────────────────────────────────────────────────────────
# paper = simulierte Ausführung auf echten Live-Kursen; das Modell trainiert mit ← Standard
# backtest = historische Daten im Schnelldurchlauf
# live = echte Orders (erfordert live_confirmation + API-Schlüssel)
mode: ${TRADEMIND_MODE:-paper}
log_level: ${TRADEMIND_LOG_LEVEL:-INFO}
# Muss für mode: live wörtlich auf I_UNDERSTAND_THE_RISK stehen. Sicherheitsnetz gegen
# versehentlichen Echtgeldhandel.
live_confirmation: ${TRADEMIND_LIVE_CONFIRMATION}
# ─────────────────────────────── Börsenanbindung ────────────────────────────
# id: jede von ccxt unterstützte Börse. Liste anzeigen mit: trademind exchanges
# binance · binanceus · kraken · krakenfutures · coinbase · bybit · okx
# kucoin · bitget · gate · mexc · bitstamp · bitfinex · huobi · cryptocom · …
exchange:
id: ${TRADEMIND_EXCHANGE:-binance}
api_key: ${TRADEMIND_API_KEY}
api_secret: ${TRADEMIND_API_SECRET}
# Passphrase nötig bei OKX, KuCoin, Coinbase Advanced, Bitget
password: ${TRADEMIND_API_PASSWORD}
# true = Testnet/Sandbox der Börse (soweit unterstützt). Für die ersten Live-Tests dringend empfohlen.
sandbox: ${TRADEMIND_SANDBOX:-true}
enable_rate_limit: true
timeout_ms: 20000
options:
defaultType: spot # spot | swap | future je nach Börse
# ──────────────────────────────── Marktauswahl ──────────────────────────────
market:
# Alle Symbole müssen dieselbe Quote-Währung haben (hier USDT).
symbols:
- BTC/USDT
- ETH/USDT
timeframe: 5m # 1m 3m 5m 15m 30m 1h 2h 4h 6h 8h 12h 1d 3d 1w
history_bars: 500 # Kerzen pro Abfrage (Indikatoren brauchen ≥ 140)
poll_interval_seconds: 20 # wie oft nach einer neuen Kerze gesehen wird
# ───────────────────── Simulation (Modus paper und backtest) ────────────────
paper:
starting_balance: 10000
quote_currency: USDT
fee_rate: 0.001 # 0,1 % Taker-Gebühr pro Seite
slippage_bps: 5 # 5 Basispunkte Ausführungsnachteil
max_volume_participation: 0.1 # max. 10 % des Kerzenvolumens pro Order
# ────────────────────────── Automatisierter Handel ──────────────────────────
trading:
# true = der Bot handelt ab dem Start automatisch (bisheriges Verhalten)
# false = er sammelt Daten und lernt, eröffnet aber erst nach Freigabe im Dashboard
# Positionen. Für den ersten Live-Einsatz die sicherere Wahl.
autostart: true
# Nur mode: live Start des Handels über das Dashboard verlangt die ausdrückliche
# Bestätigung START_LIVE_TRADING. Pausieren geht immer ohne Bestätigung.
require_confirmation_for_live: true
# ──────────────────────────────── Risikoregeln ──────────────────────────────
risk:
max_position_pct: 0.20 # je Position, gemessen an der Equity
max_total_exposure_pct: 0.60 # Summe aller Positionen
max_open_positions: 3
stop_loss_atr_mult: 2.0 # Stop = Einstieg 2 × ATR (0 = kein Stop)
take_profit_atr_mult: 3.0 # Ziel = Einstieg + 3 × ATR (0 = kein Ziel)
trailing_stop_atr_mult: 0.0 # > 0 aktiviert den nachziehenden Stop
max_holding_bars: 0 # 0 = unbegrenzt
max_daily_loss_pct: 0.05 # Notbremse bis zum nächsten UTC-Tag
max_drawdown_pct: 0.25 # Notbremse bis zum Neustart (schließt Positionen)
min_notional: 10 # kleinste sinnvolle Ordergröße in Quote-Währung
cooldown_bars_after_exit: 3 # Pause pro Symbol nach einem Ausstieg
# ───────────────────────────────── Strategie ───────────────────────────────
strategy:
# adaptive = Regelwerk erzeugt Signale, das Lernmodell filtert sie
# rules = nur das Regelwerk, kein Lernen
name: adaptive
rules:
fast_ema: 12
slow_ema: 26
rsi_period: 14
rsi_oversold: 35
rsi_overbought: 70
atr_period: 14
trend_filter_period: 100 # 0 = Trendfilter aus
min_holding_bars: 3 # Signalausstiege erst danach; Stop/Ziel gelten immer
learner:
enabled: true
model_path: /data/models/adaptive.npz
entry_threshold: 0.55 # ab welcher Gewinnwahrscheinlichkeit gehandelt wird
exploration_rate: 0.05 # Anteil bewusst gegen das Modell gehandelter Signale
learning_rate: 0.02
l2: 0.0001
replay_size: 5000
batch_size: 64
train_every_n_samples: 5
warmup_samples: 200 # bis dahin entscheidet allein das Regelwerk
label_horizon_bars: 12 # Bewertungsfenster für ein Signal
label_target_bps: 30 # 30 bps = 0,3 % Kursziel gilt als Treffer
trade_sample_weight: 3.0 # echte Trades zählen dreifach gegenüber Shadow-Labels
# Einstiegssignale sind selten. Zusätzliche Stichproben des Marktzustands verkürzen die
# Aufwärmphase von Wochen auf Tage (0 = aus).
background_sample_every_n_bars: 10
background_sample_weight: 0.5
# Beim Start ein noch untrainiertes Modell aus der Kurshistorie vorlernen, damit der Bot
# nach Sekunden einsatzbereit ist statt nach Tagen (0 = aus).
bootstrap_bars: 3000
freeze_in_live: false # true = im Live-Modus nicht weiterlernen
save_every_n_updates: 50
# ───────────────────────────────── Persistenz ───────────────────────────────
storage:
database_path: /data/trademind.sqlite3
# Im Dashboard geänderte Werte. Liegt im beschreibbaren Datenvolume, weil diese Datei
# hier üblicherweise read-only eingehängt ist. Löschen = alle Änderungen zurücksetzen.
overrides_path: /data/config.overrides.yaml
# ─────────────────────────── Status-Server / Monitoring ─────────────────────
server:
enabled: true
host: 0.0.0.0
port: 8080
enable_metrics: true # /metrics im Prometheus-Textformat
# Steuerbefehle im Dashboard: historisches Nachtraining anstoßen und das
# kontinuierliche Lernen ein-/ausschalten. Auf false setzen für rein lesenden Betrieb.
enable_control: true
# Schützt ALLE Steuerbefehle (Header X-TradeMind-Token). Lesende Endpunkte bleiben offen.
# Dringend empfohlen, sobald der Port nicht nur lokal erreichbar ist.
control_token: ${TRADEMIND_CONTROL_TOKEN}
# ──────────────────────────────── Benachrichtigungen ────────────────────────
notifications:
# Slack- oder Discord-Webhook (leer lassen = aus)
webhook_url: ${TRADEMIND_WEBHOOK_URL}
notify_on_trade: true
notify_on_risk_halt: true
# ───────────────────────────── Backtest-Voreinstellungen ────────────────────
backtest:
bars: 5000
start: # z. B. 2024-01-01T00:00:00Z überschreibt bars
end:
csv_dir: # OHLCV aus CSV statt von der Börse (Spalten: timestamp,open,high,low,close,volume)