Волатильность волатильности для акций и криптовалют

Легко генерируемое распределение, которое не так уж и чертовски нормально: простой stochvol.

Часть 1. Ненавязчивое введение в модель Хестона

С примерами Excel!

Это файл Excel. Получите!

https://github.com/diffent/excel/blob/main/volofvol2.xlsx

Когда вы впервые слышите фразу «волатильность волатильности», и если вы увлекаетесь математикой и моделями прогнозирования, вы можете легко подумать: «Чувак, это классная идея». Но какой бы крутой она ни была, эта фраза не отражает в полной мере поведение и гибкость этих типов моделей оценки активов. По сути, эта модель даже интереснее (и запутаннее), чем кажется. В этой статье мы продемонстрируем первую часть, обозначенную как «v из v», прежде чем перейти к другим частям модели Хестона.

Сейчас мы даже не будем печатать здесь уравнения модели Хестона, потому что это может сбить вас с толку, и вы можете подумать, что все это сложнее, чем есть на самом деле. Вы можете найти их, если хотите, но поначалу они могут быть немного пугающими:

Для сравнения, историческая волатильность актива — это просто стандартное отклонение наблюдаемой доходности. Здесь мы будем работать с дневной доходностью, а волатильность просто оставим в этих дневных единицах. Обратите внимание, чтобы некоторые опубликованные источники печатали волатильность в годовом исчислении, а не то, что мы здесь делаем.

В этом упражнении мы не будем рассматривать эмпирические данные о доходности (прямо с рынка), так как мы не хотим излишне запутать читателя. Об этом мы поговорим в следующих статьях (эмпирическость, а также, возможно, путаница). Мы начнем с теоретического актива, который имеет нулевой дрейф, бычий или медвежий, и имеет стандартное отклонение, равное 1, чтобы облегчить понимание формул при первом прохождении (предположим, что эта 1 подразумевает 1% (stdev) дневной волатильности). Можно даже подумать о том, чтобы назвать этот актив! Мы могли бы назвать это: А) обыкновенными акциями вымышленной и сверхгенерической фирмы GlobeCo, Б) новой причудливой криптовалютой с торговым символом NORMY или В) любым другим причудливым названием актива, которое вы могли бы придумать.

Формулы

Скачайте и откройте приведенный выше лист, если хотите, и следуйте инструкциям!

В нашем примере с Excel мы начали с генерации стандартного нормального распределения случайных данных по формуле в столбце A:

=НОРМИНВ(РАНД();0;1)

[вышеприведенное не является тем, что в настоящее время находится на листе примера, но здесь для справки, чтобы напомнить вам: «как сгенерировать стандартное нормальное рассеяние точек в Excel».]

Для сравнения, «стандарт» подразумевает просто среднее = 0, стандартное отклонение = 1.

Стандартное отклонение, равное 1, является последним аргументом в этой функции.

Теперь вы видите, что в нашем примере столбец А листа у нас есть это (например, в А3) как:

=NORMINV(RAND();0;1*D3) [Уравнение 1]

Мы делаем 1000 точек (строк) из этого в столбце A для красивого круглого числа.

Результатом в D3 является значение, на которое мы хотим масштабировать номинальное стандартное отклонение 1 (третий аргумент NORMINV), но это D3 также является формульным значением в Excel.

Формула в D3 — это просто ограничитель границ для реальной формулы в C3, потому что функция NORMINV в Excel жалуется, если мы устанавливаем значение stdev равным нулю или меньше: Практичное ограничительное ограничение для наших формул.

Теперь давайте посмотрим на C3 (это генератор волатильности волатильности, который мы будем применять к нашему основному генератору случайных чисел):

=НОРМИНВ(РАНД();1;$I 3 руб.)

И снова у нас есть нормально распределенный генератор случайных чисел, но на этот раз с центром в 1 (нейтральный коэффициент умножения), и мы позволяем нам, пользователям, контролировать стандартное отклонение этого распределения, изменяя I3.

Итак, для просмотра [уравнения 1] постоянный, неслучайный аргумент стандартного отклонения 1 в нашей исходной формуле в ячейках столбца A модифицируется (масштабируется) на случайную величину (D3). В этом и заключается основная идея «волатильности волатильности».

Интересно: когда мы впервые закодировали это, вместо того, чтобы умножать исходное «возвращающее» stdev на новую случайную величину, мы добавили его (центрируя новый генератор случайных чисел на 0 вместо 1, чтобы мы получили некоторые прибавления и некоторые вычитания из основного стандартного отклонения, увеличивая и уменьшая его по мере продвижения). Кажется, что это тоже интересная модель, но это не так, как модель Хестона. Так как мы пытаемся направить эту историю в сторону H, мы переставляем формулу на метод множителя. Но: идеи…

Мы вычисляем первые четыре метрики, связанные с моментом распределения, результирующих данных из столбца A и помещаем их в столбец E для справки.

Рисунок 1: Верхняя левая ячейка — E3 на листе примера. Это просто пересчет для проверки нашего генератора случайных возвратов в столбце A со стохволем I3, близким к нулю (например, без стохвола)

Кроме того, мы строим динамическую гистограмму из 1000 точек данных в столбце A, которая автоматически пересчитывается системой анализа данных Excel:

Рисунок 2: Поскольку мы генерируем только 1000 точек, это не показывает симметричное стандартное нормальное распределение.

«Сворачивание» возвращается в цены

Если представить, что столбец А — это ежедневная доходность актива в процентах (с нулевым дрейфом с течением времени… mean 0 в нашей формуле), мы можем вычислить «ценовой» ряд, сгенерированный этим в столбце B, обычным методом: просто умножив доходность каждого дня, центрированную на 1, на цену предыдущего дня, начав цены с произвольного значения 1 доллар в B2. Основные сведения см. в формулах в столбце B.

Рисунок 3: Типичный ценовой ряд, сгенерированный с возвратом stdnorm, без дрейфа, без стохвола. График столбца Б. Х – «торговые дни». Примечание: в левом верхнем заголовке должно быть написано «Price time series»

Мы также строим сами доходы в виде временных рядов на листе для справки, но нам не нужно показывать это здесь. Вы увидите это, если откроете лист!

Базовая модель, нулевая стохастическая волатильность

Давайте рассмотрим несколько примеров: Во-первых, попробовав эталонный случай, мы устанавливаем I3 близким к 0. Если мы используем ровно 0 в качестве аргумента stdev NORMINV, NORMINV не работает… так что просто держите I3 выше нуля.

Агрегированные результаты приведены в столбце E [Рисунок 1 выше].

(Ваши значения могут незначительно отличаться, так как это лист несходящегося генератора случайных чисел).

Среднее значение близко к 0, stdev близко к 1, skew (бычий/медвежий) близок к 0, как и kurt(osis) (удилище хвоста). Эти значения были бы ближе к их теоретическим, если бы вы добавили больше точек данных (строк) в выходные данные модели. Вы можете попробовать сделать это самостоятельно позже. (Конечно, вам нужно скорректировать формулы в столбце E, чтобы убедиться, что вы вытащили эти дополнительные точки, если вы это сделаете).

Построим гистограмму столбца «Дневная доходность фальшивой компании», чтобы вы могли увидеть, как она распределяется за 1000 фальшивых торговых дней [рис. 2].

Каждая повторная генерация листа (Shift F9 на ПК в Excel… или просто измените любую ячейку, в которой нет ничего важного, чтобы перегенерировать лист) генерирует новые случайные значения, так что вы увидите, что статистика распределения немного колеблется вокруг своих теоретических целей, так как в этом примере мы используем только 1000 точек.

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

Раскручиваем стохвол

Чтобы было проще обсуждать, вместо волатильности волатильности давайте просто назовем I3 «стохволом» для краткости.

Затем мы увеличиваем этот стохвол в I3 до 1 (до того же уровня, что и обычная волатильность).

Теперь мы видим из нашей гистограммы (данных столбца А), что искусственно сгенерированная доходность здесь (из нашего уравнения генератора объемов в столбце А) начинает казаться больше похожей на то, что мы наблюдаем в реальной доходности акций или криптовалют: распределение доходности имеет жирные хвосты!

Наши метрики также показывают это: эксцесс (курдючная жирность) большой, а stdev теперь значительно выше 1. Я полагаю, что мы могли бы ожидать, что асимметрия будет близка к нормальному значению распределения 0, поскольку мы не кладем большой палец на шкалу генератора случайных чисел, будь то бычий или медвежий. Мы просто расширяем (или сужаем) базовый генератор случайных чисел в столбце A на другое несвязанное случайное значение.

Важно отметить несвязанную природу этого 2-го генератора случайных чисел, потому что в более продвинутой модели Хестона 2-й генератор связан с… Скажем так, «другие вещи» пока.

И не только расширение (которое может быть достигнуто просто за счет увеличения стандартного отклонения генератора), но и изменение его формы.

Вот несколько снимков конкретных регенератов искусственного следа цены с этим более высоким уровнем стохвола:

Они подозрительно похожи на реальные данные ценовых рядов фондового рынка, не так ли? В некоторых временных окнах они являются бычьими (постоянно идут вверх), даже несмотря на то, что в наших генераторах случайных чисел нет абсолютно никакого перекоса или среднего «наклона» (положительного или отрицательного). Иногда вам просто везет. В некоторых временных окнах они являются медвежьими (последовательно снижаются). В какие-то временные окна они блуждают и действуют как «осцилляторы» («возврат к значению»), если использовать жаргон. Они имеют какой-то «грубоватый» вид. Но, как мы отмечали в предыдущей статье, не пытайтесь проводить «технический анализ» на этих графиках и выявлять закономерности в этих… Потому что они совершенно случайны. Если результаты вашего технического анализа по ним продолжат давать хорошие прогнозы, то это будет случайностью.

Если вы «читаете графики» на регулярной основе, кажутся ли эти ценовые графики более реалистичными, чем диаграмма броуновского типа движения на рисунке 2, или нет? Какие-то скачки и скачки, какие-то большие падения в определенные дни. Было ли это связано с «новостями» или другой новой информацией, которую получили инвесторы? Но не в нашем случае. Здесь нет никаких новостей, и нет никакой связи с реальным миром. Это строго случайно сгенерированные пути. Тем не менее, они выглядят так… реальный!

Раскрытие

Теперь, когда вы увидели простоту этой первой части стохвольной модели, мы раскроем первую часть уравнений стохволовой модели Хестона. Используйте свой iPad в качестве щита, чтобы не слишком испугаться, и просто посмотрите на него. Включите iPad Safari и настройте его на просмотр nytimes.com. Таким образом, он будет блокировать большинство рациональных мыслей. Шутишь! Я шучу! Мы любим «Нью-Йорк Таймс»!

Первая часть модели Хестона

Видите ли, вот почему мы не вставили это уравнение сюда первыми, иначе вы могли бы просто сказать: «Щелк, бммм…» (звук старого стационарного телефона, повесившего трубку) и прокрутите эту статью. И это только первая часть, и это еще не все. И мы уже упростили его, полностью исключив левый член (среднее значение «дрейф») и просто установив его равным нулю в нашей модели. И все же… Те графики, которые мы напечатали выше, выглядят чертовски хорошо в качестве моделей фондового рынка, не так ли?

Осторожность

Следует отметить, что это стохастическое дифференциальное уравнение, которое описывает, как распределение вероятностей движется во времени, а не то, как одна ценовая точка движется во времени (как в одиночных временных рядах, которые мы генерируем здесь, в нашем файле Excel). Excel генерирует эти трассировки по одной (при каждом обновлении листа), но формальное аналитическое уравнение здесь описывает, как вся агрегация этих сгенерированных временных рядов будет перемещаться во времени. Эту агрегацию мы аппроксимируем в наших приложениях MCarloRisk3D (описанных в наших предыдущих статьях), чтобы смоделировать, как распределение цены/вероятности реального актива [акции или криптовалюты] изменяется во времени. В конце концов, мы попробуем сделать то же самое с этой стохвол-моделью в нашем файле Excel (в будущих продолжениях этой статьи), и, собственно говоря, первый прототип нашего приложения MCarloRisk3D был написан в Excel! [В этом листе нет математики стохвола.] Но сначала (в следующих статьях) мы добавим в модель стохвола другие важные термины и посмотрим, как они влияют на отдельные ценовые трассы.

Радиканд

Внимательные читатели заметят символ квадратного корня над v sub t в приведенной выше сложной формуле (наша стохастическая волатильность). Я не думаю, что это действительно v, я думаю, что это греческое nu, которое опционные трейдеры любят называть vega, но это другая вега, чем та, к которой они привыкли, так что… в любом случае. Просто v sub t здесь. Мы еще не добавили этот квадратный корень в наши формулы Excel, так как он ничего не добавляет к пониманию концепции волатильности волатильности в этой первой части нашего описания… Но его легко добавить (что мы и сделаем в следующей статье этой серии). И это, вероятно, сделает нашу модель лучше, если мы верим профессору Хестону и Ко.

Конечно, вы можете попробовать сами. Просто оберните SQRT вокруг формулы в столбце C. Если вы это сделаете, вы должны позаботиться о том, чтобы значения, которые вы «извлекаете из квадратного корня» («радиканты», если использовать прекрасное слово, о котором мне недавно напомнили — знал ли я когда-нибудь об этом, или я просто воображаю, что знал? — в этой истории другого автора, специализирующегося на математике) не были отрицательными, иначе Excel дает плохие результаты. Мы не хотим вводить мнимые числа в нашу ценовую модель [которые будут получены в результате извлечения квадратного корня из отрицательного числа… хотя Excel может просто блевать на эту просьбу. Ну, давай, посмотрим… Это дает #NUM! результаты, к вашему сведению. Этого можно избежать, используя меньшие значения в I3 (настройка stochvol) или другими способами. Вы также можете посмотреть различные ссылки на Хестона, чтобы узнать, почему этот квадратный корень существует… Это может быть просто потому, что это лучше согласуется с наблюдением, чем масштабирование без корня, или это может иметь более глубокий смысл, основанный на какой-то теоретической концепции. Этот автор навскидку не помнит ответ на этот вопрос, но, мы выложим его здесь, когда узнаем ответ, если узнаем ответ. В нашем примере модели, не привязанной к каким-либо реальным данным, все, что может сделать SQRT, это изменить форму распределения стохвола, на которое мы масштабируем исходное распределение доходности. Поскольку распределения вероятностей имеют значения (Y) всегда <= 1, функция квадратного корня увеличивает их нелинейным образом.

Где применение функции квадратного корня увеличивает (x < 1) или ослабляет (x > 1). Меньшие значения увеличиваются больше, чем значения, близкие к 1.

Например, применение квадратного корня к стандартной нормальной форме распределения приводит к тому, что она расширяется и имеет более толстые хвосты:

Как стандартное нормальное распределение будет модифицировано, если мы возьмем из него квадратный корень. Он становится шире с более толстыми хвостами.

В нашем приложении MCarloRisk3D в разделе стохастической волатильности на панели Tune у нас есть функция, позволяющая применять любую степень к базовому объему (например: почему 0,5 квадратного корня? почему не 0,4? 0,6?). После того, как вы построили модель, вы можете придумать заманчивые параметры настройки, которые позволят вам приблизить модель к наблюдениям, которые вы делаете из реальности.

Панель Tune в нашем приложении MCarloRisk3D с функциями stochvol открыта (правая панель). Это также дает представление о других параметрах модели Heston, которые поддерживает наше приложение, и о которых мы расскажем в следующей серии статей.

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

Подсказки о следующем этапе

На этом наша история не заканчивается, поскольку, как я намекнул в начале этой статьи, «волатильность волатильности» — это только часть того, что происходит в модели Хестона. Нет, в подобных моделях стохвола также есть связи между этим объемом и другими событиями, происходящими в реальности, например, изменением направления цены. Это необходимо для того, чтобы учесть такие наблюдения, как: активы, как правило, более волатильны, когда они падают в цене, чем когда они растут в цене. Существует также фактор «липкости»… Актив, который становится более волатильным, имеет тенденцию оставаться волатильным в течение некоторого времени и не сразу возвращается к более постоянному поведению в долгосрочной перспективе. Ничего себе, правда? Много интересного для размышлений, помимо теоретического броуновского движения… где обычно распределяются все доходы от активов, «и все дети выше среднего», как утверждается, в маленьком городке Лейк-Вобегон в штате Миннесота.

Дополнительные материалы

Если вы хотите узнать больше о применении этого типа модели в нашем приложении MCarloRisk3D с использованием реальных данных, ознакомьтесь с нашим техническим документом, в котором приводится пример применения этой модели к моделированию цен на биткойны:

https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3693387

Программное обеспечение MCarloRisk3D можно найти в магазинах приложений для macOS и iPad, а также в магазине приложений store.microsoft.com Windows. Тем не менее, версия для Windows отстает от версий для Apple, потому что MS вытащил почву из-под Project Islandwood, который мы использовали для переноса кода на Windows:

https://blogs.windows.com/windowsdeveloper/tag/project-islandwood

«Вау, какой замечательный проект!» [Давайте избавимся от него.] Тем не менее, по какой-то причине у них есть ресурсы, чтобы поместить мультфильм в мою строку поиска. Что это такоеПочему?

Мультфильмы, мускулистые на поле строки поиска Windows.

Часть 2. Кросс-случайная корреляция для моделирования акций и криптовалют

Эль Сегундо: «второй»… «Значительный центр нефтяной и аэрокосмической промышленности в Южной Калифорнии». (Любезно предоставлено Википедией)

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

Скачать последний файл Excel для этой статьи можно здесь:

https://github.com/diffent/excel/blob/main/volofvol2H.xlsx

Подсказка: перейдите туда, а затем нажмите Raw, и он должен загрузиться.

Речь идет о двух случайных процессах: один процесс, который генерирует основной дневной доход (в нашем примере актива: со средним нулем и стандартным отклонением 1%), и другой процесс, который генерирует волатильность волатильности со средним значением 1 и некоторым стандартным отклонением, которое можно настроить. В нашей предыдущей статье мы рассмотрели примеры корректировки этого объема; Хотя, конечно, мы еще не подгоняли его под какую-то конкретную цель.

Обзор

Вспомните нашу предыдущую статью, что мы использовали генератор случайных чисел в Excel, который создавал стандартные нормальные точки рассеяния (среднее значение 0, стандартное отклонение 1), а затем модифицировали его так, чтобы стандотклон сам по себе был случайным значением, получая что-то вроде:

=NORMINV(RAND( ), 0, 1 * NORMINV(RAND( ),1;0.2))

Внешний генератор случайных чисел (полужирный) в этом примере имеет среднее значение 0 и стандартное отклонение 1, а внутренний (который изменяет стандартное отклонение этого «внешнего» значения) имеет среднее значение 1 и стандартное отклонение 0,2. Константы [0, 1, 1, 0.2] предназначены только для конкретного выдуманного примера актива; Они не универсальны. Внутренний генератор случайных чисел представляет собой базовую модификацию «волатильности волатильности». В нашей таблице мы разделили это на отдельные шаги, чтобы упростить просмотр и трассировку (поскольку эта статья является изложением, а не упражнением по написанию компактных формул), а также добавили необходимые ограничения, чтобы аргументы stdev не выходили за пределы диапазона, поддерживаемого Excel.

Два экземпляра RAND( ) здесь никак не связаны в нашем предыдущем примере, за исключением того, что они обращаются к одному и тому же генератору случайных чисел в Excel (что, если приверженцы хотят указать палками, является очень слабой связью… но не настолько, чтобы заметить для этого грубого анализа). Эти два случайных процесса практически не связаны друг с другом и должны показывать коэффициент корреляции, близкий к нулю, когда мы увеличиваем количество точек выше 1000. Мы можем увидеть небольшую корреляцию при подсчете 1000 дней из-за случайности. Согласно нашей предыдущей статье, случайность не означает «отсутствие закономерности», но подразумевает, что любые найденные закономерности не предсказывают будущее.

В этой статье мы сначала покажем, как мы можем генерировать случайно коррелированные распределения нормальной формы (по форме похожие на нормальные распределения, если мы смотрим на одну переменную за раз… на двух предельных распределениях в более причудливой терминологии… эквивалентно частному случаю эллиптического распределения с двумя переменными, может быть?) С помощью этого интересного метода с веб-сайта, отмеченного ниже на этом изображении:

Мы выполняем эту математику на листе randcorr этого нового файла примера Excel:

Пример двух случайных распределений, отрицательно коррелированных

Столбцы A и B являются стандартными нормальными случайными столбцами (некоррелированными), а столбцы D и E являются частично коррелированными результатами применения приведенной выше формулировки.

Вы можете ознакомиться со ссылкой, на которую мы ссылаемся выше, чтобы узнать, как это работает; формулы, которые мы вводим в Excel для этого, находятся в столбцах D и E этого листа.

Чтобы управлять целевой корреляцией в этом примере, можно настроить значение в K2. Полезно поэкспериментировать с этим значением, чтобы получить интуитивное представление о том, что происходит, глядя на точечную диаграмму при изменении целевой корреляции. Отрицательные значения допускаются и даже приветствуются, хотя вы можете захотеть сохранить числа от -1 до 1, поскольку это диапазон обычно вычисляемых коэффициентов корреляции.

Пример положительно коррелированных двух случайных распределений

Кроме того, мы повторно вычисляем корреляцию сгенерированных точек, используя функцию CORREL в N2, чтобы проверить нашу математику. TDD, Test-Driven-Development (Разработка через тестирование). Вы должны приблизиться к входному значению, которое вы установили в K2, до тех пор, пока вы держите K2 в диапазоне от -1 до 1 (включительно).

Обратная связь

Далее переходим к листу randcorrWithFeedback.

randcorrWithЛист обратной связи

Здесь мы используем вторую из коррелированных последовательностей случайных чисел (столбец E, vol-of-vol) для изменения (путем умножения) стандартного отклонения в формуле первой из коррелированных последовательностей (столбец D). На первый взгляд может показаться, что это может привести к циклическим ссылочным формулам в Excel (бесконечные циклы), но это не так. Вы можете изучить приведенные выше простые формулы псевдокода для генерации связанных последовательностей, чтобы убедиться в том, что Y (в снимке) не зависит от X.

Мы также можем показать это с помощью стрелок приоритета трассировки Excel:

Тот же снимок, что и предыдущий, с приоритетом трассировки для E2

Кликнув по ячейке E2 (vol-of-vol) и проследив за старшинством, мы видим, что E2 не зависит от D2 (самой отдачи). Таким образом, мы можем использовать выходные данные E2 в формуле D2.

Формула в D2 имеет стандартное отклонение (номинально 1 в нашем примере, как определено в H2), умноженное на частное (частично коррелированное) случайное значение, полученное в той же строке в столбце E.

Формула на листе D2 randCorrWithFeedback, показывающая, от каких ячеек она зависит напрямую, с помощью стандартной подсветки ячеек Excel при активном редактировании формулы.

Результирующее распределение теперь является эмерджентным явлением, которое оказывается лучше, чем кажется, при всей этой случайности случайности. Вы можете убедиться в этом, изучив гистограммы выше.

Вместо того, чтобы просто контролировать удилище (эксцесс) нашего распределения доходности, как мы делали в предыдущей статье (корректируя stochvol stdev), мы теперь также можем «положить большой палец на весы» асимметрии распределения (бычий или медвежий), настроив целевую корреляцию между двумя случайными рядами (K2 на этом листе).

Ниже приведен еще один снимок экрана распределения «возвращаемости», полученного в результате установки целевой корреляции в отрицательное значение. Обратите внимание на отрицательный перекос по сравнению с приведенными выше гистограммами:

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

Теперь все, что нам нужно сделать, это использовать эти сгенерированные доходы обратно в столбец A Листа 1, вместо того, чтобы вычислять их более простым способом, как мы делали в предыдущей статье.

Обратите внимание, что строки столбца A находятся на одну строку ниже на листе 1 по сравнению с этим листом randcorrWithFeedback.

Мы установили A3 на листе 1, чтобы получить доступ к этому новому листу подисчисления, используя следующую формулу:

=randcorrWithFeedback! Д2

Затем мы копируем формулу вниз по столбцу A, чтобы получить наши 1000 баллов.

Мы удалили некоторые ячейки, которые больше не имеют отношения к Листу 1, чтобы избежать путаницы, так как теперь мы вычисляем случайные доходы на другом листе.

Умножение доходов на цены происходит автоматически (так как мы уже настроили его для прошлой статьи) и мы можем наблюдать получившийся график цены.

Вот несколько примеров запуска генератора цен с точно такими же настройками на листе randcorrWithFeedback:

Анимация: Несколько обновлений нашего ценового ряда, собранных из вновь сгенерированных возвратов. Параметры модели одинаковы для всех этих кадров анимации. Видимые изменения связаны с обновлением листа. Каждое обновление приводит к новому случайному блужданию цены, управляемому нашим новым методом получения доходности.

Как и в нашей предыдущей статье, из-за случайного характера этой модели — и даже несмотря на то, что мы не изменили никаких параметров модели — мы получаем разные кривые временных рядов для каждого пересчета листа.

Чтобы получить новый график цены при тех же настройках, можно просто пересчитать лист.

Обычно что-то вроде Shift F9, F9… что-то про F9… ChatGPT, вероятно, может рассказать вам. Раньше для этого был пункт меню, но куда его перенесли, я не знаю. Вы также можете ввести recalc в поле со значком лампочки «Скажите мне, что вы хотите сделать» в Excel, и он найдет его; но этот поиск не подскажет вам точную клавишу быстрого доступа, по крайней мере, в версии Excel, которую я использую. Обнови ИИ, Редмонд.

Поскольку сейчас мы используем два листа, вам, возможно, придется сделать старый «принудительный пересчет всех листов»: Ctrl Alt F9 в некоторых онлайн-документах… Но вы разберетесь.

Немного неудобно переходить на другой лист, когда мы хотим изменить параметры, но мы пока оставляем файл в таком виде, чтобы избежать лишней путаницы. В качестве уточнения легко перенести управляющие параметры на первый лист. Смысл здесь в том, чтобы показать, насколько относительно проста эта концепция (пока)… Хотя это становится немного запутанным.

Помните, что ценовой график, который вы видите в одном цикле обновления листа, является лишь одним из многих возможных.

(«бесконечно» возможно; поскольку мы имеем дело с битовыми значениями с плавающей запятой, оно практически бесконечно, хотя на самом деле не бесконечно)

— пути, которые может генерировать этот генератор случайных чисел. Нам нужно будет агрегировать кучу этих случайных путей, чтобы получить прогнозы цены/вероятности, как мы это делаем в нашем приложении MCarloRisk3D. Одного пути за раз недостаточно, чтобы сказать нам многое, кроме качественного характера этих путей: «гладкий, неровный, импульсоподобный, колебательный, возврат к среднему, бычий, медвежий» и так далее.

Но мы еще не закончили моделирование отдельных путей, поэтому отложим эту агрегацию до следующей статьи этой серии.

Раскрытие

Уравнения, снятые из [Quantstart] (наши аннотации). Да, и столбец 3, о котором мы упоминали выше, относится к рабочему листу из предыдущей статьи (столбец C, без сомнения, если считать столбцы по буквам). В Excel есть иногда используемая функция для превращения индикаторов столбцов в цифры вместо букв:

https://www.indeed.com/career-advice/career-development/numbers-for-columns-in-excel

Опять же, чтобы избежать лишней путаницы, мы раскрыли второе уравнение модели Хестона в конце этой статьи, а не в начале… чтобы попытаться показать, как оно связано с первым уравнением, и показать, что мы только что сделали в Excel. Мы вычеркиваем термины, которые еще не смоделировали. Переменная, которая не фигурирует в этих двух уравнениях напрямую, — это греческая буква rho (⍴), коэффициент корреляции между двумя случайными генерирующими функциями. Это «целевой коррель» в нашем листе randcorrWithFeedback (который пользователь может изменить в K2 этого листа).

Объедки

Одна вещь, которую мы не зачеркнули, — это постоянный коэффициент ξ (xi), который трудно нарисовать, если вы не выучили скоропись (а иногда даже если вы не знаете греческий язык), а также легко спутать с курсивной буквой E. До сих пор мы не слишком интересовались конкретными константами этой модели, поскольку мы еще не настроены на какие-либо реальные обстоятельства; но ξ, по-видимому, соответствует постоянному значению vol-of-vol в листе randcorrWithFeedback, ячейка J2. Он просто масштабирует стохастическое dW, нормально распределенное «жужжание» справа от него.

Другая номенклатура (если не уточненная, то, по крайней мере, освещенная)

Два символа dW названы в честь самого Норберта:

Как отмечает Википедия, это также известно как броуновское движение, которое некоторые из нас, возможно, помнят из уроков биологии в средней школе по отношению к микроскопическим движениям частиц, наблюдаемым в жидкостях (или это была физика?). Может быть, в таком случае он будет обозначен в дБ? — Может, кролик, может. Но дБ также используется для децибел и изменения магнитного поля… Может быть, что-то еще? Так много понятий, так мало букв. Здесь мы просто будем следовать общепринятому использованию dW.

Все, что представляют собой члены dW в нашей математике дискретного времени здесь (в концепции), это: случайное столкновение с использованием случайных значений, взятых из [стандартного] нормального распределения. В нашем Excel мы просто моделируем чистые члены dW с помощью NORMINV(RAND( ), mean_constant, stdev_constant). И, конечно же, два члена dW в приведенном выше снимке уравнения связаны корреляционным методом, описанным в этой статье.

На заметку

Есть еще по крайней мере один или два знака квадратного корня, которые мы игнорируем. Но даже если мы не включим больше концепций модели Хестона, наша модель, по-видимому, представляет наблюдаемые формы распределения ежедневной доходности лучше, чем обычное распределение. Мы можем использовать один из наших программных пакетов MCarloRisk или MCarloRisk3D для непосредственного изучения распределения доходности и просмотра ненормальности доходности за определенный период времени:

Фактическое (статическое) распределение ежедневных доходов TSLA за последний период времени. Положительный перекос, жирные хвосты.
Анимация повторных обновлений листа нашего нового метода генерации распределения возвратов (sheet = randcorrWithFeedback). Параметры модели не изменяются между обновлениями. Это относится к постоянному набору параметров модели, но при этом существует очень много вариаций. Именно случайная природа этого генератора распределения приводит к тому, что некоторые результаты искажаются влево, некоторые — вправо… и другие вариации формы. Примечание: Плавная анимация между стабильными распределениями выполняется графическим кодом Excel и не связана с этим методом.

Сводка

Введя корреляцию между основным процессом генератора случайных чисел и генератором объемов объема, мы теперь можем начать контролировать асимметрию (бычий/медвежий настрой) в дополнение к эксцессису (жирности хвоста) нашей искусственно сгенерированной доходности. Наша фальшивая доходность активов сейчас далека от идеализированного нормального распределения доходов, которое иногда предполагается, и она не распределяется постоянно по всем генерируемым ценовым траекториям.

Зачем, спросите вы, идти на все эти хлопоты, чтобы смоделировать перекос и жирность хвоста? Наверняка есть и более простые способы. Это, пожалуй, хороший вопрос для самих Heston & Co. Но мы еще не закончили моделирование, поэтому давайте временно приостановим наше неверие. И помните, что каждый раз, когда мы пересчитываем электронную таблицу, распределение меняется из-за всей случайности, которую в него вносят. Это не статическая модель распределения во времени.

Далее!

Следите за новостями на этом канале Medium, чтобы узнать о следующем улучшении модели, которое еще больше приблизит нас к модели стохастической волатильности Хестона! Термин с каппой (κ) во 2-м из приведенных выше уравнений (который мы зачеркнули ярко-зеленым цветом) кажется созревшим для выбора.

Часть 3. Частично контролируемая устойчивость волатильности

Часть третья. Фото Elena G с сайта Unsplash

Частично? Почему не полностью? Потому что это все-таки стохастическая модель, поэтому… где случайные происшествия могут полностью изменить вашу ситуацию. Как в реальной жизни!

Примечание редактора от 20 мая 2024 г.: Во время работы над 4-й частью этой серии мы поняли, что, возможно, в некоторых местах мы играли со словарным запасом. Иногда мы говорим о «волатильности», когда должны говорить «дисперсия доходности» (= волатильность²). Волатильность = SQRT(дисперсия) в соответствии с обычной терминологией статистики.

На следующем рисунке (воспроизведенном из нашей предыдущей статьи) мы покажем, на чем мы остановили наше обсуждение. Напомним, что мы работаем над 2-м уравнением модели стохвола Хестона, при этом некоторые пункты зачеркнуты:

В этой статье мы будем рассматривать только уравнение Хестона 2. В следующей статье мы вернемся к уравнению 1.

Мы собираемся постепенно добавлять эти зачеркнутые элементы в уравнении Хестона 2 обратно в нашу формулировку переменной волатильности на основе Excel.

Файл Excel для этой статьи находится здесь:

https://github.com/diffent/excel/blob/main/HE2.xlsx

Для численного моделирования (например, в Excel) [Quantstart] [сокращенно QS] предлагает использовать дискретное рекуррентное соотношение для того, что мы называем вторым уравнением Хестона (HE2), и это своего рода «дурачок»:

Рисунок Q (и слова) из [Quantstart]: Обратите внимание, что следующая волатильность при (i+1) является функцией предыдущей волатильности (i индексов)… за исключением надоедливого индекса i+1 на значении ΔW в конце. Хм. Что думать о последнем (i+1)?

Здесь мы записываем ξ, постоянный коэффициент конечного члена, как «xi», его буквенное название, где xi представляет волатильность волатильности, которую мы рассматривали в предыдущих статьях этой серии.

Более простое рекуррентное соотношение, игнорирующее последнее i+1 на ΔW, выглядит следующим образом:

v(i+1) = f(v(i)) [Уравнение 1]

Именно эта рекуррентная интерпретация сделала концепцию «популярной» в нашем сознании, когда мы изучали ее во время подготовки к написанию кода для моделей, вдохновленных Хестоном, в наших приложениях для моделирования ценового диапазона с дрейфом.

Рекуррентное отношение просто означает, что текущая ценность чего-либо функционально связана с непосредственной предшествующей ценностью того же самого чего-либо. В нашем случае это будет волатильность (стандартное отклонение доходности). Текущая волатильность будет связана не только с предыдущим значением самой себя… По ходу дела будет добавлена дополнительная случайность.

Нас немного беспокоит то, что ΔW при i+1 также находится в правой части этого соотношения; но, как мы увидим позже, и как отмечается в описании выше, ΔW по сути является генератором случайных чисел, так что… Так ли сильно i+1 отличается от i, когда мы генерируем случайные числа? Хм. Возможно, нам придется углубиться в статью Quantstart, чтобы прояснить это для наших читателей, если мы сможем. Кажется, что в приведенном выше описании есть некоторая болтовня о том, что ΔW(i+1) может быть заменено стандартным нормальным распределением, но давайте пока пойдем дальше и посмотрим, имеют ли смысл эти интерпретации.

Построение само по себе рекуррентного соотношения во времени

Чтобы показать, что происходит в этом рекуррентном соотношении, прежде чем мы начнем вводить случайность, давайте просто посмотрим на первые два члена правой части знака =, где случайность отсутствует. Δt мы установим равным 1 (здесь его нет):

И давайте пока даже не будем беспокоиться о бизнесе v+ (который является функцией max(v, 0), если вы заглянете в эту статью о Quantstart). Тогда получаем:

v(i+1) = v(i) + каппа*(тета — v(i))

Каппа — это просто константа, поэтому мы можем записать ее как k, а тета (тоже константа) — как T:

v(i+1) = v(i) + k*(T — v(i)) [Уравнение 2]

Довольно просто, не так ли? Машинное обучение, это не так. Или: Это простая форма машинного обучения? Мы позволим вам поразмышлять над этим риторическим различием. Пока ничего не изучается; Мы просто настраиваем формулировку для последующего обучения.

Функция max( ) предназначена только для того, чтобы обрезать или усечь волатильность, чтобы она не опускалась ниже нуля; Это было бы нефизически. У нас не может быть фактического стандартного отклонения, которое меньше нуля в нашей обычной области цены и доходности. Мы добавим эту функцию max обратно перед тем, как начнем моделировать возвраты в реальном времени.

[Уравнение 2] — это просто простая машина или фильтр типа «аттрактора». Он пытается вернуть выходное значение к долгосрочному постоянному значению с течением времени. В данном случае тета является долгосрочной постоянной целью. То, как быстро значение вернется к долгосрочному стабильному/целевому значению, зависит от конкретного значения k, которое мы используем. Мы покажем, что если мы установим k близко к нулю, и если волатильность будет шокирована или упадет далеко от своего долгосрочного среднего значения, она может оставаться там какое-то время… Что мы иногда и наблюдаем в реальной жизни в таких типах активов.

Мы настроили новый лист Excel, чтобы продемонстрировать эту идею (ссылка выше).

Чтобы упростить задачу, мы устанавливаем долгосрочное значение, вокруг которого мы хотим центрироваться (тета или Т), равным 1, и устанавливаем начальное условие v(0) равным 1,5.

Поскольку это рекуррентное соотношение, нам нужно определить, что такое v(0), поскольку v(1) вычисляется из v(0). Если у нас нет v(0), нам не повезло еще до того, как мы начали. После того, как у нас есть v(1), мы можем вычислить все остальные значения v(.) вперед во времени.

Если мы установим эту концепцию в Excel и построим график, мы увидим, что начальное значение «выброса» 1,5 плавно подтягивается к долгосрочной цели, когда k находится в диапазоне 0 < k < 1, поскольку мы не нарушали сигнал никакими другими входами.

Каппа (k) = 0,6. Долгосрочная целевая константа тета = 1.

Чем ближе к 1 мы установим k , тем быстрее эта формулировка будет пытаться отодвинуть сигнал обратно к долгосрочной постоянной.

kappa = 0.9 сходится к долгосрочной константе быстрее, чем в предыдущем примере

Это соотношение моделирует простую систему управления, которая перемещает блуждающий сигнал к его заданному постоянному значению с течением времени. Вот еще один пример графика, построенного на основе того, когда k значений находятся в этом «хорошем» диапазоне (0,1):

kappa = 0.1 (еще более медленная сходимость к 1)

Для другого испытания зададим k больше 1:

Каппа 1,5 приводит к выбросу мишени 1 и затуханию колебаний вокруг 1

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

Помните о поведении этого простого неслучайного соотношения, когда мы начнем добавлять оставшиеся части этого «уравнения Хестона 2» в формулы электронной таблицы.

Зависимость от времени

Эта детерминированная часть HE2 добавляет зависимость от времени в нашу модель волатильности. Вместо того, чтобы волатильность каждого дня не зависела от волатильности всех предыдущих дней (подобно тому, как каждый бросок пары костей не зависит от всех предыдущих бросков), волатильность каждого дня теперь будет в некоторой степени зависеть от волатильности предыдущего дня. Поскольку это происходит рекурсивно, случайные шоки волатильности за один или несколько дней назад все равно будут оказывать влияние на «сегодняшнюю» волатильность, как мы демонстрируем в наших приведенных выше примерах в Excel. То, насколько сильно эти события предыдущего дня влияют на результаты, контролируется k (каппа в реальном HE2).

Возможность нестабильности

Примечание: некоторые значения kappa (C1 в нашем Excel) приведут к тому, что временной ряд будет «взрываться» или увеличиваться без границ с течением времени. Давайте попробуем kappa 2.5:

Рисунок E: каппа = 2,5, нет сходимости, нестабильная система управления

Вместо того, чтобы приближаться к целевому значению, временной ряд все дальше и дальше отклоняется от него. Следовательно, мы с подозрением относимся к тому, что Quantstart достигает каппы более 6. Хм… Смотрите ниже черные скриншоты.

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

Больше сведений о модели и некоторые загадочные проблемы с блоками

Теперь, когда мы продемонстрировали, что первые два термина довольно просты для понимания, мы можем перейти к остальным частям.

Еще один ключ к реализации этого метода находится в описании Quantstart, включающем Δt (временной шаг) [см. выше рисунок Q].

Из нашей интерпретации этого следует, что если предположить, что Δt (временной шаг) равен 1 дню (1 в нашей формуле), то это означает, что мы можем использовать стандартный генератор нормалей непосредственно вместо члена ΔW, так как тогда sqrt(Δt) = 1 в последней строке рисунка Q.

N(0,1) в нашей формулировке Excel — NORMINV(RAND( ), 0, 1). Если Δt равно 1 (день), то коэффициент этой функции N будет равен 1, так как SQRT(1) равен 1 (чтобы не быть очевидным по этому поводу)

Это может потребовать дополнительных размышлений по сравнению с кодом Quantstart, потому что похоже, что они используют общий период времени, измеренный в годах (1 год в их примере), а затем делят на количество временных шагов, чтобы получить дробь меньше 1.0 для Δt:

Примечательные константы в реализации Quantstart. Тета, долгосрочная волатильность, кажется дневной волатильностью, не так ли? Для актива с относительно высокой волатильностью (почти 2% дневного объема).
Более заметные константы. Безрисковая ставка r кажется годовой, не так ли? Около 3%/год. Первоначальная волатильность, похоже, является дневным числом. Безрисковая ставка нам пока не понадобится, так как она предназначена для вычисления цен опционов, как это делает пример с QS, и нам еще предстоит сделать несколько шагов, прежде чем мы сможем это сделать.
Подробная информация о том, как вычисляется путь волатильности в коде QS. Мы добавляем аннотации, чтобы вы не заблудились в C++. Поскольку dt — это просто константа в цикле генерации пути, кажется, что dt и sqrt(dt) просто масштабируют то, какими должны быть kappa и xi, чтобы получить тот же ответ, что и мы. Таким образом, это кажется эквивалентным по концепции нашей версии Excel. Верификация подлежит уточнению.

Конечно, они также используют огромное значение каппы > 6, что в нашей формулировке привело бы к неустойчивому «раздуванию» значений функции (см. рис. E выше). Это всего лишь предположение, но большая каппа может быть причиной расхождений в единицах измерения, которые, как мы думаем, мы видим в коде QS и в нашем коде: Подлежит определению. Например, если их Δt (временной шаг) равен << 1 (что так и есть), то это уменьшает эффективный множитель каппы по сравнению с нашей формулировкой с Δt = 1:

Поскольку мы предполагаем, что Δt = 1, а код QS устанавливает Δt << 1, это может объяснить их каппу >> 1

Ссылка на Matlab предлагает значения каппы, близкие к 0 (0,003 в этом примере), что подразумевает очень липкую волатильность:

https://www.mathworks.com/help/fininst/finmodel.heston.html#d126e439657

Но другие источники, которые мы видели в Интернете, также предполагают значения каппа > 1. Так что мы позаботимся о том, чтобы взять эту часть модели, как говорится, «под совет».

Тем не менее, в этом Excel мы всегда измеряем время в днях и используем ежедневную доходность… так… Давайте пока оставим этот вопрос Δt открытым, так как мы пытаемся получить грубую модель, которая имитирует то, как некоторый универсальный актив может работать с течением времени. Мы пока не настраиваем модель на реальные данные. Когда вы работаете с аналитическими уравнениями, вы можете выполнять определенное количество размахивания руками по единицам измерения [«детали реализации»?], но когда вы пишете код и фактически реализуете его, даже если это простая электронная таблица, вам нужно поддерживать согласованность единиц измерения.

Примечания к другим объектам

Наша долгосрочная тета в этом примере 1 подразумевает 1%. В нашем приложении MCarloRisk3D [ref] мы отображаем этот 1% как 0,01. Здесь мы просто использовали 1 к 1%, чтобы сделать формулы Excel более простыми для понимания в начале. Аналогично для волатильности волатильности и других единиц в этом вступительном примере.

Машет рукой какой-то. Фото Азиза Ачарки с сайта Unsplash

Но мы видим еще одно отклонение от того, что мы описали в наших предыдущих статьях этой серии: вместо того, чтобы контролировать стандартное отклонение непосредственно в нашей формулировке NORMINV(RAND( ), mean, stdev), QS предлагает использовать распределение stdnorm, внешне масштабируемое по коэффициенту xi:

xi*NORMINV(RAND( ), 0, 1) [это]

NORMINV(RAND( ), 0, xi) [по сравнению с предыдущими статьями]

Это не означает, что использование xi в качестве стандартного отклонения обязательно является плохой идеей. Это просто не то, что делает модель Хестона. Это альтернативная модель.

Наряду с этим изменением, мы также включим (наконец-то, если вы читали наши предыдущие статьи об этом) квадратный корень из априорной волатильности v(i) вместе с этим постоянным коэффициентом xi в качестве множителя стандартного нормального генератора «жужжания». Эта предыдущая волатильность будет усечена до >= 0 в случае, если она уйдет в отрицательную зону. Таким образом, окончательный член приведенного выше отношения рекуррентности становится в псевдокоде Excel, еще не ссылающимся на ячейки листа:

xi * SQRT(MAX(v(i), 0)) * NORMINV(RAND( ), 0, 1)

Формула

Итак, теперь у нас достаточно данных, чтобы попробовать настроить весь HE2 (его версию рекуррентного отношения QS) в столбце B нашего листа.

Для B1 (начальное условие) мы просто установим его в тета (долгосрочная константа, вокруг которой будет «жужжать» уровень волатильности). Тета = 1 в нашем примере. Таким образом, B1 — это просто ссылка на D1 (нашу постоянную тету). Это начальное условие может потребовать более тщательного обдумывания по мере того, как мы настраиваем модель на реальные данные. Но опять же, это может не иметь большого значения, поскольку, как мы покажем, волатильность быстро блуждает из-за генератора случайных чисел.

Остальная часть уравнения достаточно сложна, поэтому мы будем отображать сопоставление непосредственно в Excel:

Мы не проводили для этого линию, но мы используем конечную функцию NORMINV вместо конечной ΔW. Внимательные читатели помнят, что в наших прошлых статьях мы сосредотачивали гул vol-of-vol вокруг среднего значения 1, а не 0. Но первая часть этого уравнения (тэта) делает это центрированием для нас. Это изменение должно стать более очевидным, когда мы интегрируем эту формулировку с формулировкой возврата в наших предыдущих статьях.

Результаты всего этого будут в столбце Б.

Теперь мы можем построить несколько графиков этого столбца B, этого рекуррентного соотношения, которое вычисляет волатильность, при одинаковых и разных значениях каппа (коэффициент липкости) и xi (волатильность волатильности). Тета — это всего лишь долгосрочная константа, поэтому на данный момент достаточно оставить ее равной 1.0.

Рисунок V: Нижний правый график — это окончательный путь волатильности из столбца B. Ось Vert интерпретируется как проценты, например, 1 = 1% дневной волатильности. Это для каппы, вероятно, нереально близко близко к 0, и поэтому мы видим периоды высокой волатильности и периоды низкой, почти нулевой волатильности. Может быть, какая-то волатильность ниже нуля (кашель). «Детали реализации».
Теперь при kappa = 0.1 мы видим еще некоторое колебание уровня волатильности (нижний правый график). Но вы можете видеть, что иногда объем относительно высок, иногда относительно низкий.
При kappa = 0,5 волатильность, как правило, остается около целевого долгосрочного среднего значения 1, но колеблется вверх и вниз.
Сохранение каппа на уровне 0,5 и уменьшение xi (объема объема) до 0,1 приводит к еще меньшему движению по сравнению с долгосрочным средним значением, равным 1. Вы можете поэкспериментировать с различными значениями kappa и xi на этом листе, чтобы получить интуитивное представление о том, что происходит в этой части модели.

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

kappa = 0.05 и xi = 0.2, refresh 1
kappa = 0.05 и xi = 0.2, refresh 2 … Различная траектория волатильности, внизу справа

Заметьте, что иногда наша волатильность опускается ниже нуля, в основном когда волатильность волатильности (xi) велика по отношению к долгосрочной цели волатильности (тета), и мы устанавливаем каппу близкой к нулю. [См. рисунок V выше]. Нехорошо. Мы исправим это, когда интегрируем эту часть в основную модель доходности, которую мы начали разрабатывать в наших предыдущих статьях.

Обсуждение

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

И снова делаем паузу…

После этого мы позволим вам поэкспериментировать с этим листом до тех пор, пока у нас не появится возможность поработать над нашей следующей статьей, которая свяжет это уравнение Хестона 2 обратно с основным уравнением генератора возврата (HE1) и, надеюсь, разрешит некоторые из этих несоответствий в формулировках, которые мы замечаем по сравнению с Quantstart, потому что:

Что касается того, каким должно быть Δt… У нас есть вопросы. Это может стать более ясным, когда мы интегрируем формулу HE2 в нашу предыдущую работу.

Тем не менее, вы можете видеть из приведенных выше графиков Excel, что наши графики уровня волатильности, по-видимому, ведут себя разумным образом, когда мы корректируем параметры модели (в основном каппа и кси в этих примерах, поскольку тета просто контролирует долгосрочную константу, к которой стремится волатильность — долгосрочное среднее — но никогда этого не делает). Вы также можете изменить тета, экспериментируя с этим листом.

Часть 4. Собираем кусочки воедино

Если вы читали наши предыдущие статьи на эту тему, вы можете понять, что теперь у нас есть большинство элементов, необходимых для создания «финального босса» стохастического генератора ценовых путей, управляемого волатильностью типа Хестона. Нам до сих пор не хватает термина «дрифт», но… в свое время. Похоже, что это можно прикрепить в конце.

Файл Excel для этой статьи можно найти здесь:

https://github.com/diffent/excel/blob/main/volofvol4D.xlsx

Манипуляция с Excel, чтобы объединить все это вместе, не сложна, но она немного сложна, поскольку мы составляем формулы из более чем одного листа.

Когда-нибудь (может быть?) Copilot или Devin или любая другая схема искусственного интеллекта, которая рекламируется в наши дни как программа, которая может делать «все», может облегчить эту задачу, по словам поставщиков этого типа технологий.

Доставит ли нас сюда A.I. Copilot? Думаю, что нет. Фото Райана Миллера с сайта Unsplash

«Привет, ChatGPT, можешь ли ты переупорядочить этот файл Excel, чтобы он был весь на одном листе и был прост для понимания? да, и не перепутайте формулы».

Тем не менее, мы не думаем, что вы должны задерживать дыхание до тех пор, пока это не произойдет.

На данный момент мы должны скорректировать эти уравнения вручную.

Процедуры

Сначала скопируем лист из части 3 этого цикла статей в файл Excel из части 2.

Этот новый лист мы называем HE2, так как он имеет дело с уравнением Хестона 2… , который показывает, как вычисляется путь волатильности* с некоторой зависимостью от времени.

*На самом деле, похоже, что это путь дисперсии; Волатильность — это квадратный корень из дисперсии (см. ниже).

Вкладки листа Excel в новом файле примера. Лист для заметок HE2 справа.

Мы расширяем заполненное формулой количество строк на листе HE2 в соответствии с нужным нам числом строк: всего 1000 (в части 1 этого цикла статей оно определено довольно произвольно как 1000 торговых дней).

Затем мы удаляем лист из файла Excel Part 2 (называемого randcorr), который был предназначен только для первоначального построения и мотивации… чтобы избежать путаницы. Обратите внимание, что простой randcorr не отображается на приведенном выше снимке вкладок листа… Мы его уже удалили.

Установка коррелированных генераторов случайных чисел на стандартную нормаль

Для двух коррелированных функций генератора случайных чисел в таблице randcorrWithFeedback, которые мы настроили в предыдущей статье (столбцы D и E), теперь мы установили их генерацию в среднем значении 0, stdev 1 (стандартная норма). Они будут служить в качестве членов dW в модели Хестона. Мы настроим ширину случайного гудка, генерируемого ими, масштабируя случайный результат, а не стандартное отслеживание, в соответствии с аналитической формулировкой. Мы намекали на это в Части 3.

Верхняя часть листа randcorrWithFeedback. Среднее значение 0 и stdev 1 для обоих генераторов. Мы выделяем их серым цветом, чтобы показать, что вы больше не должны с ними связываться, хотя мы не блокировали ячейки. Целевой коррел справа будет переменной, которую вы можете настроить. Не волнуйтесь, у этой модели другие параметры тюнинга.

Тогда вместо того, чтобы использовать неограниченную функцию NORMINV в листе HE2 (которую мы использовали для разработки концепции зависящей от времени / липкой волатильности, как описано в части 3 этой серии), мы вместо этого будем использовать частично коррелированные стандартные нормально сгенерированные числа VolOfVol в столбце E листа randcorrWithFeedback, которые мы закодировали в части 2 этой серии. Этот VolOfVol является стандартным нормальным случайным значением, если рассматривать или принимать его отдельно, но также частично коррелирует с основным генератором случайных возвратов в столбце D этого листа (также среднее значение 0, stdev 1 и в конечном итоге будет масштабировано извне), в соответствии с формулировкой Хестона, которая связывает его Eqn 1 и Eqn 2 (как мы их обозначаем), как описано в части 2 этой серии.

Наша пользовательская формулировка в столбце E для получения коррелированных случайных значений (из части 2 этого цикла статей).

Наконец, при вычислении ежедневной доходности активов в столбце D randcorrWithFeedback, вместо того, чтобы масштабировать стандартное отклонение, как мы делали в предыдущих статьях, мы просто умножаем все это на квадратный корень из зависящей от времени дисперсии доходности (волатильности в квадрате), который мы вычислили в столбце B листа HE2, стараясь усечь последний на 0 (с помощью функции MAX), чтобы мы не пытались извлечь квадратный корень из отрицательное число.

После модификации для этой статьи, в формулах столбца D мы видим SQRT(.), умноженный на все остальное, что у нас было, и мы удалили дополнительное масштабирование волатильности, которое было в конце

Мы еще не смоделировали «дрейфовый» член возврата из формулировки Хестона (который также существует в старых моделях типа Блэка-Шоулза). Это все еще «нужно сделать». Это означает, что дрейф бычий или медвежий на данный момент равен 0. Это не означает, что мы не увидим бычьих или медвежьих ценовых траекторий; Просто эти результаты будут строго из диффузионной части модели. Как мы указывали в предыдущих статьях, «случайный» не обязательно означает «нешаблонный», он просто означает, что паттерны не имеют никакой предсказательной силы.

Теперь мы можем сгенерировать несколько отдельных ценовых путей в Листе 1 — никаких изменений на этом листе из предыдущих статей — из этой модели и качественно рассмотреть их характер… Похожи ли они на траектории цен на фондовом рынке или на пути криптовалют? Опять же, поскольку это стохастическая модель, основанная на случайности, мы получаем разные пути при каждом обновлении Excel.

Пример искусственно сгенерированной траектории цены с доходностью, выделенной красным цветом под ней. Обратите внимание на периоды высокой волатильности и низкой волатильности. Волатильность теперь не является полностью случайной, как мы моделировали в предыдущих таблицах; он может застрять на высоком, низком или любом среднем уровне волатильности из-за фактора зависимости от времени, который мы добавили в части 3 этого цикла статей (из модели Хестона!)
Вот еще одно обновление листа с теми же настройками параметров модели. Совершенно другая траектория цены, такая же неоднородная волатильность.

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

Сводка параметров управления моделью

Так как мы еще не добавили член среднего дрейфа, у нас есть только 4 управляющих параметра; Но с их помощью мы можем вызвать множество изменений в том, как ведут себя ценовые пути:

На листе randcorrWithFeedback у нас есть целевой коррел с допустимыми значениями [от -1 до 1]

На листе HE2 мы имеем:

Каппа Κ

Насколько липка наша волатильность… близко и выше 0 = липкий, 1 = не липкий вообще. Сумасшедшие вещи могут случиться с вашими ценовыми путями, если вы установите каппу > 1, но это, похоже, своего рода безобидная зона. Смотрите наши предыдущие статьи, в которых обсуждалась чрезмерная коррекция до целевой волатильности, когда каппа находится на > 1; Это может быть используемая зона моделирования для этого параметра. Сумасшедшие вещи произойдут с вашими ценовыми путями, если вы установите kappa < 0. Наверное, не стоит этого делать.

тета θ

Тета — это просто долгосрочная дневная волатильность рассматриваемого актива, вокруг которой блуждает вся эта переменная волатильность. В качестве отправной точки для этого значения вы можете просто использовать некоторую историческую волатильность для актива; Но позаботьтесь о том, чтобы использовать ежедневную (а не годовую) версию.

xi ξ

Волатильность волатильности. Согласно обсуждениям в нашей предыдущей статье.

Нейтральные настройки

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

На листе randcorrWithFeedback задайте для целевого корреля значение 0.

На листе HE2 установите kappa = 1, theta = 1, xi = 0.

Модель возвращается к броуновским уровням привязки движения, одно обновление Excel.

Посмотрите, можете ли вы визуально отличить эти простые броуновские траектории (нейтральные настройки, стохвол ВЫКЛ по сути) и вышеупомянутые стохвольные траектории.

Сопоставление ячеек с формулами

Высокоуровневая карта может помочь вам, если что-то потерялось при переводе части 3 к этой статье.

Оригинальные формулы из [Quantstart] с нашими аннотациями

И, глядя на эту диаграмму, мы, возможно, увидим, что происходит с квадратными корнями из v(t). Eqn 2 [наша дискретизированная версия из Quantstart] вычисляет дисперсию = (stdev²) (2-й момент), а sqrt(дисперсия) — это стандартное отклонение или волатильность. Ну-ну. Надо было заметить это раньше.

Википедия (снимок ниже) добавляет сюда промежуточный шаг, который не показал Quantstart: волатильность — это sqrt(v(t)), но рекуррентное соотношение, которое мы используем для ее нахождения, вычисляет дисперсию (еще одно слово v, конечно; гарантия занятости для статистиков). Что касается леммы Ито и других приветов знаменитым математикам, что ж… Вы пока сами по себе.

Вероятно, нам следует проверить, не используем ли мы по ошибке «волатильность», когда мы должны говорить «дисперсия» в этой серии статей. Смотрите также: 2-е издание.

Материал из Википедии

Поскольку иногда при манипулировании и копировании/вставке формул Excel иногда возможна путаница, если кто-то из читателей заметит проблему с нашими формулами, пожалуйста, сообщите нам об этом!

Далее: Монте-Карло

Несмотря на то, что мы собрали различные части модели генератора случайных путей для этой концепции стохастической волатильности, и результаты кажутся разумными, по крайней мере, качественно —

То есть, мы получаем периоды волатильности высокой и волатильности низкой… А ценовые дорожки вроде бы ходят разумно и не сходят с ума

— Мы еще не закончили, потому что индивидуальная случайная траектория цены мало о чем говорит. Стохастические модели, подобные этой, не претендуют на то, чтобы точно сказать нам, какой будет траектория цены в будущем. Скорее, они пытаются оценить вероятностное распределение будущих цен. Для этого нам нужно будет собрать множество этих случайно сгенерированных путей и посмотреть, что получится.

Мы делаем это в наших приложениях MCarloRisk3D, используя возвратные распределения, которые обычно не распределяются (например, они просто выбираются из исторической реальности), и у нас есть некоторые аспекты модели Хестона, доступные для экспериментов в этих приложениях. Мы называем стохастическую модель волатильности в наших приложениях вдохновленной Хестоном, поскольку она отходит от чистых стандартных нормальных генерирующих процессов и частично использует эмпирические данные о доходности. Приложения используют эмпирические данные о доходности для возвращаемой части генератора путей, а затем строят идеальное (коррелированное с эмпирическими данными настраиваемым пользователем фактором — греческое rho в модели Хестона, целевой коррел в нашей таблице) стандартное нормальное распределение для генерации пути волатильности.

Некоторое время назад мы провели более формальное тематическое исследование, используя эту модель стохвола в нашем приложении для оценки ценового диапазона биткоина, если кому-то интересно:

https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3693387

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

К сожалению, похоже, что не существует способа инициализации генератора случайных чисел в Excel, поэтому немного сложно сохранить одни и те же случайные столбцы, а затем варьировать один или параметры модели, чтобы увидеть, как изменяется путь с постоянной случайностью. Это можно сделать, выделив, скопировав и повторно вставив «special» / «as value» один набор случайных значений в столбцы A и B листа randcorrWithFeedback. Мы, вероятно, могли бы найти функцию генератора с возможностью запуска и/или подключить что-то, чтобы она была более автоматической, но… позже.

Целевой коррел = 0,3 с фиксированными случайными значениями.
Целевой коррел = 0,1 с фиксированными случайными значениями. Обратите внимание на схожую форму ценовой кривой, так как использовались одни и те же базовые случайные значения.

Ссылка

Мы сделали снимок уравнений модели Хестона и почерпнули другие идеи из этой прекрасной экспозиции. Этот автор делает все это одним махом, но его описания хороши, если вы хотите больше информации:

[Quantstart] Стохастическая модель волатильности Хестона с дискретизацией Эйлера в C++, https:// www.quantstart.com/articles/Heston-Stochastic-Volatility-Model-with-Euler-Discretisation-in-C/

Источник