Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 2425

 
Maxim Dmitrievsky:
Bueno, puedes tomar incrementos de 5-15 y será tan bueno como

La expectativa de la estera de más de 30 puntos sólo en los incrementos, ¿dónde podemos observar eso? Formación en la muestra 2014-2018 y trabajo en 2020: ¿dónde está eso en los incrementos?

Maxim Dmitrievsky:
O elimine todos los predictores por correlación primero (segundos de tiempo) y luego tome los 5-15 restantes (si obtiene esa cantidad de fuerza)

Así es como la econometría le ahorra tiempo.

¿Quieres intentar hacerlo mejor de lo que tienes? Te voy a dar una muestra - no es muy grande.

 
Maxim Dmitrievsky:

He estado pensando en estrategias para morir...

¿Y si pronostico las características del mercado a largo plazo? Luego reconstruyo una serie con las características pronosticadas y aprendo de ella, y luego opero el mercado con este modelo... ¿has intentado pensar en esta dirección?


Por ejemplo, para predecir el espectro del mercado...

Como "no podemos conocer el futuro, pero podemos imaginarlo".
 
Aleksey Vyazmikin:

Así que, hice la primera fase de la investigación

Cuánta energía entró en ....

 
mytarmailS:

Cuánta energía ha entrado en ....

Es un regalo para todos los escépticos.

 
Maxim Dmitrievsky:

O bien, tamizar todos los predictores por correlación primero (segundos de tiempo) y luego tomar los 5-15 restantes (si se puede obtener esa cantidad)

Pero voy a comprobar tu idea - no es difícil para mí. Entonces, ¿qué coeficiente de correlación debo tomar? ¿Y cómo seleccionar 5-15 de los predictores restantes -escribir específicamente-, tal vez cómo medirlos allí y ordenarlos?

 
mytarmailS:

Cuánta energía se ha perdido....

En lugar de contar el dinero de los demás, ¿podrías darme una pista sobre R?

Aquí hay un script que debería calcular la correlación y eliminar las columnas correlacionadas.

library('caret')

df1 = read.csv("F:\\FX\\Открытие Брокер_Demo\\MQL5\\Files\\Proboy_236_TP_4_SL_4\\Si\\Setup\\train.csv", header = TRUE, sep = ";",dec = ".")

df1 <- df1[, ! colnames(df1)  %in% 
           c("Target_100_Buy",
             "Target_100_Sell",
             "Target_P",
             "Time",
             "Target_100")  ] # удаляем не нужные колонки
print (df1)
df2 = cor(df1)
hc = findCorrelation(df2, cutoff=0.3) # putt any value as a "cutoff" 
hc = sort(hc)
reduced_Data = df1[,-c(hc)]
print (reduced_Data)
write.table(reduced_Data, file = "F:\\FX\\Открытие Брокер_Demo\\MQL5\\Files\\Proboy_236_TP_4_SL_4\\Si\\Setup\\outfile_03.csv",
            append = FALSE, quote = FALSE, sep=";",
            eol = "\n", na = "NA", dec = ".", row.names = FALSE,
            col.names = TRUE, qmethod = c("escape", "double"),
            fileEncoding = "")

Y hay dos preguntas:

1. Cómo hacer la ejecución de este código en un bucle for, es decir, necesito aumentar el coeficiente y cambiar el nombre del archivo para guardar con el índice de coeficiente, o a otro directorio generado en el bucle.

2. Estoy quitando las columnas auxiliares para el cálculo, cómo las copio en la tabla que aparece (df2) después de quitar las columnas correlacionadas.

Gracias por su respuesta.

 
Aleksey Vyazmikin:

En lugar de contar el dinero de los demás, ¿podrías darme algún consejo sobre R?

He hecho un script que debería calcular la correlación y eliminar las columnas correlacionadas.

Y hay dos preguntas:

1. Cómo hago para que este código se ejecute en un bucle for, es decir, necesito aumentar el coeficiente y cambiar el nombre del archivo para guardarlo con el índice del coeficiente, o a otro directorio generado en el bucle.

2. Estoy quitando las columnas auxiliares para el cálculo, cómo las copio en la tabla que aparece (df2) después de quitar las columnas correlacionadas.

Gracias por su respuesta.

respuesta a la pregunta (2)

library('caret')
#df1 загруженная дата
df1 <- as.data.frame(matrix(nrow = 100,ncol = 10,data = sample(1:10,1000,replace = T)))
# head(df1)

not <- c("V1","V2","V3") #  имена переменных которые нам НЕ нужны для корреляции

df2 <-  cor(     df1[, ! colnames(df1)  %in%  not]      )  
# head(df2)

not.need <- findCorrelation(df2, cutoff=0.1) # putt any value as a "cutoff" 
not.need.nms <- colnames(df2[,not.need])  # получаем имена переменных что не прошли коррел тест
# head(not.need.nms)

# получаем изначальную  df1 только без признаков что не прошли отбор
reduced_Data <- df1[, ! colnames(df1)  %in%  not.need.nms]
# head(reduced_Data)


ahora puedes escribir una función que haga lo mismo pero con un aspecto más limpio

get.findCorrelation <- function(data , not.used.colums , cor.coef){
library('caret')
df2 <-  cor(     data[, ! colnames(data)  %in%  not.used.colums])  
not.need <- findCorrelation(df2, cutoff=cor.coef) 
not.need.nms <- colnames(df2[,not.need])  # получаем имена переменных что не прошли коррел тест
reduced_Data <- data[, ! colnames(data)  %in%  not.need.nms]
return(reduced_Data)}

gf <- get.findCorrelation(data = df1 , 
                          not.used.colums = c("V1","V2","V3"),
                          cor.coef = 0.1)

se introduce un archivo en la entrada

data = df1
especificar las columnas que no se utilizarán para el análisis de Corel

not.used.colums = c("V1","V2","V3")

bien, y afinando korel de la función findCorrelation

cor.coef = 0.1
la salida es df1 pero sin características basura
 

Ahora la respuesta a la primera pregunta

way <- "F:\\FX\\Открытие Брокер_Demo\\MQL5\\Files\\Proboy_236_TP_4_SL_4\\Si\\Setup\\"

cor.test.range <- seq(from = 0.1,to = 0.7,by = 0.1)  #  диапазон перебора в коеф корр

for(i in 1:length(cor.test.range)){
  
  reduced_Data <- get.findCorrelation(data = df1 , 
                      not.used.colums = c("V1","V2","V3"),
                      cor.coef = cor.test.range[i] )
  
  file.name <- paste0("test.with.cor_" , cor.test.range[i] , ".csv")
  final.way <- paste0(way , file.name)
  
  
  write.csv2(x = reduced_Data,file = final.way,row.names = F)  #  возможно это лучше
  
  #  write.table(reduced_Data, file = final.way,
  #              append = FALSE, quote = FALSE, sep=";",
  #              eol = "\n", na = "NA", dec = ".", row.names = FALSE,
  #              col.names = TRUE, qmethod = c("escape", "double"),
  #              fileEncoding = "")
}
 
Aleksey Vyazmikin:

A continuación, realicé un entrenamiento de tabla cuántica de ajuste fijo sobre una muestra de tren - 60% de prueba - 20% de examen - 20% con

¿No te parece que estás ajustando tu modelo a la muestra de prueba más exitosa?
Yo mismo he dado con parcelas de prueba con éxito unas cuantas veces y he pensado: aquí está el Grial))). Y después de cambiar los sitios hacia adelante o hacia atrás durante unos meses - todo se aclaró y el modelo estaba equivocado y los predictores estaban equivocados, y perdí dinero en esos sitios.

Me he pasado por completo al análisis de los modelos de valoración cruzada o de valoración a plazo. Como mucho he visto el 50%.
Doc también mencionó la validación cruzada en uno de sus últimos posts.

 
YURY_PROFIT:

Maxim, el programador con el que me he peleado aquí, tiene un Asesor Experto de aprendizaje automático en backtests - sólo fuego, en las pruebas de avance duró un mes y medio también con estadísticas rentables decentes, ahora está vertiendo sin siquiera hacer una pausa))

YURY_PROFIT:

Por favor, proporcione un ejemplo de aprendizaje de la máquina EA que estaba trabajando en el beneficio en el mercado real durante al menos 3 meses sin reentrenamiento

Entonces, ¿cuál es el problema del reciclaje continuo? ¿Qué es esta condición de vacío"sin recapacitar"? Si trabajo un día en forex, ya es un grial, y puedo reciclar con cada tic, es cuestión de técnica.

Razón de la queja: