Secuencia de ejecución de Init() y DeInit() - página 13

 
Andrey Dik:

...

Varias personas ya han pedido un ejemplo específico de una tarea que es problemática dentro del paradigma de ejecución de indicadores en MT5. ¿Habrá o no habrá un ejemplo claro, no sacado de la nada?

Un indicador sí tiene primero inicial y luego deinit. Pero cuando se cambia el marco temporal, se crea la segunda instancia del indicador, y su init puede ejecutarse antes que el deinit de la instancia anterior (no iniciada).

El ejemplo más obvio - el guardado de los parámetros del usuario al cambiar el marco temporal - guardamos los parámetros en el deinit, los leemos en el init. Si el init de la nueva instancia se activa antes del deinit de la instancia anterior, los parámetros no se guardarán.

Prácticamente, el deinit de la instancia eliminada se dispara en la mayoría de los casos antes del init de la nueva instancia, pero si se cambia muy rápido el marco temporal o se cargan datos, entonces se produce un fallo.

 
Slawa:

Y ahora imagina que no hay una sola cola de eventos, sino una cola por cada símbolo-período. Hay tantos períodos de símbolos como colas.

Ahora sugiera el orden en que se manejan las colas.

En mi opinión, la cola debería estar vinculada a un gráfico. Ya sea que el usuario cambie un símbolo, TF o simplemente lo cierre, todos los indicadores deben estar completamente terminados, entonces los EAs, con el procesamiento de todos los comandos en las deiniciones (lo que hacen, escribiendo en variables globales, en archivos, borrando objetos, interactuando con DLL, enviando algo a Internet) y después de la terminación y la descarga de la memoria - ejecutan nuevas instancias del nuevo TF o símbolo, sin saber nada sobre el anterior, pero siendo capaces de leer correctamente la información guardada el anterior.

Probablemente será un poco más lento, pero será lo correcto.

Estoy a favor de que los programas funcionen correctamente, no rápido y mal.

Si el inicio de la nueva instancia se lanza antes, entonces resulta que deinit no es necesario en absoluto e incluso es perjudicial porque engañará a los programadores porque esperan que guarden algo y luego lo cuenten. Si lo dejamos como está, entonces añadimos a la ayuda - que los resultados de esta función no serán conocidos por la siguiente Los resultados de esta función no serán conocidos por la siguiente instancia, es decir, nadie hará nada en esta función. Y mejor aún - suprimirlo, si el orden natural de los acontecimientos es muy difícil de hacer y le requerirá cientos de horas de trabajo.

 
Slawa:

Si el interruptor del marco temporal baja, entonces primero OnInit en el marco temporal inferior (nuevo) y luego OnDeinit en el marco temporal superior (antiguo).

Si el interruptor sube, es viceversa. Primero iniciamos OnDeinit en el marco temporal inferior (antiguo), y luego OnInit en el marco temporal superior (nuevo).

Aquí debemos tener en cuenta que las cachés se procesan de menor a mayor plazo

¡Una lógica muy extraña! ¿Qué debo hacer? Si habrá algunos parámetros escritos en el disco en DeInit, que deben ser leídos y recogidos en OnInit durante el siguiente inicio del indicador, incluso si se inicia en el marco de tiempo inferior.

Supongo que tengo que escribir una pequeña prueba para comprobarlo. De hecho, si la función cambia a un marco temporal inferior, la lógica estará más que bien.

En general, es una pena que no se guarden las variables estáticas en los indicadores, al mismo tiempo los Asesores Expertos son geniales con la estática.
 
Ihor Herasko:

1. ¿Cómo se llaman las aplicaciones de escritorio? Tengo la sensación de que MT5 no es una aplicación de escritorio...

2) No me lo estoy inventando. Este es el tema del hilo actual. El punto es que MT5 puede ejecutar Init para el indicador que aún no ha DeInit. Sí, lo es. ¿No has leído el tema?

3.Intenta actualizar el mismo archivo varias veces por segundo y comparte tus sensaciones.

4. ¿Qué tiene que ver esto con añadir el 1 al nombre? Se trata de que haya objetos gráficos del mismo indicador, pero diferentes copias del mismo, en la pantalla al mismo tiempo. Técnicamente no existe ningún conflicto. Habrá un conflicto para el usuario que vea el chagrin en la pantalla hasta que se borre la copia antigua.

5. Te voy a contar un gran secreto: hay una copia de la DLL por cada copia del terminal. No se pueden utilizar varias copias de ellos.

1. No estamos hablando de MT5, estamos hablando de indicadores (como scripts y expertos) que no se ejecutan en el sistema operativo, sino en un entorno seguro especial.

2. Te estás contradiciendo. Si el recálculo se realiza tan rápidamente (varias veces por segundo), entonces no hay problema en realizar un nuevo recálculo en una nueva copia del indicador. En este caso tiene sentido restablecer los datos de funcionamiento periódicamente después de un tiempo establecido (puede utilizar ontimer o un contador personalizado para esto). Y si los cálculos son largos, más hay que guardar los datos después de los cálculos para evitar su pérdida en caso de fuerza mayor (la madre retiró el enchufe de la toma "para evitar la fonación").

3. La copia antigua se borrará en menos de un segundo, y con ella sus grafobienes. ¿Qué clase de imbécil cambiaría la TF con una frecuencia tal que se observara el parpadeo? - ¿Y qué? El dll no puede ser eliminado de la copia en menos de un segundo.

4. ¿entonces? la dll puede estar ocupada, es normal. No hay que preocuparse por ello; basta con repetir la petición en un segundo, por ejemplo.

Como puede ver - no hay problema, sólo tiene que manejar los programas en la terminal MT correctamente, recordando que no son aplicaciones de escritorio y que se ejecutan en un entorno protegido especial.

 
Dmitry Fedoseev:

Un indicador sí tiene primero inicial y luego deinit. Pero cuando se cambia el marco temporal, se crea la segunda instancia del indicador, y su init puede ejecutarse antes que el deinit de la instancia anterior (no iniciada).

El ejemplo más obvio - el guardado de los parámetros del usuario al cambiar el marco temporal - guardamos los parámetros en el deinit, los leemos en el init. Si el init de la nueva instancia se activa antes del deinit de la instancia anterior, los parámetros no se guardarán.

Prácticamente, el deinit de la instancia eliminada se activa antes que el init de la nueva instancia, pero si se cambia muy rápido el marco temporal o se cargan los datos, se produce un fallo.

Ya estamos otra vez... ¿Por qué "cambiar los plazos muy rápidamente"? ¿Alguno de ustedes realmente enciende (o apaga) el ordenador "rápidamente pulsando el botón" Power?
 
Andrey Dik:
Ya estamos otra vez... ¿Por qué "cambiar los plazos muy rápidamente"? ¿Alguno de ustedes enciende (o apaga) su ordenador "rápidamente pulsando el botón" Power?

¿Por qué? ¿Lo prohíbe el código penal o la constitución?
 
Dmitry Fedoseev:

¿Por qué? ¿Lo prohíbe el código penal o la constitución?

Hay muchas cosas que la AC no prohíbe, como meter los dedos en un enchufe.

Pon un ejemplo de la necesidad de cambiar con frecuencia el TF tan rápido que los objetos empiezan a parpadear. - No se trata de dar un ejemplo del efecto hipnótico, porque se puede conseguir con métodos más eficaces.

 
Andrey Dik:

Hay muchas cosas que el regulador no prohíbe, como meter los dedos en un enchufe.

Pon un ejemplo de la necesidad de cambiar el TF tan a menudo que los objetos empiezan a parpadear. - No se trata de dar un ejemplo del efecto hipnótico, porque se puede conseguir con métodos más eficaces.

Porque el enchufe y la clavija fueron diseñados por diseñadores sensatos, no por idiotas. En el lado de la tensión está el enchufe, no la clavija. Además, los agujeros del enchufe son tan grandes que no se puede meter el dedo. Pero puedes hacerlo a tu manera en tu propia casa: deja que los enchufes sobresalgan de la pared y las tomas cuelguen de los cables. Al fin y al cabo, entiendes y no tocarás con las manos los enchufes que sobresalen de la pared.
 
Dmitry Fedoseev:
Porque el enchufe y la clavija fueron diseñados por diseñadores sensatos, no por idiotas. En el lado de la tensión está el enchufe, no la clavija. Además, los agujeros del enchufe son tan grandes que no se puede meter el dedo. Pero puedes hacerlo a tu manera en tu propia casa: deja que los enchufes sobresalgan de la pared y las tomas cuelguen de los cables. Entiendes y no tocas con las manos los enchufes que sobresalen de la pared.

DE ACUERDO. Los enchufes son un ejemplo desafortunado.

Entonces, tomemos otra: ¡saltar por el balcón! ¿Prohíbe el AC saltar desde el balcón? - ¿No? - Entonces, ¿por qué no lo practica por motivos de adrenalina?

Todos los objetivos deben alcanzarse con medios sensatos, de lo contrario los objetivos no son sensatos.

 
Dmitry Fedoseev:

Andrey Dik:

Pon un ejemplo de la necesidad de cambiar el TF con frecuencia tan rápida que los objetos empiezan a parpadear. - No se debe dar un ejemplo del efecto hipnótico, ya que se puede conseguir con métodos más eficaces.