Настраиваем риск-менеджмент как у хедж-фондов: модель Value at Risk (VaR)

Время на чтение: 18 минут

Value at Risk

Трейдинг базируется на трех китах: стратегия, риск-менеджмент и психология. Так как с последним фактором системным трейдерам не нужно бороться, то остаются первые два.

В этом материале расскажем про риск-модель VaR — Value at Risk — и как она помогает анализировать риск практически в каждый момент времени.

Содержание

Введение в модель Value at Risk (VaR)

Value at Risk (VaR) — статистическая мера риска, которая оценивает потенциальную максимальную потерю инвестиций за определенный временной период при заданном уровне доверия.

Существует несколько методов расчета VaR:

  • исторический метод
  • метод Монте-Карло
  • параметрический метод, или вариация-ковариация.
Value at Risk
Методы Value at Risk.

Каждый из этих методов имеет свои особенности и области применения. Начнем с самого доступного и простого.

Исторический метод VaR (Historical Method)

Исторический метод — один из самых простых способов расчета VaR, не требующий сложных математических вычислений.

Все, что вам нужно, — достаточное количество исторических данных: сделки, соотношение риск/прибыль и показатели максимальной просадки. Разберем на нашем примере.

Миксер
Подгонка риска на один алгоритм на основе исторического метода VaR.

При 37 алгоритмах в портфеле и при фиксированном риске на одну сделку в 0,31% мы бы не превысили просадку в 14,77%. Это именно при историческом моделировании с 2007 по 2024 год.

Допустим, для нас 15% просадки многовато, и хотим снизить этот показатель до 10%. Настраиваем новый риск на один алгоритм в меньшую сторону.

Value at Risk
Снизили историческую просадку до 10%.

Видим, что при снижении фракции до 0,2% снизилась и максимальная историческая просадка. Аналогичным образом всё работает и наоборот — в сторону повышения риска. Вы можете самостоятельно потестировать демонстрационный миксер по ссылке ниже — просто скачайте файл себе, и его можно будет редактировать.

Плюсы и минусы исторического метода VaR

Из плюсов: относительная простота подсчетов, особенно если использовать наши готовые макросы GetStats.

Из минусов: исторический метод на то и исторический, что настраивает риск только на основе прошлых данных, не имея возможности анализировать текущее состояние рынка.

В нашем Telegram-канале есть то, чего не публикуем на сайте 📈

Метод Монте-Карло (Monte-Carlo Method)

Метод Монте-Карло (МК) — компьютерный симуляционный метод, который позволяет моделировать различные сценарии и оценивать VaR, используя случайные выборки. МК служит для того, чтобы провести глобальный стресс-тест отдельной стратегии или портфеля алгоритмов.

МК перебирает наш миксер либо методом перетасовки — когда сделки переставляются местами случайным образом, либо методом случайного удаления сделок. В итоге мы получаем вероятностные кривые и параметры риска.

Value at Risk
Кривые доходности портфеля с помощью перетасовки сделок.
Кривые доходности портфеля с помощью удаления случайных сделок.

Плюсы и минусы метода Монте-Карло

Из плюсов: в отличие от исторического метода, где используется только одна вероятность портфеля, метод Монте-Карло симулирует огромное количество вероятностей того же портфеля. То есть мы получаем данные как гипотетически худшего, так и гипотетически лучшего сценария. За счет этого фракция (риск на один алгоритм) выбирается точнее.

Из минусов: без специальных навыков и софта просто так МК не подсчитать. К тому же мы все еще строим нашу риск-модель на основе исторических данных, пусть и с учетом множества симуляций.

Параметрический метод VaR (Parametric Method)

Параметрический метод, часто называемый вариантом Гаусса, основывается на предположениях о нормальном распределении доходностей и использует статистические параметры (среднее и стандартное отклонение) для расчета VaR.

Формула параметрического метода VaR

Формула выглядит так:

Value at Risk
Формула Value at Risk.

Где: 

  • Z-score, или z-оценка, — это статистический показатель, который описывает, насколько далеко значение находится от среднего значения набора данных, выраженное в стандартных отклонениях. Упрощаем. Представьте, что вы участвуете в соревновании по бегу, и обычное время, за которое большинство людей пробегает дистанцию, составляет 5 минут. Если ваше время — 4 минуты, мы используем z-score, чтобы выяснить, насколько вы быстрее или медленнее среднего результата. Если z-score положительный, вы бежали быстрее обычного, если отрицательный — медленнее. Таким образом, z-score — это способ измерить ваш результат в контексте результатов всех участников
  • Std. Dev — Standard Deviation — стандартное отклонение актива, по которому ведется торговля
  • Amt. Invested — объем купленного актива, который измеряется в валюте вашего счета

Считаем стандартное отклонение

Стандартное отклонение в кривой Гаусса (нормальном распределении) — это способ измерить, насколько данные разбросаны вокруг среднего значения.

Value at Risk
Стандартное отклонение отображается как сигма: σ. Одно стандартное отклонение равняется -1σ или +1σ, в зависимости, куда отклоняются наши данные.

Представьте себе группу людей, измеряющих свой рост. Если большинство людей имеют рост, близкий к среднему, и только некоторые значительно выше или ниже, разброс (стандартное отклонение) будет маленьким. Но если много людей имеют рост, сильно отличающийся от среднего, разброс будет большим. Так, стандартное отклонение помогает понять, насколько близко к среднему находятся большинство значений в наборе данных.

Напоминаем про статью Как использовать математику в трейдинге, если вы вообще не математик — без понимания того, как работает нормальное распределение Гаусса, будет сложно ориентироваться и с z-score, который мы скоро рассмотрим.

Для вычисления стандартного отклонения нам нужны данные о доходности финансового инструмента. Исторические цены мы скачивали у брокера Dukascopy. Исходя из данных закрытия цены, мы можем посчитать Daily Retrurns в %, то есть доходность актива за день. Это первая задача.

Value at Risk
Данные по AUD/CHF.

Вы можете параллельно следовать за всем процессом, получив доступ к таблице по кнопке ниже. Там же есть и формула Excel для вычисления Daily Returns, и формула для подсчета стандартного отклонения. Для упрощения понимания пример основан пока что только на 2-х инструментах и только за короткий период.

Исходя из нашего тестового примера, мы получили месячное стандартное отклонение по AUD/CHF = 0,56%. Все аналогично считается для GBP/JPY — его стандартное отклонение 0,72%.

Value at Risk
Формула стандартного отклонения в Excel.

Также можно изучить, как в Excel строится VaR для 4-х валютных пар. Напомним, что таблицу можно использовать как шаблон для любых инструментов. Например, можно потестировать VaR для отдельных акций или ETF.

Выбираем z-score

Z-score будет у нас в роли константы. Константа выбирается в зависимости от уровня уверенности, с которой мы подходим к решению задачи. Чаще всего доверительный интервал (так называется эта уверенность) выставляется на уровне 95%.

Так как рынки имеют долю неопределенности, никогда не будет 100% уверенности в финальном результате. Уровень уверенности касается не только инвестиций, но и других сфер жизни, где эксперимент имеет вероятностный характер.

Доверительный интервал применяется в науке, маркетинге и бизнесе в целом.

Чтобы выбрать коэффициент, нам понадобится z-score table, таблицу, которую можно легко загуглить.

Value at Risk
Так выглядит z-score table.

Ок, почему нам нужен отрицательный z-score, который слева распределения? Потому что именно там концентрируются экстремальные отрицательные значения цены, то есть сильные падения. И именно их мы стремимся контролировать.

Но!

Это важно для инвесторов, кто покупает акции с целью их роста, но менее важно для трейдеров, которые могут работать как в лонг, так и в шорт. Нам же нужен отрицательный коэффициент z-score, потому что он будет оберегать нас от экстремальных отрицательных сделок, то есть сильных убытков. Все, что находится справа, нас не волнует, потому что там экстремальные прибыльные доходности. Чем они экстремальней, тем больше заработок.

То есть если мы построим распределение, например, прибыльных и убыточных сделок, тогда z-score будет нас оберегать от экстремальных убыточных сделок.

Value at Risk
Фиолетовая линия — наш уровень z-score, который мы не хотим пересекать влево с уверенностью в 95%.

Хорошо, теперь выбираем нужный z-score в плане константы.

Value at Risk
Выбираем корректный z-score.

Если мы выбрали уровень доверия в 95% (а именно такой мы и выбрали), тогда ищем значение сверху = 0,05 (5% — оставшиеся проценты данных слева), далее ведем взгляд вниз и ищем наиболее приближенное значение к 0,05. Находим 0,04947, и вот оно, значение слева: -1,6, или точнее — 1,65 (знак «-» можно убрать). Так получается константа z-score = 1,65. Для уверенности в 99% z-score будет равен 2,33.

Value at Risk
Z-score для разных уровней доверия.

И разберем заключительный параметр — объем сделки.

Вычисляем объем сделки — Amt. Invested

VaR создан изначально для классических долгосрочных инвестиций. И там с вычислением Amt. Invested проблем особых нет. Например, при покупке акций Apple на сумму 10 000 $ Amt. Invested будет равняться 10 000 $. Всё просто, если вы не используете кредитное плечо. А в пассивных инвестициях оно обычно и не используется.

Но в нашем кейсе 80% алгоритмов работают на валютных парах, где используются лоты и кредитное плечо. То есть появляется задача: лоты переводить в USD (потому что алгоритмический счет в долларах США). Подсчет лота хорошо описан в нашей статье Вычисляем лот для форекс, фондовых и сырьевых инструментов. Весь этот процесс достаточно скучный, но очень важный, особенно в алгоритмическом трейдинге.

На языке Java готовый код с пояснениями выглядит так:

    
     public double getNominalValue(Instrument inst, Double amount) throws JFException {
        double tickSize = inst.getPipValue() / 10; // минимальное движение цены, т.е. если для eur/usd (цена 1.09857), тут будет значение 0.00001, usd/jpy (143.512) = 0.001
        double tickValue = utils.convertPipToCurrency(inst, account.getAccountCurrency()) * 100000; // денежная стоимость 1 лота двигающегося по нашей цене
        double nominalValuePerUnitPerLot = tickValue / tickSize; // изменение цены для 1 лота
        double getClose = history.getBar(inst, Period.ONE_MIN, OfferSide.BID, 0).getClose();
        double nominalValue = amount * nominalValuePerUnitPerLot * getClose; // возвращает 3 компонент из формулы VaR, эквивалент вложенных $, а не лотов. Сколько вложено в позицию $
        return nominalValue;
    
   

Благодаря этим строчкам на выходе мы получаем Amt. Invested именно в сумме USD, а не в лотах.

Как работает параметричекий VaR в платформе JForex

Ок, разобрались с подсчетами всех 3-х коэффициентов. Можно тестировать.

Сперва определяемся с настройками. Разберем настройки нашего VaR, который используется в алгоритмах.

Так как наш подход среднесрочный, мы остановились на контроле именно дневного VaR. Собрав статистику по сделкам, выяснили, что хотели бы сократить убытки, которые сильно превышают 2% в день. 

Value at Risk
Красные гистограммы — дневные убытки.

Вшиваем весь код VaR в сам алгоритм (да, код нужно добавлять в каждую торговую стратегию), и при запуске в карточке появляются такие настройки:

Value at Risk
Настройки VaR в карточке алгоритма.
  • z-score — его выбираем 1.65, как рассказывали выше
  • StandardDeviationPeriods — за какой период времени алгоритм считает значение стандартного отклонения по инструменту (на примере выше — по EUR/JPY). 27 — рабочие дни, когда ведется торговля
  • Correlation periods — за какой период считается корреляция с другими активами, по которым открыты позиции
  • VaR period — на каком временном промежутке будет контролироваться VaR
  • VaR percent — тот самый ограничитель в %, при достижении которого новые сделки открываться не будут

Кусочек кода этих настроек с пояснениями — ниже.

    
     @Configurable("Z-score, 95% = 1.65, 99% = 2.33")
    public double zScore = 1.65;
    @Configurable("StandardDeviationPeriods: ")
    public int standardDeviationPeriods = 27; // 21 if daily, торговый месяц брать для нас логичнее 25, т.к. в Filter.WEEKENDS воскресенье считается торговым днем, а в MT5 нет
    @Configurable("Correlation periods")
    public int corrPeriod = 27;
    @Configurable("VaR period") // используется для расчета daily returns
    public Period periodVaR = Period.DAILY;
    @Configurable("VaR percent")
    public double varPercent = 2;
    
   

Далее запускаем алгоритм. Его действия следующие:

Value at Risk
Алгоритм последовательных действий.

То есть при каждой новой сделке происходит пересчет VaR, который не должен превышать 2%. Ниже пример алгоритма, который открывал сделки и не превышал VaR в 2%. Иногда VaR снижался, иногда повышался (в зависимости от направления сделки и диверсификации портфеля).

Value at Risk
Пересчет VaR каждый раз, когда алгоритм открывал сделку.

Так мы получаем текущий потенциальный риск на день, который не хотим превысить с уверенностью в 95%, и который обновляется каждый раз, как открывается новая сделка.

Плюсы и минусы параметрического VaR

Из плюсов: в отличие от прошлых методов VaR, параметрический метод анализирует именно текущую волатильность и текущее состояние рынка. То есть чем больше волатильность, чем больше объем сделок и их корреляция, тем больше будет значение VaR. Ваши риски контролируются при каждой новой сделке, и вы знаете, в рамках каких рисков вы находитесь.

Следующий плюс — гибкость. Вы можете настроить дневной, недельный или месячный барьер риска, который будет подходить именно для вашего риск-профиля. У нас он 2%, у вас же может быть и 10%. Чем выше риски, тем выше потенциальные доходности, и наоборот.

Финальный плюс: эта модель отлично подходит для пассивных инвестиций, где считать все значительно проще (понадобится только Excel).

Из минусов: параметрическую модель именно для трейдинга сложно создать самому с нуля. Здесь нужны знания программирования, статистики и математики. Подходит же эта модель только тем, у кого уже есть портфель торговых алгоритмов (5–10 штук и более). Если количество стратегий меньше, можно обойтись и историческим VaR + Монте-Карло.

Следующий минус — нормальное распределение не всегда подходит для финансовых рынков. Здесь действуют степенные законы (к которым относится, например, распределение Парето). Если очень коротко и просто: при степенных законах риск достигнуть экстремальных убытков выше, чем при распределении Гаусса. Соответственно, наша модель с ограничением в 5% не совсем точна. Но если у вас нет миллиарда под управлением, тогда сильно по этому поводу можно не переживать.

Если вам интересно разобраться в устройстве рынков с точки зрения науки, распределений и статистики, тогда вам нужен модуль для опытных трейдеров VSA 2.0: по следам умных денег.

Заключение

Разобрали сложную, но эффективную модель контроля рисков именно с точки зрения трейдинга. 99,9% частных трейдеров никогда до нее не дойдут. Мы же решили пройти этого босса. Да, у каждого метода есть ограничение, но как отправная точка — это лучшее, что можно использовать сегодня.

Модель VaR работает с любыми инструментами: валюты, фьючерсы, криптовалюты или акции. Но разные платформы и брокеры имеют разные языки программирования, так что один код для всех платформ не подойдет — нужно переписывать и адаптировать. Для пассивных инвестиций всё проще: вы можете использовать наши шаблоны в Excel и просто заменять одни цены на другие.

Вопросы или отзывы пишите ниже — на все ответим.

Вебинар

Поделиться статьей

С радостью ответим на ваши комментарии

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читайте также

Для продолжения нужна подписка Empirix Prime

Подписку можно оформить по кнопке ниже.

Если же есть активная подписка — войдите в личный кабинет.

Не пропустите лучшие статьи и видео о трейдинге — подписывайтесь на наш Telegram

До 30% скидок на все курсы. Только для тех, кто прошел вступительный материал до конца

  1. Стоимость любого курса можно разделить на 4 части. Без переплат, комиссий или кредитных договоров.
  2. Если курсы вам не подойдут — вернем деньги без вопросов.

Знания и практика — это то, что нужно для прибыльного трейдинга. Начните трейдинг-эволюцию уже сейчас