Resumen
El sistema Multi-Kline Management permite a MagicTradeBot cargar, cachear y mantener de forma eficiente los datos de velas (kline) en múltiples timeframes para cientos de miles de símbolos de trading al mismo tiempo, respetando estrictamente los límites de tasa de las APIs de los exchanges. Esta funcionalidad soporta estrategias completamente diferentes —desde scalping de alta frecuencia hasta trading posicional a largo plazo— todas ejecutándose concurrentemente con aislamiento total.
Capacidades principales
Carga de intervalos según estrategia
El bot carga dinámicamente los datos kline según el tipo de estrategia activa. Cada estrategia tiene timeframes óptimos predefinidos:
Intervalos por estrategia:
- HFT (High-Frequency Trading):
1m– Ejecución ultrarrápida en movimientos de minuto - Scalp:
15m– Operaciones de momentum corto plazo en gráficos de 15 minutos - Day Trading:
15m, 30m, 1h, 2h, 4h– Análisis intradía en múltiples timeframes - Swing Trading:
1h, 2h, 4h, 6h, 12h– Patrones de varias horas para entradas en posición - Long-Term:
1d– Gráficos diarios para análisis macro de tendencias - Default:
5m, 15m, 1h– Enfoque equilibrado multi-timeframe
Cada símbolo puede tener uno o varios intervalos cargados simultáneamente según la estrategia asignada, permitiendo confirmación multi-timeframe con máxima eficiencia de memoria.
Gestión inteligente de Rate Limits
Throttling adaptativo de peticiones
El sistema implementa un algoritmo avanzado que respeta las restricciones de las APIs:
maxRequestsPerSecond: 10– Límite duro del exchange por segundosafeBuffer: 0.2– Margen de seguridad (usa el 80 % de la capacidad máxima)- Tasa efectiva: 8 peticiones/segundo (10 × 0.8)
Estrategia de distribución de peticiones
Procesamiento por bloques (chunks) de símbolos:
chunk_size: 20– Símbolos obtenidos por ciclo de actualización- Distribuye cientos de miles de símbolos a lo largo del tiempo
- Evita violaciones de burst en la API
Tiempo de procesamiento del chunk = chunk_size / tasa_efectiva
Ejemplo: 20 símbolos / 8 req/s = 2,5 segundos por chunk
Ciclo de refresco:
kline_refresh_rate: 7segundos entre ciclos completos- Garantiza datos siempre frescos sin saturar las APIs
- Inserción adaptativa de retardos según tiempos de respuesta
Soporte multi-exchange
- Binance: 1200 peticiones/minuto (20/seg)
- OKX: 20 peticiones/2 segundos
- Bybit: 120 peticiones/5 segundos
El bot ajusta automáticamente maxRequestsPerSecond según el exchange detectado.
Almacenamiento eficiente de Klines en memoria
Enfoque de ventana deslizante
Para manejar grandes cantidades de símbolos sin agotar la RAM:
- Gestión por símbolo:
max_kline_length: 100– Máximo de velas retenidas por intervalo- Buffer circular (FIFO)
- Las velas antiguas se eliminan automáticamente al llegar nuevas
Objeto Kline único: ~200 bytes
Por símbolo (5 intervalos × 100 velas): ~100 KB
100.000 símbolos: ~10 GB de huella total en memoria
Carga diferida y caché
- Carga inicial obtiene todo el histórico
max_kline_length - Actualizaciones posteriores solo solicitan las velas más recientes
- Cache en memoria con expulsión LRU para símbolos inactivos
- Símbolos inactivos 24 h se eliminan automáticamente de la memoria
Ejecución concurrente de estrategias
Mapeo símbolo-estrategia
BTCUSDT:
strategy: "day"
intervals: ["15m", "1h", "4h"]
ETHUSDT:
strategy: "scalp"
intervals: ["15m"]
XRPUSDT:
strategy: "swing"
intervals: ["1h", "4h", "12h"]
Procesamiento aislado de señales
- signal_refresh_interval: 20 segundos (configurable por estrategia)
- Scalp → cada 20 segundos
- Long-term → cada 1800 segundos (30 min)
Cada símbolo calcula sus indicadores de forma independiente, sin contaminación cruzada entre estrategias. Las tareas pesadas de CPU se ejecutan en paralelo mediante workers.
Arquitectura de escalabilidad
Obtención distribuida de Klines
Sistema de cola con prioridad:
- Alta prioridad (operaciones abiertas)
- Prioridad media (señales fuertes)
- Baja prioridad (solo monitoreo)
- Datos obsoletos (sin actualizar en más de 2× el refresh rate)
Optimización de peticiones por lotes:
- Una sola llamada API puede obtener varios intervalos del mismo símbolo
- Reduce el total de peticiones en ~40 %
- Utiliza endpoints batch específicos del exchange
Tolerancia a fallos
- Límite alcanzado → backoff exponencial (2x, 4x, 8x)
- Petición fallida → hasta 3 reintentos
- Fallos persistentes → símbolo desactivado temporalmente
- Pérdida de conexión → peticiones en cola hasta reconexión
La validación de datos incluye:
- Detección de gaps en timestamps
- Detección de anomalías de precio
- Backfill automático
- Exclusión de datos obsoletos
Optimizaciones de rendimiento
Flujo del ciclo de actualización
Cada ciclo de refresco (cada 7 segundos):
- Fase de selección (0,1 s)
- Fase de obtención (2,5 s)
- Fase de procesamiento (1,5 s)
- Fase idle (2,9 s)
Rendimiento total:
- 2,86 símbolos/segundo
- 10.285 símbolos actualizados por hora
- 100.000 símbolos refrescados cada ~9,7 horas
Optimizaciones específicas por estrategia
- Scalp: refresco más rápido, buffers más pequeños
- Long-Term: refresco más lento, buffers estándar
Mejores prácticas de configuración
Portafolio pequeño (<1.000 símbolos)
chunk_size: 50
kline_refresh_rate: 5
maxRequestsPerSecond: 15
safeBuffer: 0.3
Portafolio mediano (1.000–10.000 símbolos)
chunk_size: 20
kline_refresh_rate: 7
maxRequestsPerSecond: 10
safeBuffer: 0.2
Portafolio grande (>100.000 símbolos)
chunk_size: 10
kline_refresh_rate: 10
maxRequestsPerSecond: 8
safeBuffer: 0.15
max_kline_length: 50
Ajustes por exchange
- Binance: chunks más grandes, refresco más rápido
- Exchanges estrictos: chunks más pequeños, refresco más lento
Ejemplo real
Escenario: Trading de 50.000 símbolos en Binance
chunk_size: 25
kline_refresh_rate: 8
maxRequestsPerSecond: 12
safeBuffer: 0.2
max_kline_length: 80
Rendimiento:
- Tasa efectiva: 9,6 req/seg
- Procesamiento de chunk: 2,6 segundos
- Refresco completo: cada ~4,4 horas
- Consumo de memoria: ~8 GB
- API/día: ~275.000
Análisis de resumen
Con la configuración summary_interval: "1d" se obtienen estadísticas diarias:
- Total de símbolos monitorizados
- Consumo de API
- Porcentaje de uso del rate limit
- Frescura de los datos
- Señales por estrategia
- Uso de memoria