Добрый день. Сегодня про то как использовать этот метод для предсказания направления движения рынка на день, на основе той информации что у нас есть перед открытием торгов.
Описание самого пакета и примеры можно посмотреть тут
http://cran.r-project.org/web/packages/gbm/gbm.pdf
Я покажу каких результатов добился тестируя этот метод совершая всего 2 сделки в день, на открытии и закрытии дня.
График доходности Out-of-Sample в сравнении с индексом ММВБ:
Впечатляет правда? Особенно был хорош 2016 год, доходность без просадок, и это при риске удержания позиции всю торговую сессию. Конечно я не стану раскрывать подробности, однажды достаточно раскрыл, пришлось удалить статью, поэтому покажу просто пример, предикторы вы можете подобрать сами.
Я покажу на примере системы которая использует технические индикаторы RSI, Volatility, ADX, CRTDR ( Close - Low / High — Low )
Для начала сформируем данные
tmp <- cbind( lag(RSI(Cl(MICEX))), lag(volatility(MICEX)), lag(ADX(MICEX)$ADX), lag((Cl(MICEX) - Lo(MICEX)) / (Hi(MICEX) - Lo(MICEX))), dailyReturn(MICEX))
Обучать модель будем на данных с 2012 го 2015 год, а тестировать на 2016/2017 годах.
gfit <- gbm(MICEX ~ RSI + ADX + Volatility + CRTDR, data = tmp["2012/2015"] ,n.trees = 10000, cv.folds = 5)
Теперь у нас есть обученная модель, посмотрим важность признаков в модели
найдем оптимальное количество итераций при которой при кросс валидации ошибка достигает минимального значения.
best.iter <- gbm.perf(gfit,method="cv")
В данном случае 1 итерация это минимум при которой ошибка будет минимальна, это говорит прежде всего о том, что данные которые мы скормили алгоритму совершенно не имеют предсказательной способности, а значит он будет выдавать константные значения. Но в качестве примера это не важно.
И посмотрим как изменились важности признаков для модели при таком количестве итераций
summary(gfit,n.trees=best.iter)
И напоследок обученную модель используем для данных Out-Of-Sample
f.predict <- predict(gfit,tmp["2016::"],best.iter)<br>gbforecast <- xts(f.predict, order.by = as.Date(index(tmp["2016::"])))<br>chart.CumReturns( ifelse( gbforecast >0, 1,-1 ) * dailyReturn(MICEX), main = "Gbm system" )
Так как наша система в качестве прогноза всегда выдает константу, то она в точности повторяет индекс ММВБ и не дает какой-либо предсказательной силы
Подскажите, пожалуйста, способ, как построить улыбку волатильности на опционах FORTS, необходимо ли брать только центральные страйки?