Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 9

 
gyfto:

Se podría escribir if((b-a)*(c-a)*(d-a)>0), pero no necesariamente más rápido. El AND lógico es una multiplicación binaria, es sólo otra notación de la misma expresión, la única diferencia es el tamaño de los tipos de variables. a>b es una variable booleana, 4 bytes, y b-a, si son dobles, la diferencia será el doble (8 bytes), y esta multiplicación es al menos 2 veces más larga.


Un consejo inestimable.

Déjeme explicarle. Puede reescribir su expresión como if((a>b)*(a>c)*(a>d)==1), porque las expresiones entre paréntesis toman los valores 0 o 1 (y éstos, a su vez, se definen en define en el precompilador como falso y verdadero).

Gracias - Creo que esto funcionará más rápido
 

Chicos, por favor, aconsejadme.

En el modo de prueba de estrategia, no puedo cambiar los números en las propiedades de optimización:

Saldo mínimo 200

Beneficio máximo 10000

etc.

¿Cuál es el problema?

 

¿Puedes decirme qué valores pueden devolver init, start y deinit y qué significan?

He intentado buscar en el foro pero no lo he encontrado. No hay esta información en el Manual. Probablemente, es la información confidencial. )))(Texto emocional borrado... )

Como estoy adivinando - "0" - todo fue bien... Pero, como su tipo es interger, aparentemente puede haber más de 2 valores...

 
Chiripaha:

¿Puedes decirme qué valores pueden devolver init, start y deinit y qué significan?

He intentado buscar en el foro pero no lo he encontrado. No hay esta información en el Manual. Probablemente, es la información confidencial. )))(Texto emocional borrado... )

Como estoy adivinando - "0" - todo fue bien... Pero, como su tipo es interger, aparentemente puede haber más de 2 valores...

Esto se ha debatido recientemente. Referencia:

En MQL4 hay 3 funciones con nombres predefinidos:

init() - función llamada durante la inicialización del módulo. Si falta, no se llama a ninguna función durante la inicialización.

start() - la función principal. Se llama a los Asesores Expertos después de la recepción del siguiente tick. En el caso de los indicadores personalizados, se llama durante el recálculo después de que el indicador se adjunte al gráfico, cuando se abre el terminal del cliente (si el indicador se adjunta al gráfico), y también después de la llegada del siguiente tick. En los scripts se ejecuta inmediatamente después de adjuntar al gráfico y de la inicialización. Si no hay una función start() en el módulo, este módulo (Asesor Experto, script o indicador personalizado) no puede ser lanzado.

deinit() - la función que se llama durante la desinicialización del módulo. Si está ausente, no se llama a ninguna función durante la desinicialización.

Las funciones predefinidas pueden tener parámetros. Sin embargo, cuando estas funciones son llamadas por el terminal cliente, no se pasarán parámetros desde el exterior, sino que se utilizarán los valores por defecto.
Las funciones start(), init() y deinit() pueden ser llamadas desde cualquier parte del módulo según las reglas generales, junto con otras funciones.

No es deseable llamar a start() o a trade desde la función init(), porque en el momento de la inicialización del módulo los datos del gráfico, los precios del mercado, etc. pueden no estar listos. Las funciones init() y deinit() deben terminar su trabajo lo más rápido posible y en ningún caso quedarse atascadas tratando de iniciar la operación completa antes de que se llame a la función start().

Para las llamadas al sistema, el retorno no importa.
 

Bien, entonces intentaré aclarar la pregunta.

Por ejemplo, quiero comprobar algunos parámetros en la etapa de inicialización y dependiendo del resultado: pasar a la etapa de Inicio o no.

Si he entendido bien tu comentario, Vadim, entonces el resultado de la inicialización no importará (en este caso) y se iniciará la función Start?

 

entonces hay que llamar al init desde el principio.

¿Por qué tienes que pasar por todo este problema? Las variables globales aún no han sido canceladas...

 
Chiripaha:

Bien, entonces intentaré aclarar la pregunta.

Por ejemplo, quiero comprobar algunos parámetros en la etapa de inicialización y dependiendo del resultado: pasar a la etapa de Inicio o no.

Si he entendido bien tu comentario, Vadim, el resultado de la inicialización no importaría (en este caso) y se iniciaría la función Start?

Rustam respondió:

PREGUNTAS FRECUENTES:

entonces tienes que llamar al init desde el principio tú mismo.

¿Por qué tanta complicación? Nadie canceló las variables globales todavía...

Se declaran las variables globales y se inicializan según sea necesario. Todas las funciones del mismo módulo pueden ver las variables globales.
 
Zhunko:

Rustam respondió:

Se declaran las variables de forma global y se inicializan según sea necesario. Todas las funciones de un módulo pueden ver las variables globales.

Sí, a menos que se trate de una comprobación para restringir el acceso al programa, por ejemplo.
 
FAQ:

entonces hay que llamar al init desde el principio.

¿Por qué tienes que pasar por todo este problema? Las variables globales aún no han sido canceladas...


¿No sería más fácil comprobarlo con una bandera? Por supuesto...
 
hoz:

¿No sería más fácil comprobarlo con una bandera? Ciertamente global...

No, no es más fácil. Porque si había una bandera negativa (o una variable global), la comprobación todavía tiene que ser ejecutada. Tanto la bandera como la variable global sólo funcionarán en el caso positivo. Y algunas funciones siguen siendo necesarias al inicio (aunque, aquí es diferente).

Se mire como se mire, se empieza de todas formas: o bien a través de rehacer el "inite", que es igual de molesto, o bien a través de rehacer las funciones necesarias.

Razón de la queja: