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

 
mytarmailS #:

Su problema es un problema de optimización, de búsqueda de parámetros desconocidos.

Aquí tienes el ÚNICO artículo que necesitas para estudiar https://www.mql5.com/ru/articles/2225


Si quieres enseñar AMO para maximizar el beneficio y minimizar el drawdown:


necesitas

1) crear una función de aptitud, una función que cuente los beneficios y las pérdidas de las señales de trading.

2) cualquier algoritmo MO que generará señales para el comercio, para la función de fitness (p.1)

3) cualquier algoritmo de optimización (genético, enjambre de partículas, churn) - que generará señales como objetivos para AMO (p.2).


algoritmo así

1) AO crea un objetivo para AMO

2) AMO se entrena en este objetivo

3) AMO crea una previsión de señales comerciales

4) las señales comerciales son evaluadas por FF y producen un resultado

5) el resultado FF es evaluado por AO y maximizado/minimizado aún más y así sucesivamente en un círculo hasta que se obtiene un resultado aceptable.


==========

AO - algoritmo de optimización

AMO - algoritmo de aprendizaje automático

FF: función de adecuación

=========


ps. si quieres trabajar con neuronka y no con ningun AMO, puedes cambiar los pesos mediante AO, sin aprender targeting.

Gracias.

Esta formulación de la respuesta condujo inmediatamente a la cuestión de la concretización del trading manual, donde se echa en falta la claridad y concreción de las señales, su variedad y excesiva flexibilidad. Es decir, hay motivos para reflexionar.

 
СанСаныч Фоменко #:

Es muy interesante para mí. Mi búsqueda de un profesor es un proceso largo y doloroso.

Aquí está el código de la enseñanza del bosque rendom por medio de AO,

la función de aptitud (NUESTRO OBJETIVO) es encontrar un hermoso / estable crecimiento de los beneficios, a saber, la máxima correlación entre la dinámica del balance y la línea recta de crecimiento

#  install.packages(c("randomForest","GA"))
library(randomForest)
library(GA)


#  создаю фейковые данные для простоты воспроизводимости
price <- cumsum(rnorm(100))
X <- embed(price,dimension = 10)[,10:1]
X <- t(apply(X,1,scale))
price <- tail(price,nrow(X))

#  настройка графики
par(mar=c(2,2,2,2))
layout(1:2)

#  запускаю генетический алгоритм
#  который "придумывает" такой таргет полсе обучения на котором
#  АМО даст самый красивый прирост капитала
best_res <- 0
GA <- ga(type = "real-valued",
         fitness = fitness, 
         lower = rep(-5,nrow(X)),
         upper = rep( 5,nrow(X)),
         popSize = 100,
         maxiter = 50,
         run = 20)


Aquí está el código de las funciones para calcular el beneficio y FF.

#  простая функция которая считает прибыль ( возможно не верно :)  ) 
count_equity <- function(trade_signal, price)  cumsum(c(diff(price),0)*trade_signal)

#  ФФ которая берет выход из АО и обучает АМО
fitness <- function(ga_out){
  
  target <- ga_out
  set.seed(123)
  rf <- randomForest(target~., X, ntree=100)
  pr <- predict(rf,X)
  
  trade_signal <- sign(pr)
  balance <- count_equity(trade_signal = trade_signal,price = price)
  res <- cor(balance, 1:length(balance))
   
  #  просто графика, необезательный елемент
  if(res>best_res){
    best_res <<- res
    plot(price,t="l",main="price")
    color <- ifelse(trade_signal==1,3,2)
    points(price,col=color,lwd=5,pch=20)
    plot(balance,t="l",col=4,main="balance")
  }
  return(res)
}



Aquí está el resultado, AO ha encontrado un objetivo tal para AMO que si operamos sus señales obtendremos un hermoso crecimiento de los beneficios.


 
Elvin Nasirov #:

Gracias.

Esta respuesta me llevó inmediatamente a la cuestión de la concreción de la negociación manual, en la que se echa en falta la claridad y concreción de las señales, su variedad y su excesiva flexibilidad. Es decir, hay motivos para reflexionar.

Sigo sin poder concretar mi trading manual....

 
mytarmailS #:

Aquí está el código para enseñar el Rendom Forrest con herramientas AO,

función de aptitud (NUESTRO OBJETIVO) - para encontrar un hermoso / estable crecimiento de los beneficios, a saber, la máxima correlación entre la dinámica del balance y una línea recta ascendente


Aquí está el código de las funciones de cálculo de beneficios y FF



Aquí está el resultado, AO ha encontrado un objetivo tal para AMO que si operamos sus señales obtendremos un hermoso crecimiento de los beneficios


¿Y? ) ¿Cómo afecta el resultado en los nuevos datos? Se hace sin ff por simple markup.
 
Elvin Nasirov #:

No diría que me da pereza hacer otras marcas, pruebo diferentes variantes y como no soy un senor en machine learning, cuando me viene alguna idea a la cabeza, intento encontrar al menos algunas variantes de ejemplos con intentos de conseguir el resultado.

Cuando traté de hacer una versión paramétrica de la solución con sus propios valores de los indicadores, pero resultó que hay tantas variantes del conjunto de valores de los indicadores que con la potencia de cálculo actual selección de parámetros se llevará a cabo casi 10 años).

Me sorprendió cuando leí la frase "tomar cualquier TS rentable del mercado". Yo ni siquiera considerar esta opción, ya que pensé que no están allí.

Todo esto es una especie de percepción complicada. Tienes que encontrar la ineficiencia. Si no puedes encontrarla tú mismo, búscala en otros. Hay señales con historia en el mercado.
 
Maxim Dmitrievsky #:
¿Y qué? ) Es un simple marcado sin FF.

Si fuera tan sencillo, no existirían AO y FF...


Es cuando sabemos exactamente lo que necesitamos y entendemos cómo algoritmizarlo, cuando podemos hacerlo con markup.

Y hay casos en los que sólo queremos decir : "No sé qué aspecto debe tener, pero que sea bueno".

Todo lo que podemos describir es bueno/malo, eso es lo que se pone en el FF.


He aquí un ejemplo de tarea:

La tarea es entrenar un AMO tal que no cometa errores en sus predicciones sobre nuevos datos en una de las clases, una de las clases tiene prohibido cometer errores en absoluto...

¿cómo hacer una marca de este tipo?


 
mytarmailS #:

Si fuera tan sencillo, no existirían AO y FF.


Cuando se sabe exactamente lo que se necesita y se comprende cómo algoritmizarlo, se puede utilizar el marcado.

Y hay casos en los que sólo queremos decir: no sé cómo debe quedar, pero que quede bien.

Todo lo que podemos describir es bueno/malo, y eso es lo que incorpora el FF.


He aquí un ejemplo de una tarea:

La tarea es entrenar AMO para que no cometa un error en sus predicciones sobre nuevos datos en una de las clases, una de las clases está prohibido cometer un error en absoluto....

¿cómo hacer esto con markup?


Después del markup, se echan las operaciones perdedoras a la 3ª clase, y se obtiene la misma curva plana.
¿Y cómo puede la selección de criterios de optimización hacer algo por los nuevos datos? Es un medio para mejorar una TS ya hecha. ¿Buscar pérdidas personalizadas y ver qué hay en los datos nuevos? Tampoco es una buena idea.
 
Maxim Dmitrievsky #:
Después de marcar, echas las operaciones perdedoras a la 3ª clase, y se obtiene la misma curva suave.

Es la cantidad de código que hay que escribir con estas clases, echándolas, reentrenando....

En FF solo escribo 2 lineas, penaliza por un error de clase, y recompensa por una respuesta correcta, y ya esta, y luego fantasea como hacerlo por si solo y no necesita una montaña de codigo....


OK, eso fue fácil, otro ejemplo de una tarea

AMO entrada es eurodólar, y quiero que la salida sea una serie que es

1) cointegrada con la libra

2) si el comercio de arbitraje AMO fila / libra, de modo que hay un beneficio.

¿cómo se puede hacer esto a través de markup?

Maxim Dmitrievsky #:
la optimización puede hacer algo para los nuevos datos?

de la misma manera que con MO regular, nos entrenamos y mirar con un ojo en la pista, con el otro en la prueba.

 
mytarmailS #:

Cuánto código hay que escribir con estos ciclos, lanzamientos, reentrenamientos.

Y en FF sólo escribo 2 líneas, penalizar por un error de clase, y recompensar por una respuesta correcta, y eso es todo, y luego se imagina cómo hacerlo por sí mismo y no necesita una montaña de código....


Bueno, eso fue fácil, otro ejemplo de una tarea

AMO entrada es eurodollar, en la salida quiero obtener una serie tal que

1) cointegrada con la libra

2) si el comercio de arbitraje AMO fila / libra para obtener beneficios

¿cómo se puede hacer esto a través de markup?

de la misma manera que con un MO regular, aprendemos y mirar con un ojo en la pista y el otro en la prueba.

No hay código allí, lo hice en los artículos. Y la corrección de operaciones perdedoras se hacía, se invertía. Simplemente no entiendo cómo se debe guardar en los nuevos datos.

No hay manera de comercio de arbitraje allí, si no están cointegrados inicialmente. Usted sólo puede encontrar piezas por el tiempo, donde hay tales momentos. Y cuál es el punto de distorsionar las cotizaciones de símbolos, no se puede abrir operaciones en ellos
 
mytarmailS #:

igual que con un modus operandi normal, entrenamos y miramos la pista con un ojo y la prueba con el otro.

Obtenemos un marcado aleatorio, que luego se prueba con nuevos datos. Es necesario seleccionar las mejores variantes de marcado mediante la misma genética. Pero esto significa cientos y miles de reentrenamientos de los modelos.

Y en mi último artículo sobre el metamodelo reduje el número de iteraciones al mínimo. Después de 10 iteraciones puedes obtener las operaciones correctas, pero suelen ser pocas, el resto se filtra. Puedes elegir variantes intermedias, donde hay más operaciones, pero el resultado es peor.