matrix) в Pine Script v5 позволяет эффективно вычислять и визуализировать коэффициенты корреляции Пирсона между несколькими криптовалютными парами в виде динамической тепловой карты (heatmap) прямо на графике TradingView.Исходный код
В количественном анализе (Quantitative Analysis) расчет корреляции между активами является базовым инструментом для управления рисками, хеджирования и диверсификации портфеля. Использование встроенного типа данных matrix в Pine Script v5 позволяет уйти от громоздкого ручного кода и структурировать многомерные вычисления. Ниже представлен готовый скрипт индикатора, который рассчитывает корреляцию логарифмических доходностей четырех криптовалют и выводит результат в виде интерактивной таблицы-тепловой карты.
//@version=5
indicator("Crypto Correlation Matrix", overlay=true)
// Inputs
length = input.int(50, "Correlation Period", minval=2)
t1 = input.symbol("BINANCE:BTCUSDT", "Asset 1")
t2 = input.symbol("BINANCE:ETHUSDT", "Asset 2")
t3 = input.symbol("BINANCE:SOLUSDT", "Asset 3")
t4 = input.symbol("BINANCE:XRPUSDT", "Asset 4")
// Fetch close prices
c1 = request.security(t1, timeframe.period, close)
c2 = request.security(t2, timeframe.period, close)
c3 = request.security(t3, timeframe.period, close)
c4 = request.security(t4, timeframe.period, close)
// Calculate returns (log returns)
ret1 = math.log(c1 / c1[1])
ret2 = math.log(c2 / c2[1])
ret3 = math.log(c3 / c3[1])
ret4 = math.log(c4 / c4[1])
// Helper function to calculate Pearson correlation
f_corr(float x, float y, int len) =>
ta.correlation(x, y, len)
// Initialize correlation matrix (4x4)
var corr_matrix = matrix.new(4, 4, 0.0)
if barstate.islast
matrix.set(corr_matrix, 0, 0, 1.0)
matrix.set(corr_matrix, 0, 1, f_corr(ret1, ret2, length))
matrix.set(corr_matrix, 0, 2, f_corr(ret1, ret3, length))
matrix.set(corr_matrix, 0, 3, f_corr(ret1, ret4, length))
matrix.set(corr_matrix, 1, 0, f_corr(ret2, ret1, length))
matrix.set(corr_matrix, 1, 1, 1.0)
matrix.set(corr_matrix, 1, 2, f_corr(ret2, ret3, length))
matrix.set(corr_matrix, 1, 3, f_corr(ret2, ret4, length))
matrix.set(corr_matrix, 2, 0, f_corr(ret3, ret1, length))
matrix.set(corr_matrix, 2, 1, f_corr(ret3, ret2, length))
matrix.set(corr_matrix, 2, 2, 1.0)
matrix.set(corr_matrix, 2, 3, f_corr(ret3, ret4, length))
matrix.set(corr_matrix, 3, 0, f_corr(ret4, ret1, length))
matrix.set(corr_matrix, 3, 1, f_corr(ret4, ret2, length))
matrix.set(corr_matrix, 3, 2, f_corr(ret4, ret3, length))
matrix.set(corr_matrix, 3, 3, 1.0)
// Display as Table
var tbl = table.new(position.top_right, 5, 5, border_color=color.gray, border_width=1)
f_get_color(float val) =>
if val > 0.7
color.new(color.green, math.round(100 - val * 100))
else if val < -0.7
color.new(color.red, math.round(100 - math.abs(val) * 100))
else
color.new(color.orange, 50)
if barstate.islast
// Headers
table.cell(tbl, 0, 0, "", bgcolor=color.gray)
table.cell(tbl, 1, 0, "BTC", bgcolor=color.gray, text_color=color.white)
table.cell(tbl, 2, 0, "ETH", bgcolor=color.gray, text_color=color.white)
table.cell(tbl, 3, 0, "SOL", bgcolor=color.gray, text_color=color.white)
table.cell(tbl, 4, 0, "XRP", bgcolor=color.gray, text_color=color.white)
table.cell(tbl, 0, 1, "BTC", bgcolor=color.gray, text_color=color.white)
table.cell(tbl, 0, 2, "ETH", bgcolor=color.gray, text_color=color.white)
table.cell(tbl, 0, 3, "SOL", bgcolor=color.gray, text_color=color.white)
table.cell(tbl, 0, 4, "XRP", bgcolor=color.gray, text_color=color.white)
// Populate values
for i = 0 to 3
for j = 0 to 3
val = matrix.get(corr_matrix, i, j)
table.cell(tbl, j + 1, i + 1, str.tostring(val, "#.##"), bgcolor=f_get_color(val), text_color=color.black) Разбор параметров
length: Период расчета корреляции (по умолчанию50баров). Определяет глубину исторического окна для вычисления коэффициента Пирсона.t1, t2, t3, t4: Настройки выбора торговых инструментов. Позволяют динамически менять анализируемые криптовалюты через интерфейс настроек индикатора без изменения кода.corr_matrix: Объект типаmatrixразмером 4x4, инициализируемый функциейmatrix.new. Используется для структурированного хранения вычисленных коэффициентов.() f_get_color(): Пользовательская функция, которая динамически рассчитывает прозрачность и цвет ячейки таблицы в зависимости от силы корреляции (зеленый для положительной, красный для отрицательной).
Как запустить
Чтобы запустить данный индикатор на платформе TradingView, выполните следующие шаги:
1. Откройте любой график на TradingView (например, BTCUSDT).
2. В нижней части экрана выберите вкладку Pine Editor.
3. Скопируйте исходный код, приведенный выше, и вставьте его в редактор, заменив стандартный шаблон.
4. Нажмите кнопку Add to chart (Добавить на график). В правом верхнем углу появится интерактивная тепловая карта корреляции.
Понимание корреляции критически важно при построении портфельных стратегий. Например, если вы торгуете сильно коррелированными активами, вам обязательно нужно оптимизировать управление капиталом. О том, как это сделать программно, читайте в нашей статье Динамический Размер Позиции в Pine Script v5: Расчет % от Капитала.
Если вы планируете автоматизировать торговлю на основе корреляционных расхождений (например, парный трейдинг или хеджирование), вы можете настроить отправку сигналов на сторонние платформы. Подробная инструкция доступна здесь: Интеграция Pine Script v5 с 3Commas: Кастомные JSON Сигналы для DCA Бота.
Для тех, кто хочет совместить количественный анализ корреляций с классическим Price Action и поиском рыночных сломов, рекомендуем ознакомиться с материалом Автоматическое определение рыночной структуры (BOS и CHoCH) в Pine Script v5.




