В алгоритмической торговле и стратегиях статистического арбитража на Московской бирже (MOEX) ключевой задачей трейдера является точное определение моментов максимального расхождения цен коррелирующих активов. Обычный линейный график спреда не дает понимания, насколько текущее отклонение аномально с точки зрения статистики. Для решения этой задачи применяется математическая модель Z-Score (индекс стандартизированного отклонения). В данном материале мы подробно разберем логику работы индикатора, правила его интерпретации и предоставим готовый, рабочий код скрипта для платформы TradingView на языке Pine Script v5.
Математическая суть Z-Score: как это работает в арбитраже
Индикатор Z-Score показывает, на какое количество стандартных (среднеквадратичных) отклонений текущая цена спреда улетела от своего исторического среднего значения за определенный промежуток времени. В основе индикатора лежит концепция возврата к среднему (Mean Reversion). Если значение Z-Score находится в пределах от -1 до +1, рынок спокоен, а баланс сил соблюден. Но как только показатель пробивает критические уровни, это сигнализирует о математической неэффективности в биржевом стакане ордеров.
- Z-Score > +2.0 (Верхняя граница аномалии): Спред между дальним и ближним фьючерсами сильно расширился. Текущее значение переоценено относительно исторической скользящей средней. Это идеальный сигнал на одновременное открытие шорта по дальнему контракту и лонга по ближнему.
- Z-Score < -2.0 (Нижняя граница аномалии): Спред аномально сузился или ушел в отрицательную зону. Активы недооценены относительно математической нормы. Сигнал на покупку спреда (лонг дальнего фьючерса, шорт ближнего).
Готовый скрипт Z-Score для TradingView (Pine Script v5)
Ниже представлен полностью оптимизированный, рабочий код индикатора, написанный на актуальной пятой версии языка Pine Script. Скрипт автоматически рассчитывает спред между двумя ногами (деривативами Сбербанка или любыми другими контрактами), строит динамическую гистограмму отклонений и подсвечивает критические зоны на графике. Вы можете скопировать его для добавления в ваш TV-аккаунт через Pine Editor.
//@version=5
indicator("Z-Score Календарного Спреда (1D)", overlay=false, precision=2)
// 1. Входные параметры инструментов (ноги спреда)
leg1 = input.symbol("RUS:SRZ2026-RUS:SRU2026", title="Дальний фьючерс (Декабрь)")
leg2 = input.symbol("RUS:SPZ2026-RUS:SPU2026", title="Ближний фьючерс (Сентябрь)")
length = input.int(20, title="Окно скользящей средней (N дней)", minval=5)
threshold = input.float(2.0, title="Критический порог аномалии (Сигма)", step=0.1)
// Запрос цен закрытия контрактов
c1 = request.security(leg1, timeframe.period, close)
c2 = request.security(leg2, timeframe.period, close)
spread = c1 - c2
// 2. Математический расчет Z-Score
spread_sma = ta.sma(spread, length)
spread_std = ta.stdev(spread, length)
float z_score = spread_std > 0 ? (spread - spread_sma) / spread_std : na
// 3. Определение сигнальных зон и цвета баров
bool is_overpriced = z_score >= threshold
bool is_underpriced = z_score <= -threshold
color plot_color = is_overpriced ? color.red : is_underpriced ? color.green : color.gray
// 4. Визуализация в нижнем окне
plot(z_score, title="Z-Score спреда", color=plot_color, style=plot.style_histogram, linewidth=3)
// Замена hline на plot для настраиваемых динамических уровней
plot(threshold, title="Верхняя граница аномалии", color=color.red, linewidth=1, style=plot.style_line)
plot(-threshold, title="Нижняя граница аномалии", color=color.green, linewidth=1, style=plot.style_line)
hline(0, "Линия равновесия (Средняя)", color=color.gray, linestyle=hline.style_dashed)
// Фоновое выделение экстремальных статистических выбросов
bgcolor(is_overpriced ? color.new(color.red, 90) : is_underpriced ? color.new(color.green, 90) : na)
Разбор технической логики и настроек кода
Архитектура данного скрипта разработана с прицелом на максимальную гибкость анализа календарных спредов фьючерсов Мосбиржи:
- Универсальный ввод тикеров: Блок
input.symbolпозволяет прямо из меню настроек индикатора менять анализируемые контракты (например, переключить со Сбербанка на юаньCR-или долларSi-) без необходимости лезть в код. - Динамический расчет Сигмы: Функция
ta.stdevвычисляет среднеквадратичное отклонение на скользящем окне (по умолчанию — 20 дней). Это значит, что индикатор самостоятельно адаптируется под текущую рыночную волатильность деривативов. - Цветовое кодирование (Визуальные алармы): Скрипт мгновенно окрашивает бары гистограммы в красный или зеленый цвет, а функция
bgcolorподсвечивает весь фон графика в моменты, когда спред преодолевает заданный порог аномалии (параметрthreshold). Это позволяет арбитражеру оперативно принимать решения, не вглядываясь в цифры.
Интеграция с торговым терминалом и риск-менеджмент
TradingView выступает отличной аналитической лабораторией, но помните о правилах безопасности. Обнаружив критический сигнал по Z-Score, исполнять арбитражный круг (одновременную покупку и продажу ног спреда) необходимо через боевой торговый терминал QUIK. Для минимизации издержек на гарантийное обеспечение (ГО) и защиты депозита от резких клиринговых гэпов крайне важно использовать Единый денежный счет (ЕДС) от брокера Финам, который автоматически учитывает взаимное хеджирование фьючерсных позиций.
Заключение
Использование математического индекса Z-Score переводит торговлю спредами из разряда интуитивного угадывания в плоскость точных вероятностных расчетов. Скрипт позволяет трейдеру четко дожидаться пиковых рыночных неэффективностей и забирать математическое преимущество. Чтобы изучить другие готовые алгоритмы автоматизации торговых связок, скачивайте наши Lua и Python скрипты в разделе «Файлы и коды», а подробные мануалы по настройке софта доступны в категории «Обзор и настройка софта».