Discusión sobre el artículo "Desarrollando los Asesores Expertos multimódulo"

 

Artículo publicado Desarrollando los Asesores Expertos multimódulo:

El lenguaje de programación MQL permite implementar el concepto del diseño modular de las estrategias comerciales. En este artículo, se muestra el ejemplo del desarrollo del Asesor Experto multimódulo compuesto de los módulos de archivos compilados separadamente.

Después de eso, compilamos todos los archivos y empezamos el testeo del proyecto multimódulo.

Vídeo 2. Compilación de archivos generados del proyecto "test"
  

Para crear el mismo proyecto manualmente, necesitaremos más de una hora, y es evidente que habrá que empezar con el módulo principal. Después de definir los módulos externos que luego se podrá incluir en el proyecto, procedemos al diseño y programación. Lo importante es controlar los valores de los datos de salida de los módulos auxiliares para el módulo principal. Puesto que los módulos son los indicadores, y los búferes de indicadores contienen los valores exclusivamente del tipo real, entonces hay que prever la conversión de las variables del tipo real al tipo correspondiente al algoritmo en el módulo principal.

Autor: Sergey Pavlov

 
Qué tesis tan insólita la de "El módulo auxiliar (externo) es un indicador", y ¿probó el autor el rendimiento y, sobre todo, el consumo de recursos de semejante diseño?
 

La multimodularidad de un sistema de negociación viene determinada principalmente por la naturaleza del proceso (en el caso de los mercados financieros, el movimiento de los precios es un proceso no estacionario).

Y el modelado de un proceso tan complejo (ya que el desarrollo de EA es siempre un modelado de procesos) es imposible con la ayuda de un único algoritmo de entrada, incluso muy complejo. Para acercarse al proceso en términos de precisión, necesitamos un conjunto de algoritmos (módulos), cada uno de los cuales es un modelo independiente.

 
Aleksandr Masterskikh:

La multimodularidad del sistema de negociación viene determinada principalmente por la naturaleza del proceso (en el caso de los mercados financieros, el movimiento de los precios es un proceso no estacionario).

Y el modelado de un proceso tan complejo (ya que el desarrollo de EA es siempre un modelado de procesos) es imposible con la ayuda de un único algoritmo de entrada, incluso muy complejo. Para acercarse al proceso en términos de precisión, necesitamos un conjunto de algoritmos (módulos), cada uno de los cuales es un modelo independiente.

Sí, sí, creo que este enfoque es utilizado por la mayoría de la gente - que los implementan a través de funciones y clases, en caso extremo que acaba de conectar un trozo de código de otro archivo. Sólo me pregunto cuál es la ventaja del procesamiento de datos en indicadores en comparación con los enfoques descritos anteriormente.

[Eliminado]  
¿modularidad por modularidad?
¿poner trall y lossless en 2 módulos separados diferentes? ¿en serio?
el autor probablemente nunca ha estado involucrado en la optimización, especialmente en Mt4.
La mayoría de los autores escriben usando tales métodos, las funciones más simples se ponen en un módulo separado llamado docenas de veces por tick.
Tales soluciones aumentan el tiempo de optimización de decenas a miles de veces.
 
Aleksey Vyazmikin:
¿Qué inusual tesis "Módulo auxiliar (externo) es un indicador", y el autor ha probado el rendimiento y sobre todo el consumo de recursos de tal diseño?

El artículo nació después de enfrentarme a un problema con el rendimiento de un indicador. Consumía recursos y tiempo de prueba. Y como se utilizaba para generar señales de trading, en su lugar hice un módulo externo (un indicador de señales), que no dibujaba nada. Como resultado, el Asesor Experto con el módulo externo "voló", aunque todos los cálculos se mantuvieron en su totalidad.

Estoy de acuerdo contigo en que cualquier tecnología tiene sus gastos generales. Aquí hay que llegar a un compromiso y elegir lo que es más importante. A veces es más importante ocultar el algoritmo que el rendimiento. Aunque el rendimiento disminuye con la programación modular, no es crítico. En la figura, he "colgado" todos los módulos externos en un gráfico:


A continuación, comprobé la carga del propio Asesor Experto: en el modo de funcionamiento sin y con módulos externos. El resultado fue satisfactorio:


Luego lo ejecuté en el probador de estrategias.

Sin módulos externos:

2018.03.26 06:32:23.684 Core 1  EURUSD,M1: 2378530 ticks, 24349 bars generated. Environment synchronized in 0:00:00.140. Test passed in 0:00:07.769 (including ticks preprocessing 0:00:00.171).


Y con módulos externos:

2018.03.26 06:33:49.859 Core 1  EURUSD,M1: 2378530 ticks, 24349 bars generated. Environment synchronized in 0:00:00.047. Test passed in 0:00:06.349.

Como puedes ver, con módulos externos la prueba terminó más rápido.

El propósito del artículo es mostrar cómo puedes ocultar tus algoritmos usándolos en los códigos de otras personas.

 
Nikolay Khrushchev:
¿modularidad por modularidad?
sacar trall y no-loss en 2 módulos distintos separados? ¿en serio?
...

El artículo muestra la tecnología de la programación modular: cualquier función o grupo de funciones necesarias pueden ocultarse en un módulo o módulos externos.

 
Sergey Pavlov:

El artículo nació después de que me enfrentara a un problema con el rendimiento de un indicador. Estaba consumiendo recursos y tiempo de pruebas. Y puesto que se utilizaba para generar señales de trading, en su lugar hice un módulo externo (indicador de señal), que no dibujaba nada. Como resultado, el Asesor Experto con el módulo externo "voló", aunque todos los cálculos permanecieron completos.

Estoy de acuerdo contigo en que cualquier tecnología tiene sus gastos generales. Aquí hay que llegar a un compromiso y elegir lo que es más importante. A veces es más importante ocultar el algoritmo que el rendimiento. Aunque el rendimiento disminuye con la programación modular, no es crítico. En la figura, he "colgado" todos los módulos externos en un gráfico:


A continuación, he comprobado la carga del propio Asesor Experto: en el modo de funcionamiento sin y con módulos externos. El resultado es satisfactorio:


Luego lo ejecuté en el probador de estrategias.

Sin módulos externos:


Y con módulos externos:

Como puedes ver, las pruebas terminaron más rápido con módulos externos.

El propósito del artículo es mostrar cómo puedes ocultar tus algoritmos utilizándolos en códigos ajenos.

Gracias por tu detallada respuesta. Como posibilidad de ocultar una parte del código, tal vez sea una opción. Sin embargo, que necesita un módulo de este tipo, es decir, no se puede vender a través del mercado, en freelancing la gente va a exigir el código fuente, sólo queda una opción - para uso público en Internet, y aquí está prohibido publicar archivos compilados.

La capacidad de acelerar los cálculos debido al indicador utilizado - un tema familiar, es realmente conveniente a veces y le permite deshacerse de los ciclos en el Asesor Experto. Estoy empezando a trabajar en un indicador de este tipo.

 
Aleksey Vyazmikin:

Sí, sí, este enfoque, creo, es utilizado por la mayoría de la gente - lo implementan a través de funciones y clases, en caso extremo, simplemente conectan un trozo de código de otro archivo. Sólo me pregunto cuál es la ventaja del procesamiento de datos en indicadores en comparación con los enfoques descritos anteriormente.

Es importante distinguir entre

- modularidad de un programa (cuando un modelo sencillo se divide en módulos)

- y modularidad de un modelo complejo (cuando cada módulo es un modelo independiente).


Cualquier indicador tradicional es un modelo simple, y se necesita un modelo complejo,

porque un modelo simple no basta para obtener una representación suficientemente

representación del proceso.

 
Aleksandr Masterskikh:

Es importante distinguir entre ambos:

- modularidad del programa (cuando un modelo sencillo se descompone en módulos)

- y modularidad de un modelo complejo (cuando cada módulo es un modelo independiente).


Cualquier indicador tradicional es un modelo simple, pero necesitamos un modelo complejo,

porque un modelo simple no basta para obtener una precisión suficiente

del proceso.

Digamos que no sé lo que es la modularidad de un modelo complejo, entonces a partir de tu comentario mis conocimientos no han aumentado.

Pon un ejemplo de modelo complejo integrado en el indicador.

 

Como no profesional, lo encontré informativo. Es un buen artículo para principiantes.

Pero sobre la modularidad, creo que el ejemplo no es completo. Me parece que si en el mismo ejemplo, cada función del módulo principal está escrito en un archivo separado, y luego con la ayuda de la compilación condicional y inludes combinado en un archivo - entonces esto es la escritura modular. En este caso, cada pieza separada puede ser reescrita sin afectar al código principal.

Como ejemplo, en lugar del código

 if(on_lot)
     { // Si hay un módulo adicional
      double buffer_m1[];
      ArraySetAsSeries(buffer_m1,true);
      if(CopyBuffer(handle_m1,0,0,1,buffer_m1)<0) return;
      lot=buffer_m1[0];
     }

código:

 if(on_lot)
     { 
        LotCulcFuntion(lot);//Esta función se implementa en un archivo separado.
     }

P.D. Los nombres de los indicadores modulares en el archivo principal no coinciden con los nombres de los archivos. En el módulo principal es necesario añadir "_ind". Por ejemplo, debería ser: "Módulo_formación_modulo_Filtro_ind". y no " Módulo_formación_módulo_Filtro".