Alex Craft
Alex Craft личный блог
15 февраля 2026, 11:14

Почему GARCH и большинство Stochastic Volatility моделей не могут предсказывать реалистичную цену

Это симуляция EGARCH подобной SV модели. Первый график волатильность. Можно сравнить его с VIX и увидеть что он даже близко не похож. Можно добавить в него случайные прыжки в волатильность, и он станет чуть лучше, но все равно будут отличия. SVJ и SVVJ также не дают похожей картины.

Почему GARCH и большинство Stochastic Volatility моделей не могут предсказывать реалистичную цену



Реалистичную картину дает MSM Markov Switching Multifractal Мандельброта, но он не подходит для MCMC фиттинга.
7 Комментариев
  • Александр Сережкин
    15 февраля 2026, 12:11
    Так и какой вывод из всего этого? Копать далее?
  • anon
    15 февраля 2026, 14:44
    не понятно, что такое «не похоже» у джамп процесса правдоподобие выше — значит уже таки похоже, вы хотите до куда правдоподобие загонять?

    тут есть разные способы думать (об одном и том же), мне вообще нравится взгляд на фиттинг как minimum description length — это из эпохи Колмогорова, но потом как-то название подзабыли, хотя, по сути, все ровно этим и пользуются на вайбе, не осознавая.

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

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

    так же не вдаваясь в детали — размер архива — это минус логарифм условной вероятности p(data|model) (ну там еще с учётом основания логарифмирования)

    то есть message length (размер архива) = -ln p(data|model)
    model length — размер архиватора (который можно кстати заархивировать другим архиватором) это -ln p(model)
    и таки description = message + model — это, кто бы мог подумать, -ln p(data)

    отсюда становятся более прозрачными смыслы aic/bic и других инфокритериев — потому, что они по сути о том, «как сильно еще один параметр увеличит model, уменьшив message»

    я просто не совсем понимаю, где вы испытываете затык с фиттингом, большинство вещей аналитически решается…

    совсем коротко: чтоб сравнить модели А и Б — к правдоподобию добавьте поправку на минимальный размер вашего кода А и кода Б на питоне или на чем вы пишите (ну можете и по ней архиватором пройтись еще)
      • anon
        16 февраля 2026, 17:26
        И, правдоподобие для SV модели — его же не посчитать просто так. MCMC фиттинг это сглаживание (с заглядыванием в будущее, весь интервал 1-T). А правдоподобие требует фильтрации (без заглядывания в будущее, только 1-t). MCMC что я использую STAN этого неделает. Нужен Particle Filter что вообще отдельная тема.

        я кажется слишком не понимаю, что именно вы делаете, я попробую конечно переварить как вы пришли к тому, что нужно фиттится на всём [1;T], но я вот сколько этим занимался всегда было рекуррентно… ну т.е. там был проход по всему интервалу, да, но без подглядываний ....

        вообще я из этого ничего рабочего не вынес и ушел в «безарбитражные постановки» (это я вот сейчас собрал в кучу и БШ и APT и бонды) там и параметров поменьше и «правильный» хедж возникает более менее естественным путём

        но попробую предложить мысль:

        забудем на некоторое время про гарчи итд и рассмотрим модель с конечной памятью r(n+1) = \mu(r(n)… r(n-k)) + \sigma(r(n)… r(n-k))dW

        r(n+1) = ln(P(n+1)/P(n))

        дальше вариантов не так уж и много — скажем, что sigma^2 это какой-то полином второй степени от r(n)… r(n-k), да еще и не отрицательный

        это сведётся к тому, что он представим как x^T S x + C

        где S положительно определенная _диагональная_ матрица, C — какая-то константа сдвига, а x — вектор _ортогональной_ замены (поворота) переменных от r(n)..r(n-k), вобщем там что-то типа k(k-1)/2 + 1 параметров, если я не напутал (требование положительно-определенности уменьшает количество параметров в 2 раза)

        идея в том, чтобы зафитить такую модель под данные, ей не нужны рекурентные цепочки, для расчёта её правдоподобия, подойдёт набор батчей из {r(n+1);r(n)..r(n-k)}

        правдоподобие «всей кастрюли» будет равно сумме энтропий (логарифмов плотностей) батчей (может всё с минусом, в зависимости от конвенций) + то, что придёт от вашего инфо-критерия, это так или иначе что-то типа количества параметров k, но для начала я бы на инфокритерий забил, это тюнинг второго уровня

        распределение r(n+1) — ну возьмите какое вам нравится, главное чтоб вы могли посчитать энтропию батча, задать ему центр \mu и скейл-фактор \sigma

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

        важно — вам нужна энтропия r(n+1), а не dW, если это не понятно — то нужно это понять

        всё выше написанное это «разминка» для того, чтобы получить полином второй степени \sigma^2(r(n)..r(n-k))

        если в нём коэффициенты при r(n-i) убывают «почти экспоненциально» и кросс продукты r(n-i)r(n-j) «почти отсутствуют» — поздравляю, вы посути можете свернуть это в рекурентное соотношение и получить XXX-GARCH сильно уменьшив кол-во параметров

        и это не безнадёжная идея, вот почему: мы до сих пор ничего не говорили о dW, мы никак не предполагали его нормальность итд, а потому, нам ничто не мешает сказать, что в него вшит и джамп и толстые хвосты и ассиметрия итд, всё, что от него требуется это MdW = 0 и DdW = 1

        я бы стартанул с предположения нормальности для «дебага», если хотите таки стьюдента для dW, то это требует его «отскейлить» до энтропии r(n+1)

        то есть entropy(n+1) = ln(\sigma(r(n)...r(n-k))) + ln(pdf_stud(r(n+1)/\sigma(r(n)...r(n-k))) — это важно понять

        кажется я столько написал, что это уже не переварить


        но, если до сюда поняли, то вообще эту идею можно полностью отвязать от «предвыбора» распределения (однако контролируя MdW=0 DdW=1):

        если сделать скейлинг r(n+1)/\sigma(...), то финальное правдоподобие это sum_i [ln(\sigma(r(n-i)..r(n-i-k))] + sum_i [ln(pdf(r(n-i+1)/\sigma(r(n-i)..r(n-i-k)))]

        это значит, что pdf мы можем взять «какое получилось», и таки это медленнее, но не фатально, за один проход мы считаем \sigma(...) и r(n+1)/\sigma(...), далее чем-то надо аппроксимировать ln(pdf(r(n+1)/\sigma(...))

        или, можно подумать в сторону какой-то параметризации асимметрии, так же как и \mu \sigma — skew_param(r(n)..r(n-k)) и его таки тоже есть шансы свернуть в рекурсию


        ps: представьте, что dW имеет ассиметрию такую, что вниз может прям вот сильно — это создаст резкость в падении актива и последующий рост волатильности, как раз то что нужно. простые диффужн процессы не могут, у них или симметрично «лишняя» волатильность вверх или слишком плавный разгон, но для характерного поведения — нужна асимметрия — её вводят или джамп-процессом или корреляцией как в хестоне

        pps: скорректируйте данные на дивы, если еще не скорректировали

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн