Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 401

 
elibrarius:
Надеюсь не вручную это было составлено? А как нибудь в циклах? Вручную - это не один час заняло бы...


В цикле, да

N_INPUTS <- 10

outputfile <- "rnn_10.mq5"

cat("double RNN(\n",paste(" double p",1:N_INPUTS, sep="", collapse = ",\n"),"){\n", sep="", file = outputfile)
cat("   double probability = \n", file = outputfile, append = TRUE)
i <- 0
while(i < 2^N_INPUTS){
  binary <- tail(rev(as.integer(intToBits(i))), N_INPUTS)
  cat("      ", file = outputfile, append = TRUE)
  for(j in 1:N_INPUTS){
    cat("(", file = outputfile, append = TRUE)
    if(binary[j] == 0){
      cat("1.0 - ", file = outputfile, append = TRUE)
    }
    cat("p",j,") * ", sep="", file = outputfile, append = TRUE)
  }
  cat("x", i, sep="", file = outputfile, append = TRUE)
  if(i!=(2^N_INPUTS-1)){
    cat(" +", file = outputfile, append = TRUE)
  }else{
    cat(";", file = outputfile, append = TRUE)
  }
  cat("\n", file = outputfile, append = TRUE)
  i <- i+1
}
cat("\n    probability=probability/100.0;\n", file = outputfile, append = TRUE)
cat("\n    return(probability);\n", file = outputfile, append = TRUE)
cat("}", file = outputfile, append = TRUE)
 
Немного отвлеклись от темы и всётаки, существует ли возможность запустить яву на ГПУ????
 
Mihail Marchukajtes:
Немного отвлеклись от темы и всётаки, существует ли возможность запустить яву на ГПУ????

Я бы задал более широкий вопрос, кто в состоянии переписать все на mql5 на GPU :)
 
Maxim Dmitrievsky:

Я бы задал более широкий вопрос, кто в состоянии переписать все на mql5 на GPU :)

Просто в процессе переписки можно что то упустить или наделать ошибок, а так запустить бы на ГПУ, хотябы, а там уже можно и сопроцессор какойнить примостырить. Ну или объеденить мощьностя процессоров по сетке интернетной. Вообщем задача не тривиальна. Увеличить количество ядер эдак до 20-30 и построить модель.... всего то ....
 
Mihail Marchukajtes:

Просто в процессе переписки можно что то упустить или наделать ошибок, а так запустить бы на ГПУ, хотябы, а там уже можно и сопроцессор какойнить примостырить. Ну или объеденить мощьностя процессоров по сетке интернетной. Вообщем задача не тривиальна. Увеличить количество ядер эдак до 20-30 и построить модель.... всего то ....


Проблема в том, что ты все равно захочешь такую либу для МТ рано или поздно, поскольку откроется больше возможностей типа автопереобучения, меньше хэнджоба, меньше головной боли. Или хотя бы в виде dll

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

Лично я даже если бы и не стал переписывать, то деньгами бы скинулся на это дело (на mql5 версию)

 
Maxim Dmitrievsky:


Проблема в том, что ты все равно захочешь такую либу для МТ рано или поздно, поскольку откроется больше возможностей типа автопереобучения, меньше хэнджоба, меньше головной боли. Или хотя бы в виде dll

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


Я как то рассматривал вариант аренды для этого дела, но чтото руки так толком и не дошли, но посмотрим....
 
Maxim Dmitrievsky:

Reshetov:

VS Two class decision forest & logistic regression:

Ну здесь победа Решетова просто всухую 

Какой то фанклуб Решетова прям... смешно ей богу)) Вы бы ещё по точке взяли для бай и сел и 1000 фичей...

На самом деле подгонка чистой воды. Для такого шага дискретизации, выборки для обучения нужны не за 3 месяца, а за 5 лет минимум, 3 месяца даже для ультра-ХФТ мало, когда в день по миллиону точек набегает. И не нужно изобретать велосипед, банальный XGB при правильном наборе фичей даёт квазиоптимальный результат.

 
Алёша:

Какой то фанклуб Решетова прям... смешно ей богу)) Вы бы ещё по точке взяли для бай и сел и 1000 фичей...

На самом деле подгонка чистой воды. Для такого шага дискретизации, выборки для обучения нужны не за 3 месяца, а за 5 лет минимум, 3 месяца даже для ультра-ХФТ мало, когда в день по миллиону точек набегает. И не нужно изобретать велосипед, банальный XGB при правильном наборе фичей даёт квазиоптимальный результат.


Не, мы не фанаты, мы просто ищем оптимум ) За 3 мес для хфт более чем достаточно. Что такое банальный XGB? наивный байесовский только знаю :)

Даже если подгонка, другие модели и ее сделать не в состоянии, как я их не крутил

 
Dr. Trader:

Лучше важность предикторов определять так

library(vtreat)

sourceTable <- read.table("BuySell.csv", sep=";", header = TRUE, stringsAsFactors = FALSE)

#Эта строка кода относится только к конкретно этому файлу.
этом csv первая колонка и первая строка специально заполнены для конкретной модели, и тут не нужны. Удалить.
#для обычных csv файлов такую команду выполнять не нужно.
sourceTable <- sourceTable[-1,-1]

#число колонок
sourceTable_ncol <- ncol(sourceTable)

#Оценка для классификации, только для двух классов.
#Outcometarget должен быть равен значению одного из классов.
#На выбор или эта функция designTreatmentsC, или designTreatmentsN, или designTreatmentsZ (ниже, закоменчены)
#Взаимная корреляция предкиторов учитывается только в designTreatmentsC, и у повторяющихся или похожих предикторов оценка будет понижаться
set.seed(0)
treats <- designTreatmentsC(dframe = sourceTable,
                            varlist = colnames(sourceTable)[-sourceTable_ncol],
                            outcomename = colnames(sourceTable)[sourceTable_ncol],
                            outcometarget = 1,
                            verbose = FALSE
)

# #оценка для регрессии или если больше двух классов
# sourceTable[,sourceTable_ncol] <- as.numeric(sourceTable[,sourceTable_ncol])
# set.seed(0)
# treats <- designTreatmentsN(dframe = sourceTable,
#                             varlist = colnames(sourceTable)[-sourceTable_ncol],
#                             outcomename = colnames(sourceTable)[sourceTable_ncol],
#                             verbose = FALSE
# )

# #Оценка предикторов без учёта цели.
# set.seed(0)
# treats <- designTreatmentsZ(dframe = sourceTable,
#                             varlist = colnames(sourceTable)[-sourceTable_ncol],
#                             verbose = FALSE
# )
# 




#табличка только с названием колонки и её оценкой важности
resultTable <- treats$scoreFrame[,c("varName", "sig")]

#сортировка
resultTable <- resultTable[order(resultTable$sig),]

#согласно общему правилу, оценка предиктора (sig) должна быть меньше 1/<общее число предикторов>
#чем оценка меньше, тем лучше
resultTable$testPassed <- resultTable$sig < 1/(sourceTable_ncol-1)

#для создания модели и прогноза лучше использовать только те предкторы у которых testPassed == TRUE
resultTable

Как я понял - отсеиваются предикторы с высокой корелляцией между собой.
Я немного по другому это делаю - считаю полную матрицу корреляций и потом начиная с 1-го проверяю кореллируемость к нему, если она выше 0.9 (параметр настраиваемый) - то отсеиваю. Метод был описан в статьях по МО.

У вас как то много предикторов отсеилось... видимо ваша ф-я отсеивает где то на уровне 0.5


 
Maxim Dmitrievsky:


Не, мы не фанаты, мы просто ищем оптимум ) За 3 мес для хфт более чем достаточно. Что такое банальный XGB? наивный байесовский только знаю :)

Даже если подгонка, другие модели и ее сделать не в состоянии, как я их не крутил

XGB - https://en.wikipedia.org/wiki/Xgboost - термоядерное оружие машинного обучения. "Банальный" так как самый популярный.

3 месяца для хфт не совсем достаточно, для полного цикла моделирования, так как модель нужно протестировать на разных рынках, сменах режимов, флэш-крышах и разных лебедях, синтетическое стресс-тестирование не может этого сделать, так как реальный рынок. Конечная модель по большей части будет использовать данные не более чем за предыдущую неделю, но чтобы сконфигурировать её понадобится гонять на 1-3 годовых выборках, для уверенности что она везде не облажается. За 3 месяца данных можно обучиться и если датасаентисты знают своё дело, то получится обычная баблокосилка, но однажды, может через 3 месяца может через пол года, всё резко может сломаться, по "не известной" причине, точней известной, так как модель не сталкивалась с таким мета- состоянием рынка и стала не релевантной.

Причина обращения: