Initial commit: TradeMind – Krypto-Trading-Bot mit Lernmodus

Per Podman deploybarer Bot, der Käufe und Verkäufe simuliert ausführt und sich
aus den Ergebnissen weiter antrainiert.

Aufbau
- Einheitliche Bar-Verarbeitung für paper, backtest und live; ausgetauscht werden
  nur Datenquelle und Broker.
- Börsenanbindung über ccxt: rund 100 Börsen allein über exchange.id erreichbar.
  Zugangsdaten kommen über ENV-Platzhalter, der Live-Modus ist doppelt abgesichert.
- Paper-Broker mit Gebühren, Slippage, Börsenpräzision und Volumengrenzen.
- Online trainierte logistische Regression bewertet jedes Einstiegssignal. Sie lernt
  aus realen Trade-Ergebnissen, aus Shadow-Labels aller Kandidaten – auch der
  abgelehnten – und aus Hintergrund-Stichproben; beim Kaltstart wird sie aus der
  Kurshistorie vorgelernt.
- Risikomanagement: Positions- und Exposure-Grenzen, ATR-Stops, Cooldown sowie
  Tagesverlust- und Drawdown-Notbremsen.
- SQLite-Persistenz, HTTP-Status mit Prometheus-Metriken und Dashboard, Webhooks.

Deployment
- Containerfile (zweistufig, non-root UID 10001), podman-compose, systemd-Quadlet.
- Modell und Datenbank liegen im Volume /data und überleben Neustarts.

128 Tests, ruff sauber. Verifiziert gegen echte Marktdaten sowie im gebauten
Container inklusive Healthcheck und Zustandswiederherstellung.
This commit is contained in:
Tobias Zimmermann
2026-08-22 08:53:04 +02:00
commit 65ed73977e
40 changed files with 7033 additions and 0 deletions
+8
View File
@@ -0,0 +1,8 @@
# Persistentes Volume für SQLite-Datenbank und trainiertes Modell.
# Zusammen mit trademind.container nach ~/.config/containers/systemd/ kopieren.
[Unit]
Description=TradeMind Datenvolume (Datenbank und Modellgewichte)
[Volume]
VolumeName=trademind-data
+59
View File
@@ -0,0 +1,59 @@
# Podman-Quadlet-Einheit der sauberste Weg, TradeMind dauerhaft laufen zu lassen.
#
# Installation (rootless, empfohlen):
# mkdir -p ~/.config/containers/systemd
# cp deploy/trademind.container ~/.config/containers/systemd/
# mkdir -p ~/.config/trademind && cp config/config.yaml config/trademind.env ~/.config/trademind/
# systemctl --user daemon-reload
# systemctl --user start trademind
# systemctl --user status trademind
# journalctl --user -u trademind -f
#
# Damit der Dienst auch ohne aktive Anmeldung läuft:
# loginctl enable-linger $USER
#
# Für den systemweiten Betrieb stattdessen nach /etc/containers/systemd/ kopieren
# und "systemctl" ohne --user verwenden.
[Unit]
Description=TradeMind selbstlernender Krypto-Trading-Bot
Documentation=https://github.com/tlt-turbo/trademind
After=network-online.target
Wants=network-online.target
[Container]
Image=localhost/trademind:latest
ContainerName=trademind
AutoUpdate=local
# Konfiguration schreibgeschützt, Daten persistent
Volume=%h/.config/trademind:/config:ro,Z
Volume=trademind-data.volume:/data:Z
EnvironmentFile=%h/.config/trademind/trademind.env
Environment=TRADEMIND_CONFIG=/config/config.yaml
Exec=run --config /config/config.yaml
# Dashboard/Metriken nur auf dem Loopback-Interface
PublishPort=127.0.0.1:8080:8080
# Härtung
NoNewPrivileges=true
DropCapability=ALL
UserNS=keep-id
HealthCmd=python -c "import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1:8080/health', timeout=4).status==200 else 1)"
HealthInterval=30s
HealthTimeout=5s
HealthRetries=3
HealthStartPeriod=45s
[Service]
Restart=always
RestartSec=15
# SIGTERM zuerst die Engine beendet den laufenden Durchlauf und speichert das Modell.
TimeoutStopSec=90
[Install]
WantedBy=default.target