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

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

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

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



Реалистичную картину дает MSM Markov Switching Multifractal Мандельброта, но он не подходит для MCMC фиттинга.
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
11 Комментариев
  • Александр Сережкин
    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: скорректируйте данные на дивы, если еще не скорректировали
          • anon
            20 февраля 2026, 05:58
            Alex Craft, мы похоже из «разных школ/эпох» ))) все слова понял, всё вместе — уже не въезжаю ))))
      • anon
        22 февраля 2026, 11:44
        Alex Craft, 
        ну выглядит более менее, я б еще убедился, что стох-модель способна иметь отрицательную корреляцию волатильности и ретёрна

        и, что в общем ретёрны окажутся с ассиметрией на большие падение и на мелкий рост

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

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