Commit ba0abc
2026-05-07 16:12:59 Claude Code: feat(ct-128): Trading Bot (Freqtrade) Doku hinzugefuegt| container-und-vms.md .. | |
| @@ 1,38 1,45 @@ | |
| # Container & VMs | |
| > [!TIP] | |
| - | > Diese Seite ist als schnelle Betriebsübersicht gedacht. Mit der Datentabelle kannst du nach Status, Rolle oder Namen suchen. |
| + | > Diese Seite ist als schnelle Betriebsuebersicht gedacht. Mit der Datentabelle kannst du nach Status, Rolle oder Namen suchen. |
| - | ## Laufende Systeme |
| + | ## Aktiver Stand laut Proxmox |
| | Typ | ID | Name | Status | IP / Zugriff | | |
| |---|---:|---|---|---| | |
| - | | CT | 101 | jellyfin | läuft | `192.168.178.55` | |
| - | | CT | 102 | pbs | läuft | `192.168.178.60` | |
| - | | CT | 103 | fileserver | läuft | `192.168.178.61` | |
| - | | CT | 104 | immich | läuft | `192.168.178.62` | |
| - | | CT | 108 | wiki | läuft | `192.168.178.77` | |
| - | | CT | 109 | claw | läuft | `192.168.178.75` | |
| - | | CT | 112 | claude-code | läuft | `192.168.178.82` / `terminal.ls-cloud.biz` | |
| - | | CT | 113 | authelia | läuft | `192.168.178.64` / `auth.ls-cloud.biz` | |
| + | | CT | 101 | jellyfin | laeuft | `192.168.178.55` / `stream.ls-cloud.biz` | |
| + | | CT | 102 | pbs | laeuft | `192.168.178.60` / `backup.ls-cloud.biz` | |
| + | | CT | 103 | fileserver | laeuft | `192.168.178.61` / `files.ls-cloud.biz` | |
| + | | CT | 104 | immich | laeuft | `192.168.178.62` / `fotos.ls-cloud.biz` | |
| + | | CT | 105 | downloads | laeuft | `192.168.178.63` / `requests.ls-cloud.biz` u.a. / [[ct-105-downloads]] | |
| + | | CT | 106 | openclaw | gestoppt | fruehere Instanz | |
| + | | CT | 107 | monitoring | gestoppt | `192.168.178.72` / Monitoring nur situativ | |
| + | | CT | 108 | wiki | laeuft | `192.168.178.77` / `wiki.ls-cloud.biz` | |
| + | | CT | 109 | claw | laeuft | `192.168.178.75` | |
| + | | CT | 110 | termix | laeuft | `192.168.178.95` / `termix.ls-cloud.biz` / [[ct-110-termix]] | |
| + | | CT | 111 | webserver | laeuft | `192.168.178.79` / `web.ls-cloud.biz` | |
| + | | CT | 112 | claude-code | laeuft | `192.168.178.82` / `terminal.ls-cloud.biz` | |
| + | | CT | 113 | authelia | laeuft | `192.168.178.64` / `auth.ls-cloud.biz` | |
| | CT | 114 | games | gestoppt | `192.168.178.84` / `games.ls-cloud.biz` | | |
| - | | CT | 117 | technitium-dns | läuft | `192.168.178.87` / `dns.ls-cloud.biz` | |
| - | | CT | 118 | paperclipai | läuft | `192.168.178.88` / `agent.ls-cloud.biz` | |
| - | | CT | 120 | dashboard | läuft | `192.168.178.90` | |
| - | | CT | 121 | vaultwarden | läuft | `192.168.178.91` / `pw.ls-cloud.biz` | |
| - | | CT | 122 | karakeep | läuft | `192.168.178.92` / `keep.ls-cloud.biz` | |
| - | | CT | 123 | cs16 | läuft | `192.168.178.93` / `cs.ls-cloud.biz` | |
| - | | VM | 200 | Windows11Pro | gestoppt | Proxmox-Konsole / [[vm-200-windows11pro]] | |
| + | | CT | 117 | technitium-dns | laeuft | `192.168.178.87` / `dns.ls-cloud.biz` | |
| + | | CT | 118 | paperclipai | laeuft | `192.168.178.88` / `agent.ls-cloud.biz` | |
| + | | CT | 119 | azeroth | gestoppt | `192.168.178.89` / `panel.ls-cloud.biz` / [[ct-119-azerothcore]] | |
| + | | CT | 121 | vaultwarden | laeuft | `192.168.178.91` / `pw.ls-cloud.biz` / [[ct-121-vaultwarden]] | |
| + | | CT | 122 | karakeep | laeuft | `192.168.178.92` / `keep.ls-cloud.biz` | |
| + | | CT | 123 | cs16 | laeuft | `192.168.178.93` / `cs.ls-cloud.biz` | |
| + | | CT | 124 | homarr | laeuft | `192.168.178.94` / `ls-cloud.biz` | |
| + | | CT | 125 | norish | laeuft | `192.168.178.96` / `norish.ls-cloud.biz` | |
| + | | CT | 126 | tdarr | laeuft | `192.168.178.73` / `transcode.ls-cloud.biz` / [[ct-126-tdarr]] | |
| + | | CT | 128 | bot | laeuft | `192.168.178.97` / `bot.ls-cloud.biz` / [[ct-128-bot]] | |
| {{DataTable}} | |
| - | ## Situative oder bewusst gestoppte Systeme |
| + | ## Hinweise |
| - | - **CT 105 `downloads`** — läuft derzeit, aber die öffentlichen Dienste sind situativ relevant |
| - | - **CT 111 `webserver`** — läuft derzeit; Relevanz entsteht vor allem über `web.ls-cloud.biz` |
| - | - **CT 100 `guacamole`** — derzeit gestoppt |
| - | - **CT 106 `openclaw`** — frühere Instanz / derzeit gestoppt |
| - | - **CT 107 `monitoring`** — derzeit gestoppt / nur bei aktivem Monitoring relevant |
| + | - **CT 115 `local-ai`** und **CT 116 `openclaw-local`** nicht mehr in `pct list` — wurden entfernt. |
| + | - **CT 120 `dashboard`** abgeloest durch **CT 124 `homarr`** hinter `ls-cloud.biz`. |
| + | - **CT 119 `azeroth`** ist gestoppt; Caddy-Eintrag `panel.ls-cloud.biz` existiert noch. |
| + | - **CT 114 `games`** und **CT 107 `monitoring`** sind bewusst gestoppt. |
| > [!WARNING] | |
| - | > Bewusst gestoppt heißt hier nicht automatisch defekt. Es heißt nur: Caddy oder Nutzererwartung können trotzdem unerquicklich reagieren, wenn noch ein Pfad darauf zeigt. |
| + | > Bewusst gestoppt heisst hier **nicht** automatisch defekt. In deinem Setup ist das haeufig schlicht Ressourcenhygiene. Relevant ist nur, ob eine oeffentliche Domain trotz absichtlich gestopptem Backend weiter aktiv bleiben soll. |
| /dev/null .. ct-128-bot.md | |
| @@ 0,0 1,219 @@ | |
| + | # CT 128 `bot` — Trading Bot (Freqtrade) |
| + | |
| + | > **Zweck:** Automatisierter Krypto-Trading-Bot mit Freqtrade auf Binance Spot/USDC. Inklusive Live-Dashboard und Web-basierter Container-Steuerung. |
| + | |
| + | ## Rolle |
| + | CT 128 ist der dedizierte Trading-Container. Hier läuft **Freqtrade** — ein Open-Source-Crypto-Trading-Bot — als Docker-Stack mit drei Services: |
| + | - **freqtrade**: der eigentliche Trading-Bot (Strategie-Execution, Order-Management) |
| + | - **dashboard**: Nginx-Webserver mit Live-Trading-Übersicht |
| + | - **ctrl**: Leichtgewichtiger Docker-Control-Proxy für Web-basierte Container-Steuerung |
| + | |
| + | ## Basisdaten |
| + | - **CT-ID:** 128 |
| + | - **Hostname:** `bot` |
| + | - **IP:** `192.168.178.97` |
| + | - **OS:** Ubuntu 24.04 |
| + | - **Ressourcen:** 2 Cores, 2 GB RAM, 20 GB Disk |
| + | - **Öffentliche URLs:** |
| + | - `https://bot.ls-cloud.biz` — Trading-Dashboard (via Authelia geschützt) |
| + | - `https://ui.bot.ls-cloud.biz` — Bot-Steuerungs-UI |
| + | |
| + | ## Technischer Aufbau |
| + | |
| + | ``` |
| + | CT 128 (bot) · 192.168.178.97 |
| + | ├── freqtrade (Docker) → localhost:8080 (API) |
| + | ├── dashboard (nginx) → 0.0.0.0:5001 (Web-Dashboard) |
| + | ├── ctrl (Python/Docker) → intern:5003 (Steuer-Proxy) |
| + | └── Caddy Reverse Proxy (auf Host lscloud) |
| + | ├── bot.ls-cloud.biz → Authelia → :5001 |
| + | └── ui.bot.ls-cloud.biz → :5002 |
| + | ``` |
| + | |
| + | - **Freqtrade-Image:** `freqtradeorg/freqtrade:stable` |
| + | - **Dashboard:** `nginx:alpine` mit statischem HTML (keine externen CDN-Abhängigkeiten) |
| + | - **Ctrl:** Alpine-basierter Python-Microservice mit Docker-Socket-Zugriff |
| + | |
| + | ## Alle Pfade |
| + | |
| + | ``` |
| + | /opt/freqtrade/ ← Hauptverzeichnis (docker-compose root) |
| + | ├── config.json ← ⭐ Freqtrade-Konfiguration |
| + | ├── docker-compose.yml ← Docker Stack Definition |
| + | ├── nginx.conf ← Dashboard Nginx-Konfiguration |
| + | ├── dashboard.html ← Dashboard HTML (selbst enthalten) |
| + | │ |
| + | ├── user_data/ ← Freqtrade Datenverzeichnis |
| + | │ ├── strategies/ ← Trading-Strategien (.py) |
| + | │ │ ├── MrXScalper.py ← Aktive Strategie |
| + | │ │ ├── MrXStrategy.py ← Frühere Strategie (langsamer) |
| + | │ │ ├── MyStrategy.py ← Erste Eigenentwicklung |
| + | │ │ └── sample_strategy.py ← Freqtrade-Beispiel |
| + | │ ├── logs/ |
| + | │ │ └── freqtrade.log ← Bot-Logdatei |
| + | │ └── tradesv3.sqlite ← Trade-Datenbank |
| + | │ |
| + | └── ctrl/ ← Docker-Control-Microservice |
| + | ├── Dockerfile |
| + | └── ctrl.py |
| + | ``` |
| + | |
| + | ## Config-Erklärung (`config.json`) |
| + | |
| + | ### Trading-Parameter |
| + | | Parameter | Wert | Bedeutung | |
| + | |-----------|------|-----------| |
| + | | `max_open_trades` | `6` | Maximal 6 gleichzeitige Trades | |
| + | | `stake_amount` | `15` | 15 USDC pro Trade | |
| + | | `stake_currency` | `USDC` | Basiswährung | |
| + | | `tradable_balance_ratio` | `0.95` | 95% des Guthabens nutzbar | |
| + | | `dry_run` | `false` | **LIVE-Trading** (echte Orders!) | |
| + | | `timeframe` | `5m` | 5-Minuten-Kerzen | |
| + | | `cancel_open_orders_on_exit` | `false` | Orders bei Bot-Stopp behalten | |
| + | |
| + | ### Exchange (Binance) |
| + | ```json5 |
| + | { |
| + | exchange: { |
| + | name: "binance", |
| + | key: "***", // Binance API-Key |
| + | secret: "***", // Binance API-Secret |
| + | ccxt_config: { enableRateLimit: true }, |
| + | pair_whitelist: [".*/USDC"], // Alle USDC-Paare |
| + | pair_blacklist: [ |
| + | "BNB/USDC", "USDT/USDC", // Stablecoins & BNB ausgeschlossen |
| + | "FDUSD/USDC", "USDP/USDC", |
| + | "TUSD/USDC", "EUR/USDC" |
| + | ] |
| + | } |
| + | } |
| + | ``` |
| + | |
| + | ### Pair-Filter (Dynamische Paarauswahl) |
| + | Jeder Zyklus wählt automatisch die 12 liquidesten USDC-Paare: |
| + | 1. **VolumePairList** — Top 12 nach Quote-Volume, refresh alle 30 min |
| + | 2. **AgeFilter** — Nur Coins >60 Tage gelistet |
| + | 3. **SpreadFilter** — Max 0.35% Spread |
| + | 4. **RangeStabilityFilter** — Min 3% Bewegung in 7 Tagen |
| + | 5. **VolatilityFilter** — 2-50% Volatilität (vermeidet tote und zu wilde Märkte) |
| + | |
| + | ### Pricing |
| + | - Nutzt **Order Book** (Top-Level) für Entry/Exit-Preisermittlung |
| + | - `price_side: "same"` → gleiche Seite wie Orderrichtung |
| + | |
| + | ### API-Server |
| + | | Einstellung | Wert | |
| + | |-------------|------| |
| + | | Port | `8080` (intern, nur localhost) | |
| + | | Auth | Username/Password + JWT | |
| + | | OpenAPI | deaktiviert | |
| + | | CORS | `*` (für Dashboard) | |
| + | |
| + | ### Telegram-Alerts |
| + | Freqtrade hat einen **eigenen Telegram-Bot** für Trade-Benachrichtigungen (getrennt vom OpenClaw-Bot). |
| + | |
| + | ### Sonstiges |
| + | - `force_entry_enable: true` → Manuelle Trade-Einstiege per API möglich |
| + | - `process_throttle_secs: 5` → 5s Verarbeitungsintervall |
| + | - `initial_state: "running"` → Startet automatisch mit Trading |
| + | |
| + | ## Strategie: MrXScalper |
| + | |
| + | **Typ:** Long-only Spot-Scalping auf 5m-Kerzen |
| + | |
| + | **Signale:** |
| + | - **EMA9/EMA21** — Lokaler Trendfilter |
| + | - **RSI-Cross-Up** — Momentum-Trigger (schneller Einstieg) |
| + | - **BB-Width** — Volatilitätsfilter (keine toten Märkte) |
| + | - **Volume > 20-MA** — Volumen-Confirmation |
| + | |
| + | **Risk-Management:** |
| + | | Parameter | Wert | |
| + | |-----------|------| |
| + | | Stoploss | -2.5% (Tight-Stop) | |
| + | | Trailing Stop | Ja, ab +1.2% | |
| + | | Trailing Offset | 0.5% | |
| + | | ROI Stufe 1 | 1.5% sofort | |
| + | | ROI Stufe 2 | 0.8% nach 20 min | |
| + | | ROI Stufe 3 | 0.3% nach 1 h | |
| + | | ROI Stufe 4 | jeder Profit nach 3 h | |
| + | |
| + | **Order-Typen:** Limit-Orders (Entry + Exit), Market bei Stoploss |
| + | |
| + | **Hyperopt-fähig:** RSI-Parameter sind optimierbar |
| + | |
| + | ## Dashboard |
| + | |
| + | Erreichbar unter `https://bot.ls-cloud.biz` (nach Authelia-Login). |
| + | |
| + | **Funktionen:** |
| + | - Wallet-Übersicht (Gesamtwert, investiert, Profit) |
| + | - Offene Trades (Pair, Einstieg, aktueller Kurs, PnL) |
| + | - Tages-Chart (Canvas-basiert, keine externen Abhängigkeiten) |
| + | - **Wichtig:** Zeigt Bot-interne Werte, **nicht** das echte Binance-Wallet! |
| + | |
| + | **Architektur:** |
| + | - Nginx liefert `dashboard.html` aus |
| + | - `/api/` → Proxy zu Freqtrade API (Port 8080) mit Basic Auth |
| + | - `/admin/` → Proxy zu ctrl-Service (Container-Steuerung) |
| + | - Vollständig selbst enthaltenes HTML/CSS/JS (mobil-tauglich) |
| + | |
| + | ## Betrieb & Wartung |
| + | |
| + | ### Container-Status |
| + | ```bash |
| + | # Auf dem Proxmox-Host |
| + | pct status 128 |
| + | pct exec 128 -- docker compose -f /opt/freqtrade/docker-compose.yml ps |
| + | ``` |
| + | |
| + | ### Docker-Services steuern |
| + | ```bash |
| + | # In CT128 |
| + | cd /opt/freqtrade |
| + | |
| + | # Alle Services neustarten |
| + | docker compose down && docker compose up -d |
| + | |
| + | # Logs einsehen |
| + | docker compose logs -f freqtrade |
| + | docker compose logs -f --tail 50 freqtrade |
| + | |
| + | # Nur Config neu laden (ohne Neustart) |
| + | docker compose restart freqtrade |
| + | ``` |
| + | |
| + | ### Config ändern |
| + | 1. Config editieren: `nano /opt/freqtrade/config.json` |
| + | 2. Strategie-Datei editieren: `nano /opt/freqtrade/user_data/strategies/MrXScalper.py` |
| + | 3. Bei Config-Änderung: `docker compose restart freqtrade` |
| + | 4. Bei Strategie-Änderung: `docker compose restart freqtrade` |
| + | 5. Bei docker-compose.yml-Änderung: `docker compose down && docker compose up -d` |
| + | |
| + | ### ⚠️ Live-Trading-Hinweise |
| + | - `dry_run: false` → **Echte Orders auf Binance!** |
| + | - API-Keys haben Trade-Berechtigung |
| + | - Vor Änderungen immer prüfen, ob offene Trades existieren |
| + | - Bei Unsicherheit vorher: `docker compose stop freqtrade` |
| + | |
| + | ### Backup |
| + | - Gesamtes `/opt/freqtrade/` regelmäßig sichern |
| + | - Wichtigste Dateien: `config.json`, `user_data/strategies/`, `tradesv3.sqlite` |
| + | |
| + | ## Verknüpfte Dienste |
| + | |
| + | | Dienst | CT | Zweck | |
| + | |--------|-----|-------| |
| + | | Authelia | 113 | Schützt bot.ls-cloud.biz | |
| + | | Caddy | Host | TLS + Reverse Proxy | |
| + | | OpenClaw | 109 | KI-Assistent (verwaltet/analysiert den Bot) | |
| + | |
| + | ## Troubleshooting |
| + | |
| + | | Problem | Check | |
| + | |---------|-------| |
| + | | Bot traded nicht | `docker compose logs freqtrade \| grep -i error` | |
| + | | Dashboard leer | `docker compose logs dashboard` | |
| + | | Keine Internetverbindung | DNS-Check in CT128: `cat /etc/resolv.conf` (sollte 8.8.8.8 sein) | |
| + | | API nicht erreichbar | `curl http://localhost:8080/api/v1/ping` | |
| + | | Config-Fehler | `docker compose logs freqtrade \| head -20` | |
| services-uebersicht.md .. | |
| @@ 15,22 15,35 @@ | |
| | `qbit.ls-cloud.biz` | `192.168.178.63:8081` | CT 105 `downloads` | qBittorrent | situativ | | |
| | `usenet.ls-cloud.biz` | `192.168.178.63:8082` | CT 105 `downloads` | SABnzbd | situativ | | |
| | `dl.ls-cloud.biz` | `192.168.178.63:9696` | CT 105 `downloads` | Prowlarr | situativ | | |
| - | | `net.ls-cloud.biz` | `192.168.178.72:3000` | CT 107 `monitoring` | ntopng / Monitoring | situativ | |
| + | | `requests.ls-cloud.biz` | `192.168.178.63:5055` | CT 105 `downloads` | Jellyseerr Anfragen-Portal | erreichbar | |
| + | | `net.ls-cloud.biz` | `192.168.178.72:3000` | CT 107 `monitoring` | ntopng / Monitoring | bewusst gestoppt / bei Bedarf aktivierbar | |
| | `wiki.ls-cloud.biz` | `192.168.178.77:8080` | CT 108 `wiki` | OtterWiki | erreichbar | | |
| - | | `web.ls-cloud.biz` | `192.168.178.79:80` | CT 111 `webserver` | Webserver / Webspace | nur wenn CT 111 läuft | |
| - | | `games.ls-cloud.biz` | `192.168.178.84:8080` | CT 114 `games` | Games / EmulatorJS-Webdienst | erreichbar | |
| + | | `web.ls-cloud.biz` | `192.168.178.79:80` | CT 111 `webserver` | Webserver / Webspace | erreichbar, solange CT 111 laeuft | |
| + | | `games.ls-cloud.biz` | `192.168.178.84:8080` | CT 114 `games` | Games / EmulatorJS-Webdienst | bewusst gestoppt / bei Bedarf aktivierbar | |
| | `terminal.ls-cloud.biz` | `192.168.178.82:7681` | CT 112 `claude-code` | Webterminal (Shell In A Box) | erreichbar | | |
| - | | `live.ls-cloud.biz` | `192.168.178.54:8080` | CT 100 `guacamole` / Altpfad | Guacamole | problematisch, wenn CT 100 gestoppt | |
| - | |
| + | | `agent.ls-cloud.biz` | `192.168.178.88:3101` | CT 118 `paperclipai` | PaperclipAI Multi-Agent Platform | via Authelia geschuetzt | |
| + | | `bot.ls-cloud.biz` | `192.168.178.97:5001` | CT 128 `bot` | Trading Bot Dashboard (Freqtrade) | via Authelia geschuetzt | |
| + | | `panel.ls-cloud.biz` | `192.168.178.89:80` | CT 119 `azeroth` | WoW Webpanel (FusionCMS) | bewusst gestoppt / bei Bedarf aktivierbar | |
| + | | `wow.ls-cloud.biz` | `192.168.178.89:8085` | CT 119 `azeroth` | AzerothCore WotLK Realm | bei Bedarf aktivierbar | |
| | `pw.ls-cloud.biz` | `192.168.178.91:8080` | CT 121 `vaultwarden` | Vaultwarden Passwortmanager | erreichbar | | |
| + | | `ls-cloud.biz` | `192.168.178.94:7575` | CT 124 `homarr` | Homarr Dashboard | erreichbar | |
| + | | `www.ls-cloud.biz` | Redirect auf `ls-cloud.biz` | CT 124 `homarr` | WWW-Redirect | erreichbar | |
| + | | `dns.ls-cloud.biz` | `192.168.178.87:5380` | CT 117 `technitium-dns` | Technitium DNS Web UI | erreichbar | |
| + | | `auth.ls-cloud.biz` | `192.168.178.64:9091` | CT 113 `authelia` | Authelia Portal | erreichbar | |
| + | | `keep.ls-cloud.biz` | `192.168.178.92:3000` | CT 122 `karakeep` | Karakeep | erreichbar | |
| + | | `cs.ls-cloud.biz` | `192.168.178.93:27016` | CT 123 `cs16` | CS 1.6 Web-Client | erreichbar | |
| + | | `termix.ls-cloud.biz` | `192.168.178.95:8080` | CT 110 `termix` | Termix Web-basierte Serververwaltung mit SSH/RDP | via Authelia vorgeschaltet | |
| + | | `norish.ls-cloud.biz` | `192.168.178.96:3000` | CT 125 `norish` | Norish Rezept-App | erreichbar | |
| + | | `transcode.ls-cloud.biz` | `192.168.178.73:8265` | CT 126 `tdarr` | Tdarr Medien-Transcoder (Intel QSV) | erreichbar | |
| {{DataTable}} | |
| ## Hinweise | |
| > [!IMPORTANT] | |
| - | > Gestoppte Container erklären oft auch öffentliche Fehlerbilder direkt. Erst Backend-Status prüfen, dann Caddy verdächtigen. |
| + | > Gestoppte Container erklaeren oft auch oeffentliche Fehlerbilder direkt. Erst Backend-Status pruefen, dann Caddy verdaechtigen. |
| - | - `web.ls-cloud.biz` hängt am Zustand von **CT 111** |
| - | - `live.ls-cloud.biz` hängt am Zustand von **CT 100** |
| + | - `web.ls-cloud.biz` haengt am Zustand von **CT 111** |
| - `terminal.ls-cloud.biz` ist ein Webterminal, kein normaler Webdienst im klassischen Sinn | |
| + | - `termix.ls-cloud.biz` ist mit Authelia vor dem Termix-Backend abgesichert |
| + | - **Nicht jeder gestoppte CT ist ein Fehlerbild**: `net`, `games` und `panel` koennen bewusst stillgelegt sein, um Ressourcen zu sparen. |
