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

 
Три психа)))) 
 
Алексей, скинь мне свои данные чтобы я мог нормально понять в чем проблема, и написать нормальный код. Вариантов непоняток слишком много
 
mytarmailS #:
Алексей, скинь мне свои данные чтобы я мог нормально понять в чем проблема, и написать нормальный код. Вариантов непоняток слишком много

Выборка будет загружена в течении часа

Ссылка для скачивания: https://transfiles.ru/5fgge

Вообще в ней используются публичные предикторы, что указаны в моих статьях, и целевая вроде из последних статей. Выборка экспериментальная - тестирую на ней идеи.

 
Aleksey Vyazmikin #:

Выборка будет загружена в течении часа

Ссылка для скачивания: https://transfiles.ru/5fgge

Вообще в ней используются публичные предикторы, что указаны в моих статьях, и целевая вроде из последних статей. Выборка экспериментальная - тестирую на ней идеи.

Ок, попрбую когда типа проснусь
 
mytarmailS #:
Ок, попрбую когда типа проснусь

Переписал код, код был с ошибками, не доверяй ГПТ это лажа!

Попробовал с нормализацией и без , попробовал с балансировкой классов и без.

Больше всего признаков находит с нормализацией и балансировкой классов, но из за рандомной балансировки могут результаты отличаться. Находит в среднем 15-20 признаков

data <- data.table::fread("D:\\train.csv", sep = ";") |> as.data.frame()
original_colum_names <- colnames(data)
target <- data$Target_100
data <- data[, !(names(data) %in% c("Time", "Target_P", "Target_100", "Target_100_Buy", "Target_100_Sell"))]
data <- scale(data)

# table(target) # баланс целевой


#################################################
### без балансировки классов в большую сторону ##
#################################################

library(abess)
model <- abess(y = target, x = data, tune.path = "gsection", early.stop = TRUE) 
ex <- extract(model)
ex$support.vars

#  сохранение имен колонок 
# write.csv(ex$support.vars, "E:\\FX\\MT5_CB\\MQL5\\Files\\00_Standart_50\\Setup\\Pred.csv", row.names = FALSE)
best_colums_idx <- which(original_colum_names %in% ex$support.vars)
# Сохранение индексов в CSV файл
#write.csv(best_colums_idx, "E:\\FX\\MT5_CB\\MQL5\\Files\\00_Standart_50\\Setup\\Оставшиеся_предикторы.csv", row.names = FALSE)





################################################
### с балансировкой классов в большую сторону ##
################################################

x <- caret::upSample(x = data, y = as.factor(target), list = TRUE)
x$y <- as.numeric(as.character(x$y))

# table(x$y) # баланс целевой

model <- abess(y = x$y, x = x$x, tune.path = "gsection", early.stop = TRUE) 
ex <- extract(model)
ex$support.vars

#  сохранение имен колонок 
# write.csv(ex$support.vars, "E:\\FX\\MT5_CB\\MQL5\\Files\\00_Standart_50\\Setup\\Pred.csv", row.names = FALSE)
best_colums_idx <- which(original_colum_names %in% ex$support.vars)
# Сохранение индексов в CSV файл
#write.csv(best_colums_idx, "E:\\FX\\MT5_CB\\MQL5\\Files\\00_Standart_50\\Setup\\Оставшиеся_предикторы.csv", row.names = FALSE)




Вот напрмер

ex$support.vars
 [1] "iATR_B0_S1_M1"         "iStdDev_B0_S1_M1"      "iVolumes_B0_S1_M1"     "iStdDev_B0_S1_M2"     
 [5] "iATR_B0_S1_M3"         "iATR_B0_S1_M4"         "iATR_B0_S1_M5"         "iATR_B0_S1_M6"        
 [9] "iATR_B0_S2_M1"         "iStdDev_B0_S2_M1"      "iATR_B0_S2_M2"         "iATR_B0_S2_M3"        
[13] "iATR_B0_S2_M5"         "iATR_B0_S2_M6"         "iATR_B0_S15_M1"        "iATR_B0_S15_M2"       
[17] "iADX_B2_S15_M12"       "iADXWilder_B2_S15_M20" "iVolumes_B0_S15_H4"   
 

Также в датасете оч. много линейно зависимых переменных . Попробуй обучить свою модель на этих очищених данных, там осталось всего 500 признаков от 2400 изначальных. В теории результат должен быть таким же как и с 2400

data <- data.table::fread("D:\\train.csv", sep = ";") |> as.data.frame()
target <- data$Target_100
data <- data[, !(names(data) %in% c("Time", "Target_P", "Target_100", "Target_100_Buy", "Target_100_Sell"))]

bad_colums <- caret::findLinearCombos(data[1:500,])$remove

ncol(data)         # количество всех колонок 2408
length(bad_colums) # кличество линейно зависимых 1908


clear_data <- cbind.data.frame(
                              target, 
                              data[,-bad_colums]
                              )

write.csv(clear_data, "E:\\FX......Setup\\не_избыточный_датасет.csv", row.names = FALSE)
 
mytarmailS #:
Переписал код, код был с ошибками, не доверяй ГПТ это лажа!

В чём ошибки? Результат получился идентичный в случае "без балансировки".

Попробую обучить с вариантом после балансировки.

 
mytarmailS #:
Попробуй обучить свою модель на этих очищених данных

Попробую, только индексы нужны для исключения колонок...

 
Aleksey Vyazmikin #:

В чём ошибки? Результат получился идентичный в случае "без балансировки".

Попробую обучить с вариантом после балансировки.

Ошибки были в тех кодах что я выделял. 
Брало неправильные колонки и не правильные колонки в итоге были записаны в конечный файл
 
mytarmailS #:
Ошибки были в тех кодах что я выделял. 
Брало неправильные колонки и не правильные колонки в итоге были записаны в конечный файл

Видимо Вы про это . Там вообще ничего не было - может синтаксис изменился за пару лет? А так - конечно надо код всегда проверять, если есть возможность.