Блог им. AlexeyPetrushin

Что лучше для прогноза, последняя волатильность, или за всю историю?

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

Какая разница? Без разницы, цифры подобия (Likelihood) получатся одинаковы, если проверить по историч данным. Но хотя разница есть, последняя волатильность ошибается редко но метко, а историческая на чуть но постоянно. В среднем получается одно и тоже. И даже если их использовать обе сразу, цифра тоже получится той же. :)

Результаты подобия прогноза с реально наблюдаемыми прибылями, для акции АМД, попробуй найди отличия… (недавняя волатильность чуть лучше, но именно что на чутъ...)

Recent:
  E[log likelihood]: -1.0211
Hist:
  E[log likelihood]: -0.9591
Mixture (0.5 recent + 0.5 hist):
  E[log likelihood]: -0.9660


«в среднем» получается одинаково что последняя волатильность что историческая. Неожиданно, я ожидал что «недавняя» будет заметно лучше «исторической» :)




Данные, столбики в таблице — историч волатильн, реальная прибыль, безрисковый рейт, последн волатильн

hist    lr_actual   lrf_return  recent
0.594   -0.017  0.02    0.556
0.594   0.477   0.011   0.693
0.594   0.933   0.012   0.771
0.594   1.337   0.005   0.844
0.594   1.414   0.004   0.865
...
полные данные 

и код

import pandas as pd
import numpy as np
from scipy.stats import norm

def mean_log_pseudo_prob_and_loglh(df, mean_col, sigma_col, actual_col):
  lh = norm.pdf(df[actual_col], loc=df[mean_col], scale=df[sigma_col])
  log_lh = np.log(lh)
  pseudo_prob = lh / lh.sum()
  log_pseudo_prob = np.log(pseudo_prob)
  return log_pseudo_prob.mean(), log_lh.mean()

def mean_log_pseudo_prob_and_loglh_mixture(df, mean_col, sigma_col1, sigma_col2, actual_col):
  # PDF of each component
  lh1 = norm.pdf(df[actual_col], loc=df[mean_col], scale=df[sigma_col1])
  lh2 = norm.pdf(df[actual_col], loc=df[mean_col], scale=df[sigma_col2])

  # Mixture likelihood: 0.5 * lh1 + 0.5 * lh2
  lh_mix = 0.5 * lh1 + 0.5 * lh2
  log_lh_mix = np.log(lh_mix)

  pseudo_prob = lh_mix / lh_mix.sum()
  log_pseudo_prob = np.log(pseudo_prob)

  return log_pseudo_prob.mean(), log_lh_mix.mean()

# Read the data
df = pd.read_csv('tmp/data.tsv', sep='\t')

# Individual models
a_lpp, a_llh = mean_log_pseudo_prob_and_loglh(df, 'lrf_return', 'recent', 'lr_actual')
b_lpp, b_llh = mean_log_pseudo_prob_and_loglh(df, 'lrf_return', 'hist', 'lr_actual')

# Mixture model
m_lpp, m_llh = mean_log_pseudo_prob_and_loglh_mixture(df, 'lrf_return', 'recent', 'hist', 'lr_actual')

# Output
print('Recent:')
print(f'  E[log pseudo-prob]: {a_lpp:.4f}')
print(f'  E[log likelihood]: {a_llh:.4f}')

print('Hist:')
print(f'  E[log pseudo-prob]: {b_lpp:.4f}')
print(f'  E[log likelihood]: {b_llh:.4f}')

print('Mixture (0.5 recent + 0.5 hist):')
print(f'  E[log pseudo-prob]: {m_lpp:.4f}')
print(f'  E[log likelihood]: {m_llh:.4f}')



6 комментариев
А какой вывод?
Михаил Шардин, просто интересное наблюдение… мне было неожиданно увидеть что нет разницы… я когда заметил думал ошибка в расчетах…
avatar
На более коротких интервалах разница есть
avatar
Если в среднем получается одно и то же, то надо делать арбитраж между ними и получится почти безрисковая прибыль?
avatar
Sergey Pavlov, скорей получается что оба показателя лишь очень грубо и отдаленно предсказывают будущую цену.
avatar
Всё равно что МА(1) и МА(all), кто то скажет с периодом 200 лучше))
В общем, везде где есть период, это линейность и игнорирование остальных периодов. Поэтому «волатильность» у всех своя. Кто то вообще смотрит на полосы боллинджера, кто то на HL предыдущих дней, некоторые вообще через RSI вычисляют. Знал одного опционщика у него «волатильность» 90% времени была у нуля и 1-2 раза в год показывала всплеск. Причем всплески не совпадали с другими.
Имхо. «Волатильности» не помогут предсказать будущего. Это всего лишь производная от цены. Но она обладает заметными свойствами, о которых можно подумать.
avatar

теги блога Alex Craft

....все тэги



UPDONW
Новый дизайн