Обзор
Система Multi-Kline Management позволяет MagicTradeBot эффективно загружать, кэшировать и поддерживать актуальными данные свечей (kline) по нескольким таймфреймам для сотен тысяч торговых символов одновременно, строго соблюдая лимиты API бирж. Эта функция поддерживает совершенно разные стратегии — от высокочастотного скальпинга до долгосрочного позиционного трейдинга — и запускает их все параллельно с полной изоляцией друг от друга.
Ключевые возможности
Загрузка интервалов в зависимости от стратегии
Бот динамически подгружает kline-данные в зависимости от активного типа стратегии. Для каждой стратегии заранее определены оптимальные таймфреймы:
Интервалы по стратегиям:
- HFT (высокочастотный трейдинг):
1m— ультрабыстрое исполнение на минутных движениях - Scalp:
15m— короткие моментум-сделки на 15-минутных графиках - Day Trading:
15m, 30m, 1h, 2h, 4h— внутридневной анализ на нескольких таймфреймах - Swing Trading:
1h, 2h, 4h, 6h, 12h— многочасовые паттерны для входа в позиции - Long-Term:
1d— дневные графики для анализа макротрендов - Default:
5m, 15m, 1h— сбалансированный мульти-таймфрейм подход
Каждый символ может одновременно держать один или несколько интервалов в зависимости от назначенной стратегии — это даёт мульти-таймфрейм-подтверждение при высокой экономии памяти.
Интеллектуальное управление Rate Limit
Адаптивное троттлинг запросов
Система использует продвинутый алгоритм, полностью соблюдающий ограничения бирж:
maxRequestsPerSecond: 10— жёсткий лимит биржи в секундуsafeBuffer: 0.2— запас безопасности (используется 80 % от максимума)- Эффективный рейт: 8 запросов/сек (10 × 0.8)
Стратегия распределения запросов
Обработка символов чанками:
chunk_size: 20— символов за один цикл обновления- Распределяет сотни тысяч символов во времени
- Исключает burst-нарушения API
Время обработки чанка = chunk_size / эффективный_рейт
Пример: 20 символов / 8 req/s = 2,5 сек на чанк
Цикл обновления:
kline_refresh_rate: 7секунд между полными циклами- Гарантирует свежесть данных без перегрузки API
- Адаптивная вставка задержек по времени ответа
Поддержка множества бирж
- Binance: 1200 запросов/минуту (20/сек)
- OKX: 20 запросов/2 секунды
- Bybit: 120 запросов/5 секунд
Бот автоматически подстраивает maxRequestsPerSecond под обнаруженную биржу.
Экономичное хранение Kline в памяти
Подход скользящего окна
Для работы с огромным количеством символов без исчерпания RAM:
- Управление Kline по символу:
max_kline_length: 100— максимум свечей на каждый интервал- Кольцевой буфер (FIFO)
- Старые свечи автоматически вытесняются новыми
Один объект Kline: ~200 байт
На символ (5 интервалов × 100 свечей): ~100 КБ
100 000 символов: ~10 ГБ общей памяти
Lazy loading и кэширование
- Первая загрузка берёт полный объём
max_kline_length - Последующие обновления запрашивают только самые новые свечи
- Внутрипроцессный кэш с LRU-вытеснением неактивных символов
- Символы, неактивные 24 ч, автоматически удаляются из памяти
Параллельное выполнение стратегий
Маппинг символ → стратегия
BTCUSDT:
strategy: "day"
intervals: ["15m", "1h", "4h"]
ETHUSDT:
strategy: "scalp"
intervals: ["15m"]
XRPUSDT:
strategy: "swing"
intervals: ["1h", "4h", "12h"]
Изолированная обработка сигналов
- signal_refresh_interval: 20 секунд (настраивается по стратегии)
- Scalp → каждые 20 сек
- Long-term → каждые 1800 сек (30 мин)
Каждый символ считает свои индикаторы независимо — никакого пересечения между стратегиями. Тяжёлые CPU-задачи выполняются параллельно в воркер-потоках.
Архитектура масштабируемости
Распределённая загрузка Kline
Приоритетная очередь:
- Высокий приоритет (открытые сделки)
- Средний (сильные сигналы)
- Низкий (только мониторинг)
- Устаревшие данные (не обновлялись более 2× refresh rate)
Оптимизация пакетных запросов:
- Один API-вызов может взять несколько интервалов одного символа
- Снижает общее количество запросов примерно на 40 %
- Используются биржевые batch-endpoint’ы
Отказоустойчивость
- Достигнут rate limit → экспоненциальный backoff (2x, 4x, 8x)
- Неудачный запрос → до 3 повторов
- Постоянные сбои → символ временно отключается
- Потеря соединения → запросы ставятся в очередь до восстановления
Валидация данных включает:
- Обнаружение пропусков таймстампов
- Обнаружение аномалий цены
- Автоматический бэкфилл
- Исключение устаревших данных
Оптимизация производительности
Рабочий цикл обновления
Каждые 7 секунд (цикл):
- Фаза выбора (0,1 с)
- Фаза загрузки (2,5 с)
- Фаза обработки (1,5 с)
- Фаза простоя (2,9 с)
Общая пропускная способность:
- 2,86 символа/сек
- 10 285 символов обновляется в час
- 100 000 символов полностью обновляются каждые ~9,7 ч
Оптимизации под конкретные стратегии
- Scalp: быстрый рефреш, маленькие буферы
- Long-Term: медленный рефреш, стандартные буферы
Рекомендации по настройке
Малый портфель (<1 000 символов)
chunk_size: 50
kline_refresh_rate: 5
maxRequestsPerSecond: 15
safeBuffer: 0.3
Средний портфель (1 000–10 000 символов)
chunk_size: 20
kline_refresh_rate: 7
maxRequestsPerSecond: 10
safeBuffer: 0.2
Большой портфель (>100 000 символов)
chunk_size: 10
kline_refresh_rate: 10
maxRequestsPerSecond: 8
safeBuffer: 0.15
max_kline_length: 50
Тюнинг под конкретную биржу
- Binance: крупные чанки, быстрый рефреш
- Жёсткие биржи: мелкие чанки, медленный рефреш
Реальный пример
Сценарий: торговля 50 000 символов на Binance
chunk_size: 25
kline_refresh_rate: 8
maxRequestsPerSecond: 12
safeBuffer: 0.2
max_kline_length: 80
Производительность:
- Эффективный рейт: 9,6 req/сек
- Обработка чанка: 2,6 сек
- Полный рефреш: каждые ~4,4 ч
- Потребление RAM: ~8 ГБ
- API-запросов в сутки: ~275 000
Сводная аналитика
При установленном summary_interval: "1d" ежедневно выводятся:
- Общее количество отслеживаемых символов
- Расход API
- Процент использования rate limit
- Свежесть данных
- Количество сигналов по каждой стратегии
- Потребление памяти