Тепловая карта корреляции альткоинов на Python: seaborn и pandas

Тепловая карта корреляции альткоинов на Python: seaborn и pandas Анализ данных и Бэктесты
Пошаговое руководство по расчету матрицы корреляции Пирсона и визуализации тепловой карты для топ-50 альткоинов с помощью pandas и seaborn.
Суть: Построение тепловой карты корреляции Пирсона для топ-50 альткоинов включает в себя выгрузку исторических данных закрытия цен, расчет ежедневных логарифмических доходностей с помощью pandas и numpy, вычисление матрицы корреляции методом .corr(method="pearson") и ее визуализацию с помощью библиотеки seaborn.heatmap() для выявления кластеров взаимосвязанных активов.

Исходный код

Ниже представлен готовый к продакшену скрипт на Python, который автоматически загружает исторические данные по топ-50 альткоинам через API Yahoo Finance, рассчитывает логарифмические доходности для устранения эффекта нестационарности временных рядов, строит матрицу корреляции Пирсона и визуализирует ее в виде профессиональной тепловой карты.

import yfinance as yf
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# Список топ-50 альткоинов (тикеры Yahoo Finance)
altcoins = [
    'ETH-USD', 'SOL-USD', 'XRP-USD', 'ADA-USD', 'AVAX-USD', 'DOGE-USD', 'DOT-USD', 'LINK-USD',
    'MATIC-USD', 'SHIB-USD', 'TRX-USD', 'LTC-USD', 'NEAR-USD', 'UNI-USD', 'APT-USD', 'ICP-USD',
    'OP-USD', 'LDO-USD', 'ATOM-USD', 'IMX-USD', 'GRT-USD', 'RNDR-USD', 'SUI-USD', 'STX-USD',
    'ETC-USD', 'HBAR-USD', 'VET-USD', 'FIL-USD', 'MKR-USD', 'RUNE-USD', 'INJ-USD', 'TIA-USD',
    'THETA-USD', 'FTM-USD', 'AAVE-USD', 'ALGO-USD', 'FLOW-USD', 'EGLD-USD', 'SAND-USD',
    'MANA-USD', 'XTZ-USD', 'EOS-USD', 'AXS-USD', 'NEO-USD', 'MINA-USD', 'GALA-USD', 'CHZ-USD',
    'DYDX-USD', 'CRV-USD', 'LRC-USD'
]

def get_correlation_matrix(tickers, period='180d'):
    # Загрузка исторических данных (цены закрытия)
    data = yf.download(tickers, period=period, interval='1d')['Close']
    
    # Обработка пропусков (forward fill, затем backward fill)
    data = data.ffill().bfill()
    
    # Расчет логарифмических доходностей
    log_returns = np.log(data / data.shift(1)).dropna()
    
    # Вычисление матрицы корреляции Пирсона
    corr_matrix = log_returns.corr(method='pearson')
    return corr_matrix

def plot_heatmap(corr_matrix):
    # Настройка стиля seaborn
    sns.set_theme(style='white')
    
    # Создание маски для скрытия верхнего треугольника
    mask = np.triu(np.ones_like(corr_matrix, dtype=bool))
    
    # Настройка размера фигуры
    plt.figure(figsize=(20, 16))
    
    # Построение тепловой карты
    cmap = sns.diverging_palette(230, 20, as_cmap=True)
    sns.heatmap(
        corr_matrix, 
        mask=mask, 
        cmap=cmap, 
        vmax=1.0, 
        vmin=-1.0, 
        center=0,
        square=True, 
        linewidths=.5, 
        cbar_kws={'shrink': .5, 'label': 'Коэффициент корреляции Пирсона'},
        xticklabels=True, 
        yticklabels=True
    )
    
    plt.title('Тепловая карта корреляции топ-50 альткоинов (Log Returns)', fontsize=20, pad=20)
    plt.xticks(rotation=90, fontsize=10)
    plt.yticks(rotation=0, fontsize=10)
    plt.tight_layout()
    plt.show()

if __name__ == '__main__':
    print('Загрузка данных и расчет корреляций...')
    matrix = get_correlation_matrix(altcoins, period='180d')
    print('Визуализация тепловой карты...')
    plot_heatmap(matrix)

Разбор параметров

  • yf.download(): Функция библиотеки yfinance для пакетного скачивания исторических данных. Мы используем параметр period="180d" для оценки среднесрочной корреляции за последние полгода.
  • np.log(data / data.shift(1)): Переход от сырых цен к логарифмическим доходностям. Это критически важный шаг в количественном анализе, так как временные ряды цен нестационарны, а корреляция Пирсона требует стационарности данных.
  • corr(method="pearson"): Метод pandas.DataFrame, вычисляющий стандартный коэффициент корреляции Пирсона, который измеряет линейную зависимость между доходностями активов.
  • sns.diverging_palette(): Создает сбалансированную цветовую палитру от холодных тонов (отрицательная корреляция) к теплым (положительная корреляция) с нейтральным центром.
  • np.triu(): Маска, которая скрывает дублирующуюся верхнюю половину симметричной матрицы корреляции, делая график более читаемым для аналитика.

Как запустить

Для запуска скрипта вам понадобятся установленные библиотеки pandas, numpy, seaborn, matplotlib и yfinance. Установите их одной командой:

pip install pandas numpy seaborn matplotlib yfinance

После установки запустите скрипт в вашей IDE или Jupyter Notebook. Вы получите интерактивное окно с тепловой картой высокого разрешения, где сможете визуально определить кластеры активов, движущихся синхронно.

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

Для более глубокого анализа динамики отдельных активов и выявления скрытых закономерностей полезно изучить временные ряды, как подробно описано в руководстве по Анализу сезонности биткоина на Python с statsmodels: дни недели и месяцы.

Если же ваша цель — построить комплексную систему технического анализа для отфильтрованных альткоинов, рекомендуем прочитать материал Интеграция Ta-Lib в Python: Быстрый расчет 100+ индикаторов на DataFrame.

Оцените статью
FinFluct