Übersicht
Das Multi-Kline-Management-System ermöglicht MagicTradeBot das effiziente Laden, Cachen und Pflegen von Kerzendaten (Klines) mehrerer Zeitrahmen für Hunderttausende von Handelssymbolen gleichzeitig – unter strikter Einhaltung der API-Rate-Limits der Exchanges. Diese Funktion unterstützt unterschiedlichste Handelsstrategien – vom Hochfrequenz-Scalping bis zum langfristigen Positionstrading – die alle parallel und vollständig isoliert voneinander laufen.
Kernfunktionen
Strategiebasierte Intervall-Beladung
Der Bot lädt die Klines dynamisch je nach aktivem Strategietyp. Jede Strategie hat vordefinierte optimale Zeitrahmen:
Strategie-Intervalle:
- HFT (High-Frequency Trading):
1m– Ultrakurze Ausführung auf Minutenbewegungen - Scalp:
15m– Kurzfristige Momentum-Trades auf 15-Minuten-Charts - Day Trading:
15m, 30m, 1h, 2h, 4h– Intraday-Analyse über mehrere Zeitrahmen - Swing Trading:
1h, 2h, 4h, 6h, 12h– Mehrstündige Muster für Positionsaufnahmen - Long-Term:
1d– Tagescharts für makrotrendbasierte Analysen - Default:
5m, 15m, 1h– Ausgewogener Multi-Timeframe-Ansatz
Jedes Symbol kann je nach zugewiesener Strategie ein oder mehrere Intervalle gleichzeitig geladen haben – für Multi-Timeframe-Bestätigung bei hoher Speichereffizienz.
Intelligentes Rate-Limit-Management
Adaptives Request-Throttling
Das System verwendet einen ausgeklügelten Algorithmus, der die API-Beschränkungen der Exchanges respektiert:
maxRequestsPerSecond: 10– Harte Obergrenze der Exchange pro SekundesafeBuffer: 0.2– Sicherheitsreserve (nutzt 80 % der Maximalkapazität)- Effektive Rate: 8 Anfragen/Sekunde (10 × 0.8)
Verteilungsstrategie der Anfragen
Chunked Symbol-Verarbeitung:
chunk_size: 20– Symbole pro Aktualisierungszyklus- Verteilt Hunderttausende Symbole über die Zeit
- Verhindert API-Burst-Verstöße
Chunk-Verarbeitungszeit = chunk_size / effektive_rate
Beispiel: 20 Symbole / 8 req/s = 2,5 Sekunden pro Chunk
Aktualisierungszyklus:
kline_refresh_rate: 7Sekunden zwischen vollständigen Zyklen- Sichert kontinuierliche Datenfrische ohne API-Überlastung
- Adaptive Verzögerungen je nach Antwortzeiten
Multi-Exchange-Unterstützung
- Binance: 1200 Anfragen/Minute (20/sec)
- OKX: 20 Anfragen/2 Sekunden
- Bybit: 120 Anfragen/5 Sekunden
Der Bot passt maxRequestsPerSecond automatisch an die erkannte Exchange an.
Speichereffiziente Kline-Speicherung
Rolling-Window-Ansatz
Um riesige Symbolmengen ohne Speicherüberlauf zu handhaben:
- Pro-Symbol-Kline-Management:
max_kline_length: 100– Maximale Kerzen pro Intervall- Kreisförmiger Buffer (FIFO)
- Alte Kerzen werden automatisch verdrängt
Einzelnes Kline-Objekt: ~200 Byte
Pro Symbol (5 Intervalle × 100 Kerzen): ~100 KB
100.000 Symbole: ~10 GB Gesamtspeicherbedarf
Lazy Loading & Caching
- Erstladung holt komplette Historie
max_kline_length - Folgende Updates nur neueste Kerzen
- In-Memory-Cache mit LRU-Eviction für inaktive Symbole 24h inaktive Symbole werden automatisch aus dem Speicher entfernt
Parallele Strategieausführung
Symbol-Strategie-Zuordnung
BTCUSDT:
strategy: "day"
intervals: ["15m", "1h", "4h"]
ETHUSDT:
strategy: "scalp"
intervals: ["15m"]
XRPUSDT:
strategy: "swing"
intervals: ["1h", "4h", "12h"]
Isolierte Signalverarbeitung
- signal_refresh_interval: 20 Sekunden (pro Strategie konfigurierbar)
- Scalp → alle 20 Sekunden
- Long-term → alle 1800 Sekunden (30 min)
Jedes Symbol berechnet seine Indikatoren unabhängig – keine Kreuzkontamination zwischen Strategien. CPU-intensive Aufgaben laufen parallel in Worker-Threads.
Skalierbarkeitsarchitektur
Verteiltes Kline-Fetching
Priorisierte Warteschlange:
- Hochpriorität (aktive Trades)
- Mittlere Priorität (starke Signale)
- Niedrige Priorität (nur Monitoring)
- Veraltete Daten (länger als 2× Refresh-Rate nicht aktualisiert)
Batch-Request-Optimierung:
- Ein API-Call kann mehrere Intervalle eines Symbols holen
- Reduziert Gesamtanzahl der Requests um ~40 %
- Nutzt exchange-spezifische Batch-Endpunkte
Fehlertoleranz
- Rate-Limit erreicht → Exponentielles Backoff (2x, 4x, 8x)
- Fehlgeschlagene Anfrage → bis zu 3 Wiederholungen
- Anhaltende Fehler → Symbol temporär deaktiviert
- Verbindungsverlust → Anfragen werden zwischengespeichert
Datenvalidierung umfasst:
- Timestamp-Lücken-Erkennung
- Preisanomalie-Erkennung
- Automatisches Backfilling
- Ausschluss veralteter Daten
Performance-Optimierungen
Ablauf pro Refresh-Zyklus
Alle 7 Sekunden:
- Auswahlphase (0,1 s)
- Fetch-Phase (2,5 s)
- Verarbeitungsphase (1,5 s)
- Leerlaufphase (2,9 s)
Gesamtdurchsatz:
- 2,86 Symbole/Sekunde
- 10.285 Symbole pro Stunde aktualisiert
- 100.000 Symbole alle ~9,7 Stunden komplett erneuert
Strategie-spezifische Optimierungen
- Scalp: schneller Refresh, kleinere Buffer
- Long-Term: langsamer Refresh, Standard-Buffer
Konfigurations-Best-Practices
Kleines Portfolio (<1.000 Symbole)
chunk_size: 50
kline_refresh_rate: 5
maxRequestsPerSecond: 15
safeBuffer: 0.3
Mittleres Portfolio (1.000–10.000 Symbole)
chunk_size: 20
kline_refresh_rate: 7
maxRequestsPerSecond: 10
safeBuffer: 0.2
Großes Portfolio (>100.000 Symbole)
chunk_size: 10
kline_refresh_rate: 10
maxRequestsPerSecond: 8
safeBuffer: 0.15
max_kline_length: 50
Exchange-spezifisches Tuning
- Binance: größere Chunks, schnellerer Refresh
- Strenge Exchanges: kleinere Chunks, langsamere Refresh-Rate
Real-World-Beispiel
Szenario: Handel mit 50.000 Symbolen auf Binance
chunk_size: 25
kline_refresh_rate: 8
maxRequestsPerSecond: 12
safeBuffer: 0.2
max_kline_length: 80
Performance:
- Effektive Rate: 9,6 req/sec
- Chunk-Verarbeitung: 2,6 Sekunden
- Vollständiger Refresh: alle ~4,4 Stunden
- Speicherverbrauch: ~8 GB
- API-Anfragen/Tag: ~275.000
Zusammenfassende Analysen
Die Einstellung summary_interval: "1d" liefert tägliche Übersichtsstatistiken:
- Gesamtzahl überwachte Symbole
- API-Nutzung
- Rate-Limit-Auslastung (%)
- Datenfrische
- Signale pro Strategie
- Speicherverbrauch