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

 
Alexey Burnakov:
Vale, puedes pensar. Imagínese, por ejemplo, que en cada iteración la red neuronal no hace una retropropagación del error estándar basada en la desviación del objetivo de la predicción, sino que obtiene datos que en la versión anterior de los pesos el comercio real difiere del ideal en tantos puntos. Y actualiza los pesos en función de esta información. Es decir, la información debe ser un flujo paralelo a la máquina. Tal vez, se pueda hacer.

¿Por qué necesitas pesas? ¿Por qué hablas de ellos en primer lugar?

Tenía entendido que se necesitan pesos previos, ahora entiendo que no entiendo nada)

 
mytarmailS:

¿Por qué necesitas pesas? ¿Por qué hablas de ellos en primer lugar?

Tenía entendido que se necesitan pesos previos, ahora entiendo que no entendí nada)

Pues parece que sí ))

No necesitamos las pesas. Sólo los he mencionado para que te quede claro. Necesitamos saber cómo ha operado el sistema en los pesos anteriores. Necesitamos el resultado del comercio de alguna forma integrada. Todo.

Los pesos son actualizados por el algoritmo.

 

Aquí, una simple función funciona. Hay que probar uno más complejo. Todavía hay que diferenciarlo, ese es el truco.

library(neuralnet)


y <- as.data.frame(matrix(runif(n = 10000, min = -15, max = 15), ncol = 2))

y$V3 <- runif(n = 5000,  min = -15, max = 15)

y$V4 <- runif(n = 5000,  min = -15, max = 15)

y$V5 <- runif(n = 5000,  min = -15, max = 15)

y$V6 <- runif(n = 5000,  min = -15, max = 15)

y$V7 <- runif(n = 5000,  min = -15, max = 15)

y$V8 <- y$V1 ^ 2 + y$V2 ^ 2

colnames(y) <- c('input_1', 'input_2', 'noise_1', 'noise_2', 'noise_3', 'noise_4', 'noise_5', 'output')


f_f <- function(x, y){

1/2*(y-x)^2

}


print(

nn_model <- neuralnet(formula = output ~ input_1 + input_2 + noise_1

, data = y

, hidden = 1

, threshold = 0.01

, stepmax = 1e+05

, rep = 100

, startweights = NULL

, learningrate.limit = NULL

, learningrate.factor = list(minus = 0.5, plus = 1.2)

, learningrate=NULL

, lifesign = "none"

, lifesign.step = 10

, algorithm = "rprop+"

, err.fct = f_f #"sse"

, act.fct = "logistic"

, linear.output = F

, exclude = NULL

, constant.weights = NULL

, likelihood = FALSE

)

)

 

f_f <- function(x, y) 1/2*(y-x)^2

f_f - cuenta el error para la red ¿verdad?

x es el valor que debería tener (curva ideal)

y es como debería ser (la curva real)

La diferencia entre ellos es el error

necesito un vector de operaciones por velas anteriores, necesito las reglas para abrir las operaciones, necesito los datos de entrada de las operaciones

 
mytarmailS:

f_f <- function(x, y) 1/2*(y-x)^2

f_f - cuenta el error para la red ¿verdad?

x es el valor que debería tener (curva ideal)

y es como debería ser (la curva real)

La diferencia entre ellos es el error

Creo que necesito un vector de operaciones por velas, pero no entiendo cómo abrir operaciones con qué reglas, cómo deben ser estos datos de entrada

Casi. X es un vector de predicciones ns. Ygrek es el vector de incrementos de precio por barra hacia adelante (por ejemplo ), que es lo que predice la red. Y la función completa es lo que el algoritmo NS verá en cada iteración. Hasta ahora no hay resultados. Hay que modelarlas.

Cómo. Debemos describir la lógica de apertura de las posiciones e introducir el spread directamente en el cuerpo de la función. Escribe el resultado de las posiciones abiertas en el vector y calcula las características intrínsecas en el vector.

Por ejemplo: buy<-(y-spread)[x>0]. Esto será un vector para los largos. Entonces all<-append(buy, sell).

Pero probablemente no funcione. Hay muchas restricciones en el tipo de función (.
 
Mientras tanto, sigo con mi experimento. Entrené la máquina sólo en eurusd y obtuve una pequeña MO positiva en la validación.

Adjunto una captura de pantalla de la prueba del modelo actual en MT4. La etapa de formación aún está en curso... Los resultados completos no estarán disponibles hasta mañana. Los cálculos son bastante largos en conjunto con R y en cada minuto si no hay operaciones abiertas. Comenzó en 1999. La validación comenzará a partir de 2010.09. El gráfico actual corresponde a 2003.

Estoy usando 10 puntos de diferencia de cinco dígitos. Espere 7-8 pips en la validación de MO. No dense.... Pero ahora ya se puede encontrar DC donde el spread es de 10 pips, por eso creo que el resultado es casi significativo.
Archivos adjuntos:
 

Un colega me ha enviado un enlace a un curso sobre aprendizaje automático, ¿te gustaría echarle un vistazo? Es gratis, pero está en Python por alguna razón ((

https://www.udacity.com/course/machine-learning-for-trading--ud501

 
Alexey Volchanskiy:

Un colega me ha enviado un enlace a un curso sobre aprendizaje automático, ¿te gustaría echarle un vistazo? El curso es gratuito, pero está en Python por alguna razón ((

https://www.udacity.com/course/machine-learning-for-trading--ud501

El más eficaz:

1. Poner en R - 5 minutos.

2. Descargue el paquete rattle, que está diseñado como una GUI, por lo que no requiere ningún conocimiento de R.

3. Para reducir los costes de puesta en marcha puedes utilizar mi artículo. Contiene explicaciones y, lo que es más importante, tiene un archivo adjunto listo. Una vez que hayas visto mi archivo, podrás preparar el tuyo fácilmente.

4. Tienes seis modelos.

5. Lo más importante es que en Rattle puedes ver el ciclo completo del aprendizaje automático:

  • preparación inicial de los datos (extracción de datos)
  • modelado
  • evaluación de resultados
  • como texto extra en la R de todas sus actividades de sonajero. Este texto puede utilizarse fuera del sonajero.

Todo esto le proporcionará una base sin lagunas y, lo que es más importante, una experiencia concreta de aprendizaje automático relacionado con el mercado de divisas.

PS.

La matraca te será muy útil no sólo en los primeros pasos, sino también más adelante: costes mínimos, para estimar algo, para experimentar...

PSPS

Por supuesto, no se puede prescindir de los libros. Aquí hay muchos. La búsqueda funciona perfectamente.

 
mytarmailS:

¡Gracias por la detallada aclaraciónDr.Trader!

Sabes, probablemente lo mejor y más correcto sería enseñar las propias inversiones, incluso el mismo zigzag, es decir, dar tres estados 1) Vuelta en U hacia arriba

2) inversión a la baja

3) no es una vuelta en U

Pero si se trata de enseñarlo, es bastante difícil captar las inversiones, además del sesgo en el número de observaciones, las clases "no invertidas" serán decenas o tal vez cientos de veces más

¿Y qué predictores utiliza y cuáles son los resultados?

Acabo de empezar a utilizar el análisis espectral, las primeras pruebas me salieron mucho mejor que con los indicadores, lo pasé por rattle, el error de entrenamiento y prueba era de un 6% aproximadamente, pero cuando empecé a utilizar R el error subió al 30% si no me equivoco, San Sanich dice que es reentrenamiento, así que todavía no entiendo mucho

También hay una forma de averiguar qué periodos dominan en el mercado a través del análisis espectral y luego se pueden utilizar estos periodos en los indicadores. Conseguiré indicadores adaptativos, no ajustados al historial.

Utilizo indicadores estándar como base para crear predictores. Yo mismo sigo experimentando con ellos, probando las ideas de este hilo del foro.

Lo he estado haciendo durante las últimas semanas, ahora el mejor resultado es el siguiente: (un montón de cálculos, estoy tratando de utilizar D1 marco de tiempo para el cálculo más rápido, más tarde voy a utilizar más pequeño marco de tiempo)

1) exportar de mt5 a csv: ohlc, tiempo, indicadores, todo para las últimas 10 barras. Recientemente he empezado a tomar el tiempo sólo de la barra más nueva, creo que el tiempo de las otras barras es calculable y por lo tanto no aporta ninguna información nueva. Salen a la luz varios centenares de predictores "primarios". El resultado requerido del aprendizaje es "1" o "0" - subida o bajada del precio en la siguiente barra. Mi método con zigzags no es estable y complejo, ahora estoy mejor trabajando con precios cercanos. Cuando trabaje el algoritmo completo para el entrenamiento del modelo desde cero, puede que empiece a trabajar en zigzags y en la predicción de la tendencia.

2) En R estoy haciendo diferentes operaciones matemáticas con los datos disponibles - suma, deltas, min, max, etc. Ya salen más de mil predictores.

3) Obviamente, después del segundo paso hay más basura de la necesaria. Lo estoy filtrando por el método del artículo sobre componentes básicoshttp://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/, SanSanych escribió sobre ello anteriormente. No estoy enseñando el modelo PCR en sí mismo y me he conformado con la función de preselección de predictores por ahora:

library('vtreat')
PrunePredictors <- function(srcTable, pruneSig = -1) {
        targetName <- tail(colnames(srcTable), 1)
        
        treatmentsN <- designTreatmentsN(srcTable,setdiff(colnames(srcTable),targetName),targetName, verbose=FALSE)
        if(pruneSig<0){
                pruneSig = 1.0/(ncol(srcTable)-1)
        }

        scoreFrameSorted <- treatmentsN$scoreFrame[,c("origName", "psig", "code")]
        scoreFrameSorted <- subset( scoreFrameSorted, code == "clean")[,1:2]
        scoreFrameSorted <- scoreFrameSorted[with(scoreFrameSorted, order(psig)), ]
        
        scoreFrameSortedPruned <- subset( scoreFrameSorted, psig < pruneSig)
        scoreFrameSortedPruned <- scoreFrameSortedPruned[,1] 
        
        cat("Minimal psig:", scoreFrameSorted[1,2], "\n")
        cat("Maximal psig:", scoreFrameSorted[nrow(scoreFrameSorted),2], "\n")
        cat("Threshold:", pruneSig, "\n")
        cat("Good predictors:", nrow(subset( scoreFrameSorted, psig < pruneSig)), "\n")
        
        return(scoreFrameSortedPruned)
}

srcTable es una tabla con predictores, la última columna debe ser el resultado de entrenamiento requerido.pruneSig es mejor dejar -1.

Como resultado, la función devolverá una lista con los nombres de las columnas de la tabla que contienen alguna información útil. O una lista vacía si no se encuentra nada útil. Este método se menciona en el artículo como poco significativo, pero resulta ser bastante adecuado, tamiza muy bien la basura. Además, la lista de resultados se ordenará por relevancia, de más a menos útil.

4) Si la función devuelve una lista vacía - vuelvo a ejecutar el segundo paso, generando de nuevo diferentes combinaciones matemáticas sobre los datos disponibles, y luego el tercer paso para cribar. Tengo que repetir esto 3-4 veces. El volumen de datos crece con cada repetición, por lo que es mejor limitar de alguna manera el volumen de nuevos datos generados. Podemos cambiar esta función para la criba, de manera que si la lista sale vacía, devuelva uno o dos mejores resultados y genere nuevos predictores sólo a partir de ellos.

5) A continuación, según el artículo, debemos entrenar el modelo del componente principal. Tengo problemas con él - hasta ahora el mejor r-cuadrado para el modelo entrenado es 0,1, no es suficiente, el artículo dice que necesito al menos 0,95. Pero puedo entrenar algún otro modelo de R en los predictores obtenidos y dará un mejor resultado. Tengo más experiencia con la neurona, el mejor resultado en fronttest con ella sale con un error de alrededor del 37%. Se supone que el modelo PCE es más estable, sin necesidad de reentrenamiento, etc., pero hasta ahora no puedo conseguir ningún predictor para él.

Si tiene un error del 30% en el fronttest entonces es un modelo bastante rentable, haga Expert Advisor para mt5 y compruébelo en el probador de estrategias.

 
Alexey Volchanskiy:

Un colega me ha enviado un enlace a un curso sobre aprendizaje automático, ¿te gustaría echarle un vistazo? Es gratis, pero está en Python por alguna razón ((

https://www.udacity.com/course/machine-learning-for-trading--ud501

Empecé a ver este curso, presta mucha atención al framework Pandas en Python. Las primeras lecciones parecen más un tutorial sobre este mismo marco que sobre el análisis de datos. Pero el tutorial parece adecuado, sin el típico "soy un gurú del Forex, te abriré los ojos y ganarás millones" como en muchos otros entrenamientos inútiles, da esperanzas de que cuenten cosas adecuadas hasta el final. Pero también hay que tener en cuenta que este curso está diseñado para operar en bolsa y no en forex, no sé si los procesos de aprendizaje de los modelos son similares en estos dos ámbitos.
Razón de la queja: