Preguntas sobre el MQL5 Wizard y la biblioteca estándar de clases comerciales - página 6

 
uncleVic:
El maestro y las clases para él se movieron hasta ahora en el "modo de mantenimiento". Para la creación de las clases multivariantes más simples ya están adaptados (no está listo ahora, pero más tarde voy a poner aquí un ejemplo).

Hice una clase multidivisa basada en la generada por el asistente. Pero tuve que corregir la clase de EXPERTOS.

Al principio de la misma en el método INIT() hay una comprobación del símbolo de trabajo y en consecuencia no hay multidivisa. El cheque fue retirado y todo fue bien. Mira el tiempo - la idea al menos que?

if(symbol!=Symbol() || period!=Period()) 

на

 if(period!=Period())

Archivos adjuntos:
Master01_ML.mq5  14 kb
 

¡Hola Moderador!

Tengo una pregunta de este tipo:

MQL5 Wizard tiene 20 módulos de señales que realizan análisis de divergencia, sobrecompra, sobreventa, etc. ¿Pueden aconsejar si es posible tomar prestado algún módulo de señales del MQL5 Wizard para realizar el análisis de las mismas, pero a partir de un indicador personalizado de diseño propio y qué se debe hacer para ello? ¿Requerirá mucho trabajo (rediseño) o bastará con cambiar algo del módulo (su copia) de la entrega estándar?

Gracias de antemano.

Переход на новые рельсы: пользовательские индикаторы в MQL5
Переход на новые рельсы: пользовательские индикаторы в MQL5
  • 2009.11.23
  • Андрей
  • www.mql5.com
Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.
 

ForexMoneyMaker:

¿Sabéis si es posible tomar prestado algún módulo de señales de este tipo del MQL5 Wizard para realizar el análisis de las mismas, pero desde un indicador personalizado de diseño propio, y qué hay que hacer para ello? ¿Requerirá mucho trabajo (alteración), o bastará con cambiar algo en el módulo (su copia) de la entrega estándar?

¡Buena pregunta! Y aquí está la razón: realmente es posible, con mínimas modificaciones de los módulos estándar, crear un nuevo módulo, simplemente insertando otro indicador en lugar de uno. No sé cuándo podremos escribir un artículo sobre este tema nosotros mismos, así que sugiero:

Quién tiene conocimiento y el deseo de escribir un artículo "Cómo crear su propio sobre la base del módulo estándar de señales" - escríbeme en el mensaje personal.

 
Erm955:

Hice una clase multidivisa basada en la generada por el asistente. Pero tuve que corregir la clase de EXPERTOS.

Al principio de la misma en el método INIT() hay una comprobación del símbolo de trabajo y en consecuencia no hay multidivisa. El cheque fue retirado y todo fue bien. Mira el tiempo - la idea al menos que?

if(symbol!=Symbol() || period!=Period()) 

на

 if(period!=Period())

La idea es la misma, pero:

1. No es bueno cambiar la clase CExpert. Es bueno heredar de él sobrescribiendo el método Init(...).

2) No tienes que modificar la clase CExpert. Tienes que escribirlo:

...
   if(!ExtExpert_EG.Init(Symbol(),PERIOD_M10,Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert_EG.Deinit();
      return(-1);
     }
   ExtExpert_EG.Symbol("NZDUSD");
...

Por ahora...

 
ForexMoneyMaker:

¡Hola Moderador!

Tengo una pregunta de este tipo:

MQL5 Wizard tiene 20 módulos de señales que realizan análisis de divergencia, sobrecompra, sobreventa, etc. ¿Pueden aconsejar si es posible tomar prestado algún módulo de señales del MQL5 Wizard para realizar el análisis de las mismas, pero a partir de un indicador personalizado de diseño propio y qué se debe hacer para ello? ¿Requerirá mucho trabajo (rediseño) o bastará con cambiar algo del módulo (su copia) de la entrega estándar?

Gracias de antemano.


Echa un vistazo al foro en inglés aquí
 
uncleVic:

La idea es la misma, pero:

1. No es bueno modificar la clase CExpert. Es bueno heredar de él anulando el método Init(...).

2. No es necesario modificar la clase CExpert. Tienes que escribirlo:

Hasta ahora...

Debe redefinir el método Init() y excluir de él la comprobación del símbolo de trabajo. Pero la p. 2 no encaja, ya que el método Init(), entre otras cosas, contiene una comprobación del número de dígitos Digits y si el símbolo de trabajo contiene 5 dígitos, y el que se está comprobando contiene 3 dígitos, habrá un error con paradas/ganancias. He heredado y anulado. Ahora todo funciona.

Por supuesto, no soy un gran experto en OOP, pero resulta que con el fin de configurar de forma flexible el programa para un número diferente de símbolos probados, usted tiene que llenar, por ejemplo, 21 piezas de código (todos los símbolos), y luego por el método de elección de los parámetros de entrada para pasar este o aquel fragmento de código. Hice lo mismo sin OOP, pero todas las manijas y los valores de los indicadores en el init fueron escritos en arrays dinámicos, y luego OnTick ya utilizó estos arrays. Entonces, ¿aún no he visto ninguna ventaja de la OOP?

P S. No lo escribí con precisión. Tengo que meter tantas piezas de código, cuántos caracteres a la vez voy a probar. Tal vez hay una manera de conectar dinámicamente los datos (manejadores y valores del indicador) durante la configuración para el número de caracteres que trabajan simultáneamente. El problema es que todo esto debe ser conectado en Init y utilizado en OnTic/OnTimer.

Archivos adjuntos:
Master02_ML.mq5  20 kb
 
Erm955:

Es necesario redefinir el método Init(), excluyendo la comprobación del símbolo de trabajo. Y el p.2 no encaja, porque el método Init(), entre otras cosas, comprueba el número de dígitos Digits, y si el símbolo de trabajo tiene 5 dígitos, y el que se está probando tiene 3 dígitos, entonces habrá un error con paradas/ganancias. He heredado y anulado. Ahora todo funciona.

Por supuesto, no soy un gran experto en OOP, pero resulta que con el fin de configurar de forma flexible el programa para un número diferente de símbolos probados, usted tiene que llenar, por ejemplo, 21 piezas de código (todos los símbolos), y luego por el método de elección de los parámetros de entrada para pasar esta o aquella sección de código. Hice lo mismo sin OOP, pero todas las manijas y los valores de los indicadores en el init fueron escritos en arrays dinámicos, y luego OnTick ya utilizó estos arrays. Entonces, ¿todavía no he visto ninguna ventaja de la OOP?

P S. No lo escribí con precisión. Tengo que meter tantas piezas de código, cuántos caracteres a la vez voy a probar. Tal vez hay una manera de conectar dinámicamente los datos (manejadores y valores de los indicadores) durante la configuración para el número de caracteres que trabajan simultáneamente. El problema es que todo esto debe ser conectado en Init y utilizado en OnTic/OnTimer.

Es así. Por cierto, gracias por el consejo sobre el punto 2. Añadiré el control y cambiaré el número de caracteres.
 
uncleVic:
Así es. Por cierto, gracias por el consejo sobre el punto 2. Añadiré un control y cambio de dígitos.

Mierda! Acabo de configurarlo todo y cuando actualicé a la compilación 485, el error apareció de nuevo:

2011.08.08 17:13:04 El probador del núcleo 1 se ha detenido por un error crítico de OnInit
2011.08.08 17:13:04 Core 1 2010.01.01 00:00:00 OnInit: error al inicializar los indicadores
2011.08.08 17:13:04 Core 1 2010.01.01 00:00:00 CExpert::InitIndicators: error al inicializar los indicadores del objeto dinero
2011.08.08 17:13:04 Core 1 2010.01.01 00:00:00 CExpertBase::InitIndicators: los parámetros de ajuste no se comprueban
2011.08.08 17:13:04 Núcleo 1 2010.01.01 00:00:00 CExpertBase::SetOtherSeries: el cambio de series temporales está prohibido
2011.08.08 17:13:04 Core 1 2010.01.01 00:00:00 CExpertBase::SetPriceSeries: se prohíbe el cambio de series temporales
2011.08.08 17:13:04 Core 1 EURUSD,H4: la historia comienza desde 2009.01.02 04:00
2011.08.08 17:13:04 Core 1 EURUSD,H4: caché del historial reservado para 4692 barras estimadas

Archivos adjuntos:
Master02_ML.mq5  20 kb
 
Erm955:

¡Mierda! Acabo de configurarlo todo y cuando he actualizado a 485 ha vuelto a aparecer el error:

¿Se han actualizado los agentes? ¿Se ha recompilado el EA en la nueva versión?
 
Rosh:
¿Se han actualizado los agentes? ¿Se ha recompilado el EA en la nueva versión?

Eso es todo, ¡recompilé!

Razón de la queja: