в Волатильность

Предсказывает ли VIX будущую волатильность?

Автор: Александр Кургузкин (mehanizator).

Посмотрим, как связаны реализованная за месяц волатильность, текущий VIX и будущая волатильность. В качестве исходных данных используется таблица для значений индекса S&P 500 и значений VIX на закрытие дня с 1994 года, таблицу можно взять здесь.

Входящие переменные:

currentVol – текущая реализованная волатильность, посчитанная по изменениям рынка за месяц, приведенная на год.

logCurrentVol – ее логарифм, для линеаризации.

priceChange – логарифм изменение цены рынка за этот месяц.

vixRatio – логарифм отношения VIX и реализованной волатильности.

Исходящие переменные:

futureToVol – логарифм отношения будущей волатильности (реализованной за следующий месяц) и текущей реализованной

futureToVix – логарифм отношения будущей реализованной волатильности и текущего VIX

Код на R:

dt <- read.csv(“c:/test/bars/spx-vix.csv”)

rng <- 21

sz <- length(dt[[1]])

result <- data.frame(array(NA, c(sz, 8)))

names(result) <- c(“dailyChange”, “priceChange”, “currentVol”, “logCurrentVol”, “vix”, “vixRatio”, “futureToVol”, “futureToVix”)

for (i in 2:sz) result$dailyChange[i] = log(dt$SPX[i]/dt$SPX[i-1])

for (i in (rng+1):sz) {

result$currentVol[i] = sd(result$dailyChange[(i+1-rng):i]) * sqrt(252)

result$logCurrentVol[i] = log(result$currentVol[i])

result$priceChange[i] = log(dt$SPX[i] / dt$SPX[i – rng])

result$vix[i] = dt$VIX[i] / 100

result$vixRatio[i] = log(result$vix[i]/result$currentVol[i])

result$futureToVol[i-rng] = log(result$currentVol[i]/result$currentVol[i-rng])

result$futureToVix[i-rng] = log(result$currentVol[i]/result$vix[i-rng])

}

vdata <- result[(rng+1):(sz-rng), c(“futureToVix”, “futureToVol”, “logCurrentVol”, “vixRatio”, “priceChange”)]

summary(vdata)

cor(vdata, method=”spearman”)

Результаты расчетов:

> summary(vdata)

futureToVix futureToVol logCurrentVol vixRatio priceChange

Min. :-1.2824 Min. :-1.104888 Min. :-3.0334 Min. :-0.5594 Min. :-0.357110

1st Qu.:-0.4703 1st Qu.:-0.231840 1st Qu.:-2.2683 1st Qu.: 0.1246 1st Qu.:-0.019709

Median :-0.2904 Median :-0.005045 Median :-1.9290 Median : 0.2865 Median : 0.012088

Mean :-0.2813 Mean : 0.001431 Mean :-1.9090 Mean : 0.2827 Mean : 0.005195

3rd Qu.:-0.1154 3rd Qu.: 0.223433 3rd Qu.:-1.6025 3rd Qu.: 0.4344 3rd Qu.: 0.034478

Max. : 1.0757 Max. : 1.319442 Max. :-0.1583 Max. : 1.1460 Max. : 0.210538

> cor(vdata, method=”spearman”)

futureToVix futureToVol logCurrentVol vixRatio priceChange

futureToVix 1.0000000 0.68606157 0.1272408 -0.12294614 -0.15394326

futureToVol 0.6860616 1.00000000 -0.3873646 0.58337707 -0.04706657

logCurrentVol 0.1272408 -0.38736458 1.0000000 -0.69184314 -0.25168225

vixRatio -0.1229461 0.58337707 -0.6918431 1.00000000 0.09469403

priceChange -0.1539433 -0.04706657 -0.2516823 0.09469403 1.00000000

Рассматриваем результаты и делаем выводы:

1. Будущая волатильность по отношению к текущей реализованной futureToVol в среднем не меняется, однако VIX в среднем 0.28 от текущей, т.е. VIX в среднем переоценивает будущую волатильность. Ну и закономерно futureToVix в среднем показывает обратное -0.28.

2. Немного в сторону от задачи, но все равно интересно: корреляция изменения цены и текущей волатильности -0.25. Т.е. рост происходит на низкой волатильности, падение на высокой. Что тут причина, а что следствие – неясно.

3. Корреляция futureToVol и vixRatio сильная 0.58, т.е. VIX все таки предсказывает изменение волатильности и для оценки будущей волатильности лучше ориентироваться на VIX, чем на реализованную волатильность. Однако корреляция futureToVix и vixRatio уже отрицательная -0.12, то есть VIX в среднем переоценивает изменение волатильности, реагирует слишком резко.

4. Корреляция -0.15 между priceChange и futureToVix: на росте VIX переоценивает будущую волатильность, на падении недооценивает.

5. Корреляция 0.13 между logCurrentVol и futureToVix: при низкой волатильности VIX переоценивает будущую волатильность, при высокой недооценивает.