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.




