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

 

Sobre el tema de cómo transferir las neuronas de R a mql:

Lo hice con el paquete nnet. Véasehttps://cran.r-project.org/web/packages/nnet/index.html(fuente del paquete: nnet_7.3-12.tar.gz). Hay src / nnet.c carpeta en el archivo.

Necesitamos la función fpass, las primeras líneas antes de thisError = 0.0 (esto es el comienzo del cálculo del error para el backprop, no es necesario para la predicción simple)


Este es el código que podemos utilizar en nuestro EA -

   double sigmoid(double sum)
     {
      if(sum<-15.0)
         return (0.0);
      else if(sum>15.0)
         return (1.0);
      else
         return (1.0 / (1.0 + exp(-sum)));
     }

//nnet_hidden - число нейронов в скрытом слое
//выход один
//nnet_weights - массив с весами нейронки взятыми из R после обучения nnet модели

int weights_it=0;
double hiddenLayer[];
ArrayResize(hiddenLayer,nnet_hidden);
for(int i=0; i<nnet_hidden; i++)
 {
  hiddenLayer[i]=nnet_weights[weights_it++];
  for(int j=1; j<=nnet_bars; j++)
    {
     hiddenLayer[i]+=openPrices[j]*nnet_weights[weights_it++];
    }
  hiddenLayer[i]=sigmoid(hiddenLayer[i]);
 }
double prediction=nnet_weights[weights_it++];
for(int i=0; i<nnet_hidden; i++)
 {
  prediction+=hiddenLayer[i]*nnet_weights[weights_it++];
 }
if(!linout)
 {
  prediction = sigmoid(prediction);
 }

este código sólo funcionará con el parámetro del modelo skip = FALSE
Si no es así, o se utiliza un softmax - busque las diferencias en la función fpass()


los pesos (array nnet_weights) deben ser copiados desde el propio R después del entrenamiento

library(nnet)
trainedModel <- nnet(y = 1:10, x = matrix(runif(20),ncol=2), size=10)
nnet_weights <- trainedModel$wts
cat("double nnet_weights[] = {", paste(format(weights,digits=16,scientific=T), collapse=","), "};", file="D:/weights.txt") #сохранить  веса в файлик чтоб оттуда скопипастить в советник
 
¡О! Eso es algo. Un poco más de trabajo y puedes usarlo. ¡Gracias!
 

Otro pequeño artículo introductorio sobre el refuerzo, aunque el punto es

Sería interesante organizar una pequeña sesión de trabajo en equipo y de brainstorming sobre mql y compartir la experiencia.

https://proglib.io/p/trade-learning/

Трейдинг и машинное обучение с подкреплением
Трейдинг и машинное обучение с подкреплением
  • 2018.02.15
  • matyushkin
  • proglib.io
В статье рассмотрено, как машинное обучение с подкреплением может применяться для трейдинга финансовых рынков и криптовалютных бирж. Академическое сообщество Deep Learning в основном находится в стороне от финансовых рынков. В силу ли того, что у финансовой индустрии не лучшая репутация, что решаемые проблемы не кажутся слишком интересными для...
 

En mi opinión, el aprendizaje por refuerzo suele dar un modelo con un voladizo muy grande, y la validación cruzada no es la respuesta en este caso. Debe haber algunos mecanismos especiales dentro del propio modelo contra el sobreajuste.

Para los que no estén familiarizados con este tema, brevemente: en lugar de la evaluación habitual del modelo (precisión, r2, logloss, etc.), se crea una función de aptitud especial con su propia lógica de evaluación del modelo. Dicha función de aptitud puede, por ejemplo, calcular el beneficio de un modelo al comerciar, o el sharperatio. Y los parámetros del modelo se seleccionan mediante un algoritmo genético.

Es interesante, que el optimizador en MT4 y MT5 también funciona en el principio de aprendizaje con refuerzo - en cada barra (o incluso tick) el Asesor Experto recibe los valores actuales del precio y los indicadores, hace algunas decisiones, y la estimación final del Asesor Experto se considera como el resultado de la operación. Los parámetros del Asesor Experto se seleccionan por genética para aumentar la estimación.
A juzgar por los Asesores Expertos disponibles libremente para MT5, podemos ver claramente que este método de aprendizaje provoca muchos perdedores. Pero a veces los buenos EA también son buenos.

 
Dr. Trader:

En mi opinión, el aprendizaje por refuerzo suele dar un modelo con un voladizo muy grande, y la validación cruzada no es la respuesta en este caso. Debe haber algún mecanismo especial dentro del propio modelo contra el sobreajuste.

Para los que no estén familiarizados con este tema, brevemente: en lugar de la evaluación habitual del modelo (precisión, r2, logloss, etc.), se crea una función de aptitud especial con su propia lógica de evaluación del modelo. Dicha función de aptitud puede, por ejemplo, calcular el beneficio de un modelo al comerciar, o el sharperatio. Y los parámetros del modelo se seleccionan mediante un algoritmo genético.

Lo interesante es que el optimizador en MT4 y MT5 también funciona según el principio de aprendizaje con refuerzo - en cada barra (o incluso tick) el Asesor Experto recibe los valores actuales de los precios e indicadores, toma algunas decisiones, y la estimación final del Asesor Experto es el resultado de la negociación. Los parámetros del Asesor Experto se seleccionan por genética para aumentar la estimación.
A juzgar por los Asesores Expertos disponibles libremente para MT5, podemos ver claramente que este método de aprendizaje provoca muchos perdedores. Pero a veces los buenos EA también lo son.

Es una buena analogía con el optimizador, mi anterior bot era sobre eso pero es demasiado simple

Pero en general no lo es, RL si no se opone a la genética, destaca sus ventajas, por ejemplo, la posibilidad de trabajar en procesos no estacionarios. En particular, es posible utilizar funciones de aptitud no codiciosas, gracias a las cuales el modelo aprende constantemente mientras se ejecuta y da pasos aleatorios. Y como optimizador utilizamos el relleno NS (no genético).

Ahí es un poco más complicado, pero aún no he terminado de leer el libro.

Así que su afirmación sobre la genética, el optimizador y la RL es incorrecta.

 

*un momento de emoción y filosofía y todas esas cosas*

Imagina un día claro y soleado. Estás sentado en la hierba junto a un estanque, sopla una cálida brisa primaveral que deja ondas en el agua, se oye el sonido de los patos en algún lugar cercano. Los peces nadaban bajo el agua, a veces tocando la superficie con las aletas y haciendo círculos en el agua. Su vecina estaba recogiendo agua y su nieto lanzaba piedras al agua, persiguiendo ranas de un lado a otro. Al otro lado del estanque, un hombre lava su coche.

El precio es como las olas en el agua de toda la conmoción, pero también durante una tormenta. Podemos seguir las olas e intentar adivinar cuándo subirá o bajará el agua en un punto determinado, pero si no seguimos el entorno, nos equivocaremos la mayoría de las veces.

El valor del precio futuro no depende de los movimientos de precios pasados, sino de los procesos globales que causaron los movimientos de precios pasados y que causarán los nuevos.
Hay que vigilar no sólo las olas en el agua, sino también el viento, la trayectoria de los peces, el cubo del vecino, etc., entonces la naturaleza de las olas en el agua será clara y predecible.

En consecuencia, si se tiene información sobre todos los procesos globales que afectan al precio, se puede aprender a predecir y cualquier modelo sencillo del siglo anterior servirá.
El problema es que normalmente sólo hay un gráfico de precios y eso no es suficiente.

 

Aquí cómo conectar RL y NN

 

y un vid, hay una parte 2 más.

Ya está, no hago más spam, quien esté interesado puede leerlo.


 
Las redes neuronales de la MT son sencillas. Hay una biblioteca de Microsoft llamada CNTK. Está implementado para Python, C# y C++. Todo el análisis y el entrenamiento de la red se realiza en Python, mientras que C++ se utiliza para escribir una DLL que carga la red entrenada y realiza cálculos con ella. En mi opinión, esta es la mejor opción. La segunda opción, la conexión de Python con MT. He escrito una biblioteca sencilla para esto. Biblioteca. Lo conectamos y podemos utilizar todo lo disponible en Python. Y hay muchas cosas disponibles. Me pregunto si debería empezar a escribir sobre el aprendizaje automático en mi blog.
 
Grigoriy Chaunin:
Todo es sencillo con las redes neuronales en MT. Existe una biblioteca CNTK de Microsoft. Está implementado para Python, C# y C++. Todo el análisis y el entrenamiento de la red se realiza en Python, mientras que C++ se utiliza para escribir una DLL que carga la red entrenada y realiza cálculos con ella. En mi opinión, esta es la mejor opción. La segunda opción, la conexión de Python con MT. He escrito una biblioteca sencilla para esto. Biblioteca. Lo conectamos y podemos utilizar todo lo disponible en Python. Y hay muchas cosas disponibles. Me pregunto si debería empezar a escribir sobre el aprendizaje automático en mi blog.

sería interesante leer sobre las estrategias y los pensamientos/experiencias personales... para mí personalmente

porque la mayoría de las cosas que se escriben aquí son sólo tonterías sobre la revisión de un montón de bibliotecas y sobre lo que es mejor escribir... es una epidemia, y todo se desperdicia.

Aunque la idea básica fue expresada por fxsaber hace mucho tiempo - con el mismo enfoque el tema bien podría cerrarse, porque originalmente está mal