Моделирование логарифмa доходности акций
Цены на акции смоделированы с помощью геометрического броуновского движения (в рамках классической модели Блэка-Шоулза). Предположим, что цены на акции, а также их логарифм доходности имеют нормальное распределение. Здесь данное предположение тестируется на базе цен на акции пяти компаний: Google, Microsoft, Facebook, Apple, и Intel.
Получим цены на акции этих компаний в 2015 году с помощью функции FinancialData. FinancialData.
symbols = {"GOOGL", "MSFT", "FB", "AAPL", "INTC"};
prices = Table[
FinancialData[stock, {{2015, 1, 1}, {2015, 12, 31}}], {stock,
symbols}];
Вычислим логарифм доходности.
logreturn = Minus[Differences[Log[prices[[All, All, 2]]], {0, 1}]];
Отфильтруем логарифм доходности с помощью авторегрессии условной гетероскедастичности первого порядка. Для этого воспользуемся функцией ARCHProcess.
fdata = Table[
{\[Kappa]1, \[Alpha]1} = {\[Kappa], \[Alpha]} /.
FindProcessParameters[lr, ARCHProcess[\[Kappa], {\[Alpha]}]];
MovingMap[Last[#]/Sqrt[\[Kappa]1 + \[Alpha]1 First[#]^2] &, lr, 2]
, {lr, logreturn}];
fdata = Transpose[fdata];
Сравним отфильтрованные данные для акций каждой из пяти компаний с нормальным распределенем с помощью функции QuantilePlot. На графиках видно, что в каждом случае хвосты распределений отклоняются от нормы.
Выполним многовариантный тест на нормальность (BHEP) с помощью функции BaringhausHenzeTest. Результаты теста не подтверждают предположение о нормальности для данных распределений.
htd = BaringhausHenzeTest[fdata, "HypothesisTestData"];
htd["TestDataTable"]
htd["ShortTestConclusion"]
Смоделируем отфильтрованные данные с помощью функций MultinormalDistribution и MultivariateTDistribution.
multiN = EstimatedDistribution[fdata,
MultinormalDistribution[Array[x, 5], Array[s, {5, 5}]]]
multiT = EstimatedDistribution[fdata,
MultivariateTDistribution[Array[x, 5], Array[s, {5, 5}], nu]]
Вычислим и сравним информационный критерий Акаике (AIC) для двух распределений. Данный критерий имеет меньшее значение для модели, полученной с помощью функции MultivariateTDistribution.
aic[k_, dist_, data_] := 2 k - 2 LogLikelihood[dist, data]
aic[5 + 15, multiN, fdata]
aic[5 + 15 + 1, multiT, fdata]