Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 265
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Пробовал, но быстро сломался: не понятно что делать с дырками в выходные.
Дырок в выходные снимают на дискотеках :)
Саныч когда ты уже научишься нормально цитировать? чтобы написать три слова не надо цитировать пол страницы форума...
Теперь далее по теме
Наделал я различных свечных комбинаций и прочего с помощью пакета candlesticks , при попытке обучать МО оказалось что он тренируется на все 100% те ошибка 0 как на тренировочных так и на новых данных, очевидно что в данных присутствуют какие то предикторы которые заглядывают в будущее, чтобы не разбираться в каждой функции я просто удалил первые 6 предикторов которые по версии фореста были самыми значимыми и сильно выделялись на фоне других, я надеялся на то что именно среди них будут те что заглядывают в будущее и снова обучил МО , ошибка составила около 3%, кароч я не знаю что за фигня, почему такие сказочные результаты, может ошибка в моем коде...
Кароч кому интересно поразбираться вот код как я делал выборку, целевая у меня была "цвет свечи"
В коде только сама выборка, целевую и прочие манипуляции делайте какие хотите
Пробуйте, експериментируйте ведь это как ни как доп 30 признаков к вашей модели
# загружаю последние 500 дней котировок индекса ртс
getSymbols("SPFB.RTS",src = "Finam",period="5min",from = Sys.Date()-500)
chart_Series( tail(SPFB.RTS,100) )
D <- SPFB.RTS
# cчитаем функции по свечным формациям и прочим добром
library(candlesticks)
X29<- TrendDetectionSMA(D)
X28<- TrendDetectionChannel(D)
X27<- nextCandlePosition(D)
X26<- CSPThreeOutside(D)
X25<- CSPThreeMethods(D)
X24<- CSPThreeInside(D)
X23<- CSPTasukiGap(D)
X22<- CSPStomach(D)
X21<- CSPStar(D)
X20<- CSPShortCandleBody(D)
X19<- CSPShortCandle(D)
X18<- CSPPiercingPattern(D)
X17<- CSPOutsideDay(D)
X16<- CSPNLowerClose(D,N = 3)
X15<- CSPNHigherClose(D,N = 3)
X14<- CSPMarubozu(D)
X13<- CSPLongCandleBody(D)
X12<- CSPLongCandle(D)
X11<- CSPKicking(D)
X10<- CSPInvertedHammer(D)
X9 <- CSPInsideDay(D)
X8 <- CSPHarami(D)
X7 <- CSPHammer(D)
X6 <- CSPGap(D)
X5 <- CSPEngulfing(D)
X4 <- CSPDoji(D)
X3 <- CSPDarkCloudCover(D)
X2 <- CandleLength(D)
X1 <- CandleBodyLength(D)
dat <- cbind.data.frame(D, X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,
X11,X12,X13,X14,X15,X16,X17,X18,X19,
X20,X21,X22,X13,X24,X25,X26,X27,X28,X29)
# true,false заменяю на 1 и -1 а NA-шки на 0
dat[dat==TRUE] <- 1
dat[dat==0] <- -1
dat[is.na(dat)] <- 0
# пишем все в файл с которым удобно работать в будущем
save(dat,file = "D:/R/candles_lib/candle_dat.RData") # ваш путь
Саныч когда ты уже научишься нормально цитировать?
Предикторы не заглядывают в будущее - они повторяю целевую.
Где форвард тест? Че обсуждать обучение?
ПС
Все по просьбе
Предикторы не заглядывают в будущее - они повторяю целевую.
Где форвард тест? Че обсуждать обучение?
Просто попробуй у себя обучить и напиши что получилось, а там уже будет что по обсуждать, надеюсь..
Я понял причину.
Сейчас пришла новая цена, по ней посчитали все предикторы, а потом по этим предикторам посчитали эту же цену - вообще ничего не предсказываем. Ошибка подгонки равна нулю. Ничего удивительного не вижу.
Если интересно предсказание, то D сдвинь на один шаг влево. Эта модель предсказывает на один шаг вперед. можно на несколько
Я понял причину.
Сейчас пришла новая цена, по ней посчитали все предикторы, а потом по этим предикторам посчитали эту же цену - вообще ничего не предсказываем. Ошибка подгонки равна нулю. Ничего удивительного не вижу.
Если интересно предсказание, то D сдвинь на один шаг влево. Эта модель предсказывает на один шаг вперед. можно на несколько
В смысле пришла новая цена ?
код тот что я дал просто делает предикторы из цен которые скачиваються из финама
потом данные сохраняются
save(dat,file = "D:/R/candles_lib/candle_dat.RData") # ваш путь
потом эти данные candle_dat.RData мы уже открываем в новом скрипте, там уже делаем целевую и обучаем МО, нет там никакого пришла новая цена
ей неоткуда приходить. Целевую я естественно сдвигал на шаг, те под прогноз, я же не первый раз обучаю
так что то там другое
Или я тебя не понял?В смысле пришла новая цена ?
код тот что я дал просто делает предикторы из цен которые скачиваються из финама
потом данные сохраняются
save(dat,file = "D:/R/candles_lib/candle_dat.RData") # ваш путь
потом эти данные candle_dat.RData мы уже открываем в новом скрипте, там уже делаем целевую и обучаем МО, нет там никакого пришла новая цена
ей неоткуда приходить. Целевую я естественно сдвигал на шаг, те под прогноз, я же не первый раз обучаю
так что то то там другое
Или я тебя не понял?А какая целевая?
клоуз выше ниже предыдущего клоуз
Y <- diff(dat$SPFB.RTS.Close)
Y[Y>=0] <- 1
Y[Y<0] <- 0
dat <- dat[-nrow(dat),]
Y <- as.factor(Y)
tr <- 1:10000
ts <- 10001:15000
library(randomForest)
cm <- colnames(dat)
colnames(dat) <- paste0("var_" , 1:ncol(dat))
model <- randomForest(Y[tr]~., dat[tr,] , ntree=100, mtry=10)
layout(1:2)
plot(model)
varImpPlot(model,type = 2)
pr <- predict(model,dat[ts,])
library(caret)
confusionMatrix(Y[ts] , pr)
клоуз выше ниже предыдущего клоуз
Не могу понять где сдвиг целевой? При дифференцировании? Но первой строе предикторов, которая получена вычитанием из 2, ставим в соответствие 1-е значение целевой, т.е. ЗНАЕМ следующие значения для целевой с индексом 2.
при дифференцировании сдвиг идет как бы автоматически так как ряд становиться короче на один элемент, потом все что нужно это укоротить выборку(табл. с наблюдениями) на последний элемент
вот пример
Y <- diff(SomeData)
cbind.data.frame( Y , SomeData[-length(SomeData)])
получаем
1 10 10
2 10 20
3 -10 30
4 -10 20
5 10 10
6 10 20
7 10 30
8 10 40
9 -10 50
при дифференцировании сдвиг идет как бы автоматически так как ряд становиться короче на один элемент, потом все что нужно это укоротить выборку на последний элемент
Сдвигать влево надо не предикторы, а целевую
Попробую еще раз объяснить.
Строка предикторов с индексом 1 получена = из ВТОРОЙ и первой строки предикторов. Результат записывается на место с индексом 1.
Целевая как имела индекс =1 так и имеет. Но ее значение мы предсказываем на основе сведений предикторов из БУДУЩЕЙ, второй строки
Сдвиньте целевую на 1, т.е. вместо Y[1:n] возьмите Y[2:n] и посчитайте