Блог им. egenui

Generalized Boosted Regression для предсказания направления движения рынка.

Добрый день. Сегодня про то как использовать этот метод для предсказания направления движения рынка на день, на основе той информации что у нас есть перед открытием торгов. 

Описание самого пакета и примеры можно посмотреть тут http://cran.r-project.org/web/packages/gbm/gbm.pdf

Я покажу каких результатов добился тестируя этот метод совершая всего 2 сделки в день, на открытии и закрытии дня.

График доходности Out-of-Sample в сравнении с индексом ММВБ:
Generalized Boosted Regression для предсказания направления движения рынка.
Generalized Boosted Regression для предсказания направления движения рынка.
Впечатляет правда? Особенно был хорош 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)
Теперь у нас есть обученная модель, посмотрим важность признаков в модели
Generalized Boosted Regression для предсказания направления движения рынка.

найдем оптимальное количество итераций при которой при кросс валидации ошибка достигает минимального значения.

best.iter <- gbm.perf(gfit,method="cv")
Generalized Boosted Regression для предсказания направления движения рынка.
В данном случае 1 итерация это минимум при которой ошибка будет минимальна, это говорит прежде всего о том, что данные которые мы скормили алгоритму совершенно не имеют предсказательной способности, а значит он будет выдавать константные значения. Но в качестве примера это не важно.

И посмотрим как изменились важности признаков для модели при таком количестве итераций

summary(gfit,n.trees=best.iter)

Generalized Boosted Regression для предсказания направления движения рынка.

И напоследок обученную модель используем для данных 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" )


Generalized Boosted Regression для предсказания направления движения рынка.

Так как наша система в качестве прогноза всегда выдает константу, то она в точности повторяет индекс ММВБ и не дает какой-либо предсказательной силы



★23
7 комментариев
подскажите, где можно на рус языке прочитать как это работает?
avatar
vintek13, пройдите курс по машинному обучению на coursera от яндекса, и не такое сможете строить. Он не простой но дает хорошую подготовку в решении практических задач.
avatar
Честно говоря, не особо впечатляет — когда на рынке самая движуха и сильные тренды, система зарабатывает крайне вяло. А именно в эти моменты хорошие депозиты приумножать можно! Лучше рынка надо быть всегда )
Zweroboi, тренды только на истории бывают ) 
avatar
evgen000, всё понятно )
Всё вроде хорошо, но как это выглядит с 2008 года и какова средняя сделка?
avatar
evgen000, Здравствуйте, Уважаемый. 
Подскажите, пожалуйста, способ, как построить улыбку волатильности на опционах FORTS, необходимо ли брать только центральные страйки?
avatar

теги блога evgen000

....все тэги



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