Alex Craft
Alex Craft личный блог
05 января 2025, 14:07

Распределение вероятностей изменения цен, где Тяжелый Хвост?

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

Распределение парето f(x) = Cx^-a можно увидеть на лог/лог графике как прямую линию. 

Я построил эмпирическое распределение CDF, реальных цен на акцию, но не могу найти на нем «хвост», прямую линию, где она? (просто для сравнения я также построил нормальное распределение откалиброванное на тех же данных).

Распределение вероятностей изменения цен, где Тяжелый Хвост?



На графике показана только часть CDF, положительные измемения, в маштабле лог/лог. Также, изменения цен трансформированы, как: 1) лог траснформа и 2) отцентрированы относительно медианы. Нормальное распределение откалибровано на тех же трансформированных данных, с насильно принятым 0 взятым из медианы в качестве арифметического среднего (т.е. для нормального насильно поставлена медиана вместо арифметич среднего, так график лучше совпадает).

Данные — изменения цен на акцию, посчитаны как изменения за год, для каждого дня, diff_i=price_i/price_{i-360}, для цен одной акции за несколько десятилетий.

Вобщем, где на графике этот хвост? :)

АПДЕЙТ: Я неверно построил лог/лог график, нужно «перевернуть» график (комплементарную CDF построить, новый график снизу), тогда логарифмический масштаб гораздо лучше «растягивает» линию и она лучше видна (точнее то что никакой линии там нет). Видно что Нормальное Распределение недооценивает хвосты, и тяжелый хвост есть, но судя по всему не Парето, а что то послабее. Еще попробую варианты, и потом опубликую новые графики...

Распределение вероятностей изменения цен, где Тяжелый Хвост?



P.S. 

В прошлых постах мне посоветовали посмотреть Обобщенное Гиперболическое Распределение (благодарность А. Г.). Я сомневался его использовать, поскольку там все таки не совсем Парето, но возможно оно реально хорошо подходит, попробую посмотрим...


Код и данные:
import json
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt

# Loading 'diffs.json'
with open('diffs.json', 'r') as file:
  diffs = json.load(file)

# Log-transform the data
log_diffs = np.log(diffs)

# Calculate the center as median, it fits better than the mean
center = np.median(log_diffs)

# Center the log diffs
log_diffs_centered = log_diffs - center

# Function to fit a real CDF
def fit_cdf_(data):
  sorted_data = np.sort(data)
  n = len(data)
  cdf = [(x, (i + 1) / n) for i, x in enumerate(sorted_data)]
  return cdf

# Fitting real CDF
real_cdf = fit_cdf_(log_diffs_centered)

# Fitting normal CDF, forcing mean to be 0
variance = np.mean(log_diffs_centered**2)  # Variance
sigma = np.sqrt(variance)                  # Standard deviation

# Extract CDF x-values
cdf_xs = np.array([x for x, _ in real_cdf])

# Compute the normal CDF for these x-values
normal_cdf = [(x, norm.cdf(x, loc=0, scale=sigma)) for x in cdf_xs]

# Plot real CDF and normal CDF
real_cdf_ys = [p for _, p in real_cdf]
normal_cdf_ys = [p for _, p in normal_cdf]

plt.figure(figsize=(8, 6))
plt.plot(cdf_xs, real_cdf_ys, label='Real CDF', linestyle='-')
plt.plot(cdf_xs, normal_cdf_ys, label='Normal CDF', linestyle='--')
plt.xscale('log')  # Logarithmic x-axis scale
plt.yscale('log')  # Logarithmic x-axis scale
plt.ylim(0.5, 1)   # y-axis domain
plt.xlim(0.001, 2)  # x-axis domain
plt.xlabel('x (log scale)')
plt.ylabel('Cumulative Probability')
plt.title('Real vs Normal CDF')
plt.legend()
x_ticks = [0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 2]
plt.xticks(x_ticks, [str(label) for label in x_ticks])
y_ticks = [0.5, 0.6, 0.7, 0.8, 0.9, 1]
plt.yticks(y_ticks, [str(label) for label in y_ticks])
plt.grid(True)
plt.show()

И данные скачать

 
15 Комментариев
  • amberfoxman
    05 января 2025, 14:26
    1) толстые хвосты появляются когда лаг не 360, а 1, и проблема не в том, что они толстые, а что они внезапно могут становится толстыми. 2) функция распределения не очень визуально ярко воспринимается, лучше плотность распределения. 3) у разных акций есть свой «характер», у некоторых хосты почти всегда толстые, а у некоторых — наоборот обычно тонкие

    UPD. кстати, в фильме предел риска — как раз описана ситуация, когда хвосты вдруг стали толстеть
  • Активный Инвестор
    05 января 2025, 14:37
    Есть гипотеза что изменения цен на акции описываются гибридным распределением — нормальным для головы, и парето для хвоста.
    вы не то распределение ищете… Биржа торгует риски, сентимент комьюнити, вот их распределение интересует и оператора рынка и клиентов, то есть нас. А риски все преуменьшают, потому хвосты и толстеют внезапно… И ни одно распределение никогда не скажет сколько можно ещё добавить риска...

    • amberfoxman
      05 января 2025, 15:24
      Активный Инвестор, на акциях на горизонте месяца 4 сигмы почти всегда нормально, другое дело что с такой оценкой риска доходность так себе получается
      PS смотрю ваши ролики на ютубе, добротные
    • Synthetic
      05 января 2025, 23:19
      Активный Инвестор, 
      Вот эти как раз взяли это ведро черешни...
      yandex.ru/video/preview/8007519925696137596
  • Михаил
    05 января 2025, 14:54
    Говори ли вам не читайте разных проходимцев вроде Талеба, Мальдоброта и т.д.
  • А. Г.
    05 января 2025, 15:15
    В конце 90-х годов прошлого века вышла куча статей квантов о хорошем приближении дневных процентных приращений индексов Доу-Джонса, S&P500, NASDAQ, Nikkei, FTSE и DAX обобщёнными гиперболическими распределениями.

    Самое интересное, что класс обобщенных гиперболических распределений — это класс  распределений нормальных случайных величин со случайными средним и дисперсией и разными классами этих распределений. И в этом классе «лежит» почти все из распределений в справочниках по теорверу: и Хи-квадрат, и Лаплас и многое другое, кроме Парето.
  • Synthetic
    05 января 2025, 15:18
    Это конечно не А.Г. но тоже неплохо:
    rama.cont.perso.math.cnrs.fr/pdf/empirical.pdf

    И еще нужно понимать как работает ЦПТ, желательно с нюансами, коих там много.
  • amberfoxman
    05 января 2025, 15:36
    Для практического применения больше подходит (удобнее) показатель херста, что-то типа такого, тут 3 лага и видно, что чем лаг больше — тем херст ближе к 0.5 и более стабилен

    • А. Г.
      05 января 2025, 17:11
      Alex Craft, а почему Парето? У меня кроме 42 дней с января 1993 для SPY все сошлось с частным случаем обобщённого гиперболического распределения

      smart-lab.ru/blog/699507.php


        • А. Г.
          06 января 2025, 09:23
          Alex Craft, да с распределениями случайных величин r*X+(1-r)*У, где r случайная величина равная нулю или единице и р(r=1)~1, а Х и У — две разные случайные величины  вообще лучше всего критерий Манна-Уитни для понимания, какое распределение Х и какое р(r=1). Ведь Парето на всем множестве приращений цен или логарифмов цен и быть не может. А Колмогоров-Смирнов — самый хороший критерий только для случая выборки из одного и того же непрерывного распределения с плотностью и любыми ее «хвостами». Если функция распределения со скачками, то да, критерий Колмогорова-Смирнова «не очень», но судя по тому, что и у Anderson–Darling интеграл от Fn, то тоже для скачкообразных распределений «не очень».
    • amberfoxman
      05 января 2025, 18:28
      Alex Craft, вот, похоже, шапка уже, а хвост толще

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

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