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

 
Anaxagor:

Parece un cumplido viniendo del fabricante de este malentendido.

Bueno, úsalo mientras sea amable :-) No lo siento..... Y el hecho de que no hayas podido entender el artículo, me alegra incluso. Cuanto menos somos, más somos :-)

 

Hola Maxim,

Si quiero añadir los precios máximos y mínimos, entonces sólo tengo que cambiar SOLO la función calcsignal () . ¿Estoy en lo cierto?

¿Es correcto el siguiente código? ¿O tengo que hacer algún otro cambio en el código del EA o de la biblioteca?

Además, ¿puede dar un código de indicador en este código?

void calcSignal ()

{

sig1 = 0;

for (int i = 0; i <ArraySize (ag1.agent); i ++)

{

CopyClose (_Symbol, 0.0, 100, ag1.agent [i] .inpVector);

normalizeArrays (ag1.agent [i] .inpVector);

}

for (int i = 0; i <ArraySize (ag1.agent); i ++)

{

CopyHigh (_Symbol, 0.0, 100, ag1.agent [i] .inpVector);

normalizeArrays (ag1.agent [i] .inpVector);

}

for (int i = 0; i <ArraySize (ag1.agent); i ++)

{

CopyLow (_Symbol, 0.0, 100, ag1.agent [i] .inpVector);

normalizeArrays (ag1.agent [i] .inpVector);

}

sig1 = ag1.getTradeSignal ();

}

 
Mmmm... programación triste
 
Maxim Dmitrievsky:
mde ... programación triste

¿Quiere decir que el código anterior no es correcto o se refiere a la implementación del código GMDH? El código de GMGH era sólo una implementación aproximada que encontré rápidamente. Pero no puedo mejorarlo por ahora. Creo que puede haber mejores formas de codificarla que también probaré.

En su código fuente actual, hay muchos agentes o variables con nombres similares y múltiples operadores de puntos como " ag1.agent [i] .inpVector " lo que es una confusión para mí hasta que reviso todo el código...

 
FxTrader562:

¿Quiere decir que el código anterior no es correcto o se refiere a la implementación del código GMDH? El código de GMGH era sólo una implementación aproximada que encontré rápidamente... Pero creo que puede haber mejores formas de hacerlo... pero no lo hago por ahora

En su código fuente actual, hay muchos agentes o variables con nombres similares y múltiples operadores de puntos como " ag1.agent [i] .inpVector " lo que es una confusión para mí hasta que reviso todo el código...

Ya lo he explicado antes. Tienes 100 predictores, así que necesitas copiar en este array 25 precios de cierre diferentes, 25 de apertura diferentes, 25 de alta, 25 de baja. Total 100

o hacer 4 predictores arrayy, y copiar 1 cierre, 1 apertura,..... o cualquier otro valor de indicadores diferentes

O esperar un artículo, porque las comunicaciones del foro llevan demasiado tiempo (para mí)

Acerca de gdmh - hay un montón de diferentes implementaciones, no hay problemas con él. Pero para mi tarea necesito una investigación adicional

 
Maxim Dmitrievsky:

Ya lo he explicado antes. Tienes 100 predictores, así que necesitas copiar en este array 25 precios de cierre diferentes, 25 de apertura diferentes, 25 de alta, 25 de baja. Total 100

o hacer 4 predictores arrayy, y copiar 1 cierre, 1 apertura,..... o cualquier otro valor de indicadores diferentes

O esperar un artículo, porque las comunicaciones del foro llevan demasiado tiempo (para mí)

Acerca de gdmh - hay un montón de diferentes implementaciones, no hay problemas con él. Pero para mi tarea necesito una investigación adicional

Sí, lo entiendo.

Además, tengo su código fuente y, por lo tanto, me llevará algún tiempo entenderlo y cambiarlo ya que no hay muchos comentarios en él. Además, no soy un programador de nivel experto. Así que estaba tratando de acelerar el proceso con su ayuda :))

De todos modos, esperaré su artículo con una explicación detallada.

Sí, con respecto a GMDH como he mencionado antes hay múltiples enfoques y múltiples fórmulas y por lo tanto, en consecuencia, usted tiene que elegir uno que es aplicable para la aplicación del RDF. Simplemente traduje o convertí la fórmula general de GMDH del enlace de wikipedia al código MQL5 que me proporcionaste anteriormente.

Además, he dado suficientes explicaciones dentro del código para que sea comprensible. Traté de buscar en múltiples códigos de python ya antes de escribir el código MQL5, pero nada satisfizo mi necesidad. Por eso escribí la forma más sencilla de GMDH utilizando una función y una declaración de caso de conmutación.

 
FxTrader562:

Sí, lo entiendo.

Además, tengo su código fuente y, por lo tanto, me llevará algún tiempo entenderlo y cambiarlo ya que no hay muchos comentarios en él. Además, no soy un programador de nivel experto. Así que estaba tratando de acelerar el proceso con su ayuda :))

De todos modos, esperaré su artículo con una explicación detallada.

Sí, con respecto a GMDH como he mencionado antes hay múltiples enfoques y múltiples fórmulas y por lo tanto, en consecuencia, usted tiene que elegir uno que es aplicable para la aplicación del RDF. Simplemente traduje o convertí la fórmula general de GMDH del enlace de wikipedia al código MQL5 que me proporcionaste anteriormente.

Además, he dado suficientes explicaciones dentro del código para que sea comprensible. Traté de buscar en múltiples códigos de python ya antes de escribir el código MQL5, pero nada satisfizo mi necesidad. Por eso escribí la forma más sencilla de GMDH utilizando una función y una declaración de caso de conmutación.

Se describe un caso lineal. Por ejemplo, estamos buscando los mejores miembros para la línea 1, 2, etc. Y luego añadir los mejores miembros a una (nueva) variable de la fórmula. En el caso del RDF no podemos hacerlo, ya que se trata de un modelo no lineal, por lo que debemos añadir todas las líneas como variables independientes a las entradas, en cada vuelta de selección

 
Maxim Dmitrievsky:

Se describe un caso lineal. Por ejemplo, estamos buscando los mejores miembros para la línea 1, 2, etc. Y luego añadir los mejores miembros a una (nueva) variable de la fórmula. En el caso del RDF no podemos hacerlo, ya que se trata de un modelo no lineal, por lo que debemos añadir todas las líneas como variables independientes a las entradas, en cada vuelta de selección

¿Puede darme un código de ejemplo exactamente donde está tratando de implementar para que pueda ayudarle mejor?

¿Te refieres a pesos como w1,w2, w3....? Estas son las cosas que deben ser calculadas y almacenadas dentro de RDF durante el entrenamiento cuando alimentamos x1.w1,x2.w2,x3.w3.... como entradas individuales.

Hay que tener en cuenta que, en realidad, al considerar las funciones, no existen las funciones lineales y no lineales, porque siempre se puede descomponer una función no lineal en infinitas funciones lineales.Así que no me planteo complicar las cosas sin motivo. Por eso estamos utilizando pequeños trozos de funciones lineales como entrada y podemos ampliarlo a cualquier número si es necesario. Pero no puedo decir mucho sobre la parte de codificación por ahora.

Por favor, facilítame el código del RDF en el que estás atascado para que pueda entenderlo mejor.

O refiriéndote a mi código puedes explicar qué más buscas.Porque a mi entender he convertido la fórmula GMDH en código. Por lo tanto, si se requiere, entonces podemos aportar aleatoriedad o simplemente ampliar los componentes de la función base a cualquier número y elegir al azar.

 
FxTrader562:

¿Puede darme un código de ejemplo exactamente donde está tratando de implementar para que pueda ayudarle mejor?

¿Te refieres a pesos como w1,w2, w3....? Estas son las cosas que deben ser calculadas y almacenadas dentro de RDF durante el entrenamiento cuando alimentamos x1.w1,x2.w2,x3.w3.... como entradas individuales.

Hay que tener en cuenta que, en realidad, al considerar las funciones, no existen las funciones lineales y no lineales, porque siempre se puede descomponer una función no lineal en infinitas funciones lineales.Así que no me planteo complicar las cosas sin motivo. Por eso estamos utilizando pequeños trozos de funciones lineales como entrada y podemos ampliarlo a cualquier número si es necesario. Pero no puedo decir mucho sobre la parte de codificación por ahora.

Por favor, facilítame el código del RDF en el que estás atascado para que pueda entenderlo mejor.

O refiriéndote a mi código puedes explicar qué más buscas.Porque a mi entender he convertido la fórmula GMDH en código. Así que si se requiere, entonces podemos traer la aleatoriedad a ella o simplemente ampliar los componentes de la función base a cualquier número y elegir al azar.

Para encontrar los coeficientes lineales debemos utilizar la regresión lineal, pero también podemos hacerlo directamente con la RF. Ahora estoy leyendo un interesante libro sobre el tema

Este libro desarrolla diferentes polinomios en forma de redes estructuradas en forma de árbol, incluyendo polinomios de red algebraicos, polinomios de red kernel, polinomios de red ortogonales, polinomios de red trigonométricos, polinomios de red racionales y polinomios de red dinámicos.
 
Maxim Dmitrievsky:

Para encontrar los coeficientes lineales debemos utilizar la regresión lineal, pero también podemos hacerlo directamente con la RF. Ahora estoy leyendo un interesante libro sobre el tema.

Ok, si quieres una implementación exacta de GMDH y necesitamos ampliar mi código con un valor mayor de m, entonces puedo hacerlo. Pero lo que quiero que hagas es que primero lo implementes con el valor m de 3 y lo pruebes en el marco de tiempo M1, porque los precios de cierre de las velas en el marco de tiempo M1 son muy pequeños y por lo tanto, dividirlo en 3 partes es suficiente para lograr nuestro objetivo.

Así que de esta manera, si se puede implementar GMDH y funciona de alguna manera en el marco de tiempo M1, entonces para los marcos de tiempo más altos podemos ampliar el bucle for a valores más grandes de m como 10 o 15, etc.

Por cierto, en tu actual implementación de código ¿has utilizado el truco del kernel cuando usaste el siguiente código?

#define _kernel(ker,degree) (cos(MathPow(ker,degree))

He investigado por completo, pero no he podido encontrar qué función del kernel has utilizado en tu código porque quería probar diferentes kernels antes de implementar mi algo:

http://crsouza.com/2010/03/17/kernel-functions-for-machine-learning-applications/

¿Puede proporcionarme alguna referencia sobre qué función del núcleo es ésta o es sólo su fórmula?

Además, he implementado con éxito el algoritmo de simulación de velas a su código actual. Pero puede funcionar sólo después de un período de una semana de simulaciones. Así que sólo quería confirmar algunas cosas antes de empezar las simulaciones.

1.¿Existe un límite en el número de modelos que puedo utilizar? ¿Puedo utilizar 1 millón de modelos?

2.¿Existe un límite en el número de agentes que puedo utilizar? ¿Puedo utilizar 1000 agentes?

3.Si los datos entrenados son demasiado grandes, ¿se ralentizará la toma de decisiones comerciales? Me refiero a que si el archivo ".rl" es demasiado grande, entonces ¿cuánto tiempo de retraso en la ejecución de la operación podemos esperar aproximadamente? ¿Has hecho algún cálculo al respecto en términos de número de iteraciones por segundo o de bucle for, etc.?

4.Básicamente, estoy utilizando sus modelos y agentes para crear velas aleatorias durante el entrenamiento que se almacenarán en archivos ".rl" para el comercio en VIVO. Los archivos ".rl" de esta versión son similares a los archivos "Mtrees" de su versión anterior.

Tengo previsto realizar una simulación de entre 10 y 100 millones de velas en total, lo que equivale a entre 280 y 2800 años de optimización. Pero antes de ejecutar el entrenamiento quería comprobar varias cosas sobre el código y la rapidez de ejecución, etc.

Cuando tenga tiempo libre, tenga la amabilidad de revisar mis preguntas anteriores y proporcionarme algunas respuestas que puedan ayudarme a calcular más....