В современном мире алгоритмической торговли трейдеру мало просто "чувствовать рынок". Важно видеть взаимосвязи между активами, понимать, кто с кем ходит в ногу, а кто — в противофазе. Это особенно важно на малых таймфреймах, где доли секунды могут решить исход сделки. Именно для этого мы представляем: Алгокарта кросс-корреляций в реальном времени.
❓ Что это такое
Это 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
🧩 Основные шаги
-
Определяем список криптовалютных пар:
symbols = ['BTC/USDT', 'ETH/USDT', 'BNB/USDT', 'SOL/USDT', 'XRP/USDT']
- ля каждой пары скачиваем 100 последних свечей 1m:
ohlcv = exchange.fetch_ohlcv(symbol, timeframe='1m', limit=100)
- Извлекаем цену закрытия (close) и строим DataFrame
- Считаем коэффициент корреляции Пирсона между всеми парами с помощью:
df.corr()
- Распечатываем цветную тепловую карту с помощью
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("Недостаточно данных.")
Пока нет комментариев. Будьте первым!