Алгокарта кросс-корреляций криптовалют в реальном времени

Алгокарта кросс-корреляций криптовалют в реальном времени

В современном мире алгоритмической торговли трейдеру мало просто "чувствовать рынок". Важно видеть взаимосвязи между активами, понимать, кто с кем ходит в ногу, а кто — в противофазе. Это особенно важно на малых таймфреймах, где доли секунды могут решить исход сделки. Именно для этого мы представляем: Алгокарта кросс-корреляций в реальном времени.

❓ Что это такое

Это Python-скрипт, который в режиме реального времени:

  • Подгружает цену закрытия криптовалют с биржи Binance

  • Рассчитывает коэффициенты корреляции между парами активов

  • Выводит в терминале цветную тепловую карту, где:

    • 🟢 Зеленый — высокая положительная корреляция (0.75+)

    • 🔴 Красный — высокая отрицательная корреляция (-0.75 и ниже)

    • ⚪ Обычные значения — слабая/умеренная корреляция

Пример для пары BTC/USDT и ETH/USDT:

Кросс-корреляция:
      BTC   ETH   BNB   SOL   XRP
BTC  1.00  0.89  0.77  0.70  0.55
ETH  0.89  1.00  0.84  0.69  0.58
BNB  0.77  0.84  1.00  0.75  0.49
...

🧠 Как это помогает трейдеру

🔄 Парный трейдинг

Если два актива ведут себя синхронно, можно:

  • Открыть лонг на один и шорт на другой, если появился временный разрыв

  • Искать моменты расхождения от нормы, чтобы зарабатывать на возврате к средней корреляции

🔁 Арбитраж

При высокой отрицательной или слабой корреляции можно находить арбитражные возможности на разных биржах или в разных сетях.

📉 Фильтрация сигналов

Если вы торгуете по индикатору (например, RSI), можно игнорировать сигналы на высоко скоррелированных активах, чтобы не открывать дублирующие позиции.

🧯 Управление рисками

Вложение в 3 актива с высокой корреляцией — это почти как вложение в один. Скрипт помогает сбалансировать портфель, уменьшить общую волатильность.


⚙️ Как работает скрипт

Скрипт написан на Python и использует библиотеку ccxt для получения данных с биржи Binance.

📦 Зависимости

pip install ccxt pandas colorama

🧩 Основные шаги

  1. Определяем список криптовалютных пар: 

    symbols = ['BTC/USDT', 'ETH/USDT', 'BNB/USDT', 'SOL/USDT', 'XRP/USDT']
    
  2. ля каждой пары скачиваем 100 последних свечей 1m: 
    ohlcv = exchange.fetch_ohlcv(symbol, timeframe='1m', limit=100)
    
  3. Извлекаем цену закрытия (close) и строим DataFrame
  4. Считаем коэффициент корреляции Пирсона между всеми парами с помощью: 
    df.corr()
    
  5. Распечатываем цветную тепловую карту с помощью colorama для акцентов на значимых значениях

⏱ Обновление в реальном времени

Скрипт можно легко обернуть в бесконечный цикл с задержкой:

while True:
    run_script()
    time.sleep(60)  # обновлять каждую минуту

Либо сделать графическое отображение в будущем — например, с использованием matplotlib или plotly.

🚀 Планы на развитие

  • 🔄 Обновление в фоне

  • 📊 Веб-интерфейс или Dash-приложение

  • ⚙️ Расширение на другие биржи

  • 🧠 Интеграция с ИИ для автоматической классификации аномалий


🔚 Вывод

Такая “алгокарта корреляций” — незаменимый инструмент для алготрейдера или скальпера, работающего с множеством инструментов. Она помогает понять рынок глубже, видеть невидимые связи между монетами и принимать более обоснованные решения.

Хотите продвинуть свои стратегии на новый уровень? Попробуйте этот подход в своей системе уже сегодня.

Полный код

import ccxt
import pandas as pd
import time
from colorama import Fore, Style, init

init(autoreset=True)

symbols = ['BTC/USDT', 'ETH/USDT', 'BNB/USDT', 'SOL/USDT', 'XRP/USDT']
exchange = ccxt.binance()
timeframe = '1m'
limit = 100

def fetch_ohlcv(symbol):
    try:
        ohlcv = exchange.fetch_ohlcv(symbol, timeframe=timeframe, limit=limit)
        df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
        return df['close']
    except Exception as e:
        print(f"[{symbol}] Ошибка: {e}")
        return pd.Series(dtype=float)

def print_correlation_matrix(data):
    df = pd.DataFrame(data)
    corr_matrix = df.corr()

    print("\nКросс-корреляция:")
    headers = corr_matrix.columns
    print("     " + "  ".join([f"{h[:4]}" for h in headers]))

    for i, row in corr_matrix.iterrows():
        row_str = f"{i[:4]}  "
        for val in row:
            if val > 0.75:
                row_str += Fore.GREEN + f"{val:.2f}" + Style.RESET_ALL + "  "
            elif val < -0.75:
                row_str += Fore.RED + f"{val:.2f}" + Style.RESET_ALL + "  "
            else:
                row_str += f"{val:.2f}  "
        print(row_str)

if __name__ == "__main__":
    data = {}
    for symbol in symbols:
        closes = fetch_ohlcv(symbol)
        if not closes.empty:
            data[symbol] = closes
        time.sleep(0.5)

    if len(data) >= 2:
        print_correlation_matrix(data)
    else:
        print("Недостаточно данных.")
Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

Чтобы оставить комментарий, пожалуйста, войдите или зарегистрируйтесь.