Ulcer Index: как измерить реальный стресс портфеля и отсеять скрытые просадки
Оглавление
- Что такое Ulcer Index простыми словами
- Почему стандартное отклонение искажает представление об опасности
- Конфигурация параметров и чтение графиков
- Математический алгоритм: как рассчитывается показатель
- Коэффициент Мартина (UPI) против коэффициента Шарпа
- Аналитический софт и готовый код (Pine Script и Python)
- Три ситуации, когда стандартная формула дает сбой
- Четыре критические ошибки при интерпретации показателя
- Чек-лист проверки актива перед открытием сделки
- Пошаговый план внедрения индикатора в практику
- Часто задаваемые вопросы (FAQ)
1. Что такое Ulcer Index простыми словами
Ulcer Index (UI, «индекс язвы») — статистический индикатор риск-менеджмента, который фиксирует не общие колебания цены, а исключительно глубину и длительность нахождения котировок ниже локального максимума. Метрика математически оцифровывает психологическое выгорание и стресс («желудочную боль») инвестора от удержания просевшего актива.
Классическое стандартное отклонение наказывает позицию за любое резкое движение: модель видит опасность даже тогда, когда котировки стремительно взлетают. Ulcer Index устроен иначе. Он оценивает, насколько глубоко корпус корабля опустился ниже ватерлинии и сколько дней судно остается затопленным.
Пока график обновляет локальные вершины, значение индикатора равно строго нулю.
| Значение UI (N=14) | Состояние актива на графике | Решение трейдера или управляющего |
|---|---|---|
| 0.0 | Абсолютное ралли, обновление пиков | Удерживать позицию; восходящий тренд полностью стабилен |
| 0.1 – 5.0 | Здоровый рабочий откат, плавная консолидация | Базовая зона для набора длинных позиций в трендовых бумагах |
| 5.0 – 10.0 | Умеренно-глубокая коррекция | Подтянуть защитные стоп-приказы, сократить кредитное плечо |
| От 10.0 до 15.0+ | Системный обвал, разрушение структуры | Полный запрет на покупки; сокращение риска, хедж или выход в кэш |
2. Почему стандартное отклонение искажает представление об опасности
Индикатор разработали финансовый теоретик Питер Мартин (Peter Martin) и аналитик Байрон Макканн (Byron McCann) в 1987 году. Методологию авторы опубликовали в книге 1989 года «The Investor’s Guide to Fidelity Funds», стремясь дать клиентам взаимных фондов шкалу эмоционального дискомфорта. Название напрямую отсылает к медицинской психосоматике: затяжные и тяжелые убытки порождают хроническую тревогу, провоцирующую язву желудка.
Базовый дефект классической волатильности (стандартного отклонения, Standard Deviation) заключается в ее симметрии. Модель Гаусса одинаково оценивает как падение инструмента на 20%, так и взрывной взлет на те же 20%. Однако трейдер не испытывает стресса, когда капитал растет.
Ulcer Index изолирует односторонний риск падения (Downside Risk), объединяя две переменные:
- Глубину отката от пика (Drawdown depth): дистанцию, на которую цена ушла вниз от зафиксированного максимума.
- Фактор застоя под водой (Drawdown duration): количество торговых сессий, в течение которых котировки не могут восстановиться до уровня безубыточности.
Если на рынке произошел мгновенный сквиз с немедленным выкупом за пару сессий, Ulcer Index покажет кратковременный незначительный всплеск. Если же инструмент сползает на дно и дрейфует в депрессивном боковике месяцами, показатель взлетает до экстремальных отметок.
| Критерий сравнения | Standard Deviation (Волатильность) | Ulcer Index (Индекс язвы) |
|---|---|---|
| Реакция на рост цены | Считает риском и увеличивает итоговое значение | Полностью игнорирует, индикатор остается на отметке 0.0 |
| Учет фактора времени | Не фиксирует длительность застоя депозита под водой | Штрафует за каждый бар удержания просадки |
| Статистическая база | Двусторонняя симметричная дисперсия выборки | Односторонний Downside Risk накопленной просадки |
| Реакция на новый максимум | Сохраняет высокое значение из-за размаха цен | Моментально обнуляется при обновлении ценового пика |
3. Конфигурация параметров и чтение графиков
Индикатор входит в стандартные библиотеки TradingView, MT5 и платформ портфельного анализа вроде StockCharts. Чтобы исключить искажения, рабочие параметры выставляются под конкретный инвестиционный горизонт:
- Выбор расчетного окна (Length): Значение по умолчанию — 14. На дневном таймфрейме (D1) оно охватывает циклы локальных коррекций за последние три рабочих недели. Для среднесрочного инвестирования в ETF и акции переключите график на недельный интервал (W1) и задайте параметр Length=52 (полный годовой торговый цикл).
- База расчета (Source): Формулу необходимо рассчитывать строго по ценам закрытия (Close). Это отсекает случайные внутридневные проколы тенями свечей и ликвидационные шпили.
Практическое правило: Внутридневные сквизы на криптовалютных деривативах часто искажают показания осцилляторов. Расчет UI по ценам Low приводит к тому, что единичный пятиминутный сброс стакана завышает индикатор на следующие две недели. Всегда фиксируйте расчет на параметре Close.
Поведение кривой индикатора
- Формирование рыночного дна: Пик кривой Ulcer Index формируется синхронно с достижением ценового дна. Максимальный уровень страха и накопленной боли знаменует кульминацию продаж.
- Затухание распродаж: Смена наклона линии UI с восходящего на нисходящий подтверждает истощение панического давления и открывает окно для набора позиций с контролируемым риском.
4. Математический алгоритм: как рассчитывается показатель
Механика индикатора прозрачна: расчет опирается на среднеквадратичное отклонение отрицательных приращений цены относительно плавающего пика.
Сначала определяется процентная просадка текущего бара от локального максимума за выбранное расчетное окно N:
Ri = ((Closei - max(Close, N)) / max(Close, N)) × 100%
Затем вычисляется итоговое среднеквадратичное значение:
UI = √( (1 / N) × ∑ Ri2 )
Зачем просадки возводятся в квадрат
Квадратичный штраф заложен намеренно:
- Откат на 10% формирует вес: 102 = 100.
- Спад на 20% формирует вес: 202 = 400.
Спад на 20% наказывается алгоритмом в 4 раза жестче, чем спад на 10%, хотя номинальное падение глубже всего вдвое. Алгоритм делает акцент на недопущении глубоких портфельных просадок.
Сквозной числовой пример (N=3)
Проследим расчет для трехдневного окна, в котором бумага равномерно снижается со $100 до $80:
День 1: Close1 = 100$, максимум за период max = 100$.
R1 = ((100 - 100) / 100) × 100% = 0% &implies; R12 = 0
День 2: Close2 = 90$, локальный пик окна max = 100$.
R2 = ((90 - 100) / 100) × 100% = -10% &implies; R22 = (-10)2 = 100
День 3: Close3 = 80$, локальный пик окна max = 100$.
R3 = ((80 - 100) / 100) × 100% = -20% &implies; R32 = (-20)2 = 400
Сумма квадратов делится на длину окна:
∑ Ri2 / N = (0 + 100 + 400) / 3 = 500 / 3 ≈ 166,67
Из полученного среднего извлекается квадратный корень:
UI = √(166,67) ≈ 12,91
Значение 12,91 показывает, что актив находится в фазе повышенного стресса: открывать покупки в такой фазе математически нецелесообразно.
5. Коэффициент Мартина (UPI) против коэффициента Шарпа
Питер Мартин модернизировал классический коэффициент Шарпа, заменив общую волатильность в знаменателе на Ulcer Index. Метрика называется Ulcer Performance Index (UPI), или коэффициентом Мартина:
UPI = (Rp - Rf) / (UI + ε)
Где:
- Rp — доходность инвестиционного портфеля или торговой стратегии за период;
- Rf — доходность безрискового актива (например, доходность коротких казначейских векселей США);
- UI — расчетный Ulcer Index за аналогичный отрезок времени;
- ε — защитная константа (10-5), предотвращающая деление на ноль при безоткатном росте, когда UI=0.
В отличие от коэффициента Сортино (оценивающего дисперсию убыточных дней) и коэффициента Кальмара (зависящего от единственной пиковой точки падения), UPI штрафует инструмент за совокупное время простаивания капитала в убытке.
Сравнение двух фондов с одинаковым коэффициентом Шарпа
| Параметр оценки | Стратегия А (Рваная динамика) | Стратегия Б (Устойчивый тренд) |
|---|---|---|
| Годовая доходность (Rp) | 20.0% | 20.0% |
| Безрисковая ставка (Rf) | 5.0% | 5.0% |
| Коэффициент Шарпа (Sharpe) | 1.50 (одинаковая волатильность) | 1.50 (одинаковая волатильность) |
| Профиль просадок | Падение на -22%, выход из ямы занял 8 месяцев | Просадки не глубже -4%, восстановление за 7–10 дней |
| Ulcer Index (UI) | 18.2 | 4.1 |
| Коэффициент Мартина (UPI) | (20 - 5) / 18,2 = 0,82 | (20 - 5) / 4,1 = 3,65 |
| Вердикт инвестора | Высокий риск эмоционального сброса на дне | Спокойное удержание без психологического выгорания |
При идентичной доходности и одинаковом коэффициенте Шарпа стратегия Б сгенерировала в 4,4 раза больше доходности на единицу перенесенного стресса (UPI=3,65 против 0,82).
6. Аналитический софт и готовый код (Pine Script и Python)
| Платформа | Основное назначение | Преимущества решения | Ограничения и недостатки |
|---|---|---|---|
| TradingView | Свинг-трейдинг, криптовалюты и акции | Наложение в один клик; открытый код на Pine Script v5 | Встроенный индикатор не отображает UPI в том же окне |
| MetaTrader 5 | Алготрейдинг, Forex, фьючерсные контракты | Встраивание условий по UI в торговые советники (EA) | Требует компиляции собственного файла .mq5 |
| StockCharts | Среднесрочный скрининг акций и ETF США | Наложение скользящих средних прямо на кривую UI | Устаревший интерфейс; скринер требует платной подписки |
| PortfoliosLab | Портфельное распределение активов | Авторасчет связки UI и UPI для корзины активов | Не рассчитан на внутридневной и тиковый анализ |
| Python (pandas) | Количественные исследования, бэктестинг | Адаптация окон, гибкая модификация под короткие позиции | Требует навыков написания скриптов и подготовки данных |
Готовая реализация: скрипт для TradingView (Pine Script v6) и Python
Для алготрейдеров и пользователей торговых скринеров ниже приведены готовые шаблоны для быстрой интеграции.
Pine Script v6 (индикатор с фильтром порогового риска):
//@version=6
indicator('Ulcer Index & Risk Regime', overlay = false)
length = input.int(14, title = 'Lookback Period', minval = 1)
src = input.source(close, title = 'Source')
warn_level = input.float(10.0, title = 'High Stress Level')
highest_high = ta.highest(src, length)
drawdown = (src - highest_high) / highest_high * 100.0
ss_drawdown = math.sum(math.pow(drawdown, 2), length)
ui = math.sqrt(ss_drawdown / length)
plot(ui, color = ui > warn_level ? color.red : color.teal, linewidth = 2, title = 'Ulcer Index')
hline(0.0, 'Zero Line', color = color.gray, linestyle = hline.style_dotted)
hline(5.0, 'Normal Pullback', color = color.green, linestyle = hline.style_dashed)
hline(warn_level, 'Stress Cutoff', color = color.red, linestyle = hline.style_solid)
Python (расчет метрики через библиотеку pandas):
import numpy as np
import pandas as pd
def calculate_ulcer_index(series_close: pd.Series, window: int = 14) -> pd.Series:
rolling_max = series_close.rolling(window=window, min_periods=1).max()
percentage_drawdown = ((series_close - rolling_max) / rolling_max) * 100.0
squared_drawdown = percentage_drawdown ** 2
return np.sqrt(squared_drawdown.rolling(window=window, min_periods=1).mean())
7. Три ситуации, когда стандартная формула дает сбой
1. Удержание коротких позиций (Short)
Базовый расчет строится от ценового максимума. Если трейдер шортит растущий инструмент, баланс стремительно тает, однако график актива обновляет вершины, и UI показывает нулевое значение риска (0.0).
Решение: При оценке шорт-стратегий рассчитывайте показатель по инвертированному ряду цен (1/Close) либо применяйте формулу непосредственно к кривой накопленного баланса счета (Equity Curve).
2. Искажение короткого окна при боковике на дне
Если после обвала при N=14 инструмент заходит в узкий диапазон на дне, на 15-й день бар пика покидает окно расчета. Линия UI резко падает к нулю, создавая иллюзию выхода из кризиса, хотя котировки остаются на минимумах.
Решение: Для позиционных сделок расширяйте окно до N=50–100 либо накладывайте скользящую среднюю SMA52 на сам осциллятор.
3. Ликвидационные шпили на низколиквидных парах
На неликвидных инструментах единичный импульсный сброс формирует глубокую тень свечи вниз. Этот изолированный выброс возводится в квадрат и удерживает показатель завышенным в течение следующих N баров, даже если баланс стакана восстановился за секунды.
Решение: Рассчитывайте индикатор исключительно по ценам закрытия (Close) и избегайте использования экстремумов Low.
8. Четыре критические ошибки при интерпретации показателя
- Попытка искать сигналы входа по уровню перепроданности. Снижение индикатора ниже отметки 5.0 само по себе не является сигналом к покупке. Низкий UI на фоне падающего рынка указывает лишь на консолидацию на дне перед новым импульсом вниз. Индикатор должен выступать фильтром контекста, а не триггером открытия ордера.
- Запуск на минутных таймфреймах (M1–M15). Внутридневной рыночный микрошум, разрывы сессий и спредовые колебания разрушают концепцию длительной просадки. Оптимальные интервалы для метрики — дневной (D1) и недельный (W1).
- Применение единого числового порога ко всем рынкам. Значение UI=8,0 для государственных облигаций сигнализирует о кризисе, тогда как для акций технологических стартапов или Ethereum это стандартная коррекция восходящего цикла. Сравнивайте текущее значение актива с его собственной трехмесячной медианой или средним уровнем по сектору.
- Покупка строго в момент возврата к нулю. Индикатор возвращается к значению 0.0 только тогда, когда цена уже пробила предыдущий максимум. Ожидание полного обнуления приводит к регулярному пропуску первой трети бычьего импульса.
9. Чек-лист проверки актива перед открытием сделки
Используйте Ulcer Index как защитный фильтр перед выставлением торгового ордера. Сделка на покупку одобряется, если инструмент соответствует четырем критериям:
- [ ] 1. Глобальный тренд: Цена закрытия находится выше 200-дневной скользящей средней (SMA200) на дневном графике.
- [ ] 2. Текущий уровень стресса: Значение UI14 находится ниже своей 90-дневной исторической медианы.
- [ ] 3. Фаза паники: Линия UI14 развернулась вниз от недавнего локального пика (кульминация сброса пройдена).
- [ ] 4. Качество доходности: Расчетный коэффициент Мартина (UPI) за последние 12 месяцев превышает бенчмарк (S&P 500 для фондового рынка, BTC для криптовалют).
Правило фильтрации: Если хотя бы одно условие не выполняется, открытие позиции блокируется: риск затяжного пребывания в просадке превышает расчетную доходность.
10. Пошаговый план внедрения индикатора в практику
- Добавьте осциллятор в терминал: В поиске индикаторов TradingView найдите Ulcer Index, выставьте длину 14 и источник Close.
- Определите медиану инструмента: Оцените диапазон колебаний индикатора за последние полгода и зафиксируйте горизонтальную границу спокойного рынка (как правило, коридор от 3.0 до 6.0 для акций).
- Отслеживайте разворот вершины: Не покупайте падающий актив, пока кривая UI круто направлена вверх. Дождитесь дневной свечи, на которой наклон индикатора сменился на нисходящий.
- Проводите ежеквартальный аудит: Рассчитывайте UPI для всех позиций портфеля. Без сожалений сокращайте активы, у которых показатель упал ниже 1.0 из-за постоянного застревания в просадках.
11. Часто задаваемые вопросы (FAQ)
Чем Ulcer Index отличается от максимальной просадки (Maximum Drawdown)?
Maximum Drawdown оценивает единственную крайнюю точку падения за всю историю, игнорируя то, что происходило дальше. Актив мог упасть на секунду и мгновенно восстановиться. Ulcer Index суммирует квадраты отклонений на каждом временном шаге, штрафуя инструмент одновременно за глубину падения и за длительность нахождения депозита под водой.
Подходит ли Ulcer Index для внутридневной торговли?
На таймфреймах M1–M15 индикатор теряет аналитическую точность. Из-за микрошума, спреда и неравномерности биржевого стакана логика оценки затяжного удержания просадки перестает работать. Рекомендуемый минимальный рабочий интервал — D1 (дневные свечи).
Какой период расчета оптимален для криптовалют?
Стандартный период N=14 разрабатывался под пятидневную торговую неделю фондовых бирж. Криптовалютный рынок торгуется 24/7. Для свинг-трейдинга на криптоактивах калибруйте период на N=21 (три календарные недели), а для среднесрочного позиционного трейдинга — на N=90.
Зачем накладывать скользящую среднюю на Ulcer Index?
Наложение линии SMA50 или SMA52 на график UI помогает отделить локальный коррекционный откат от смены долгосрочной рыночной фазы. Пробой скользящей средней линией UI снизу вверх сигнализирует о начале структурного даунтренда.
