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
+50
View File
@@ -0,0 +1,50 @@
# Start: podman-compose up -d Logs: podman-compose logs -f
# Stop: podman-compose down Build: podman-compose build
#
# Die Datei funktioniert auch mit docker-compose; ":Z" ist eine SELinux-Kennzeichnung
# und wird auf Systemen ohne SELinux ignoriert.
services:
trademind:
build:
context: .
dockerfile: Containerfile
image: localhost/trademind:latest
container_name: trademind
restart: unless-stopped
# Geheimnisse und Schalter Vorlage: config/trademind.env.example
env_file:
- ./config/trademind.env
command: ["run", "--config", "/config/config.yaml"]
ports:
- "127.0.0.1:8080:8080" # Dashboard nur lokal erreichbar
volumes:
- ./config:/config:ro,Z # Konfiguration schreibgeschützt hineinreichen
- trademind-data:/data:Z # SQLite-Datenbank und trainiertes Modell
healthcheck:
test: ["CMD", "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)"]
interval: 30s
timeout: 5s
retries: 3
start_period: 45s
# Absicherung: keine zusätzlichen Rechte, Dateisystem nur dort schreibbar, wo nötig.
security_opt:
- no-new-privileges:true
read_only: false
tmpfs:
- /tmp:size=64m
logging:
driver: json-file
options:
max-size: "10m"
max-file: "5"
volumes:
trademind-data: