evgen000
evgen000 личный блог
28 апреля 2017, 15:32

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 для предсказания направления движения рынка.

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



7 Комментариев
  • Alexander Kokarev
    28 апреля 2017, 18:31
    подскажите, где можно на рус языке прочитать как это работает?
  • Пафос Респектыч
    28 апреля 2017, 19:38
    Честно говоря, не особо впечатляет — когда на рынке самая движуха и сильные тренды, система зарабатывает крайне вяло. А именно в эти моменты хорошие депозиты приумножать можно! Лучше рынка надо быть всегда )
  • Sergey Pavlov
    29 апреля 2017, 10:17
    Всё вроде хорошо, но как это выглядит с 2008 года и какова средняя сделка?
  • Mrak
    02 мая 2017, 10:26
    evgen000, Здравствуйте, Уважаемый. 
    Подскажите, пожалуйста, способ, как построить улыбку волатильности на опционах FORTS, необходимо ли брать только центральные страйки?

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн