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

 
Nikolai Semko:
Gracias por el código, por supuesto. Pero los EAs están bien en cualquier caso porquecuando cambio de TF no reinicializan las variables, mientras que los indicadores sí. Si realmente quieres ayudar con consejos, por favor, vuelve a "correr" con menos prisa.

Nicolás, me encontré con el tema, incluso cuando escribí el primer post. Y no encontré ninguna discusión acerca de cómo se comporta un EA cuando el marco de tiempo cambia. Sí - el tema es sobre todo acerca de los indicadores, mientras que el autor escribió en su post"Un indicador o Asesor Expertoestá escrito ".

He puesto un ejemplo que he comprobado y funciona en el marco del Asesor Experto. Pero tú - luego me reprochas la desconsideración, luego me mandas a releer el tema, luego discutes - lo que es razonable o no razonable. Además, puede leer la primera página

No queda claro si estamos hablando de un Asesor Experto o de un indicador, ni siquiera dices claramente en tu post que estás hablando de un indicador.

VER UN EJEMPLO DE SU PUESTO:

Nikolai Semko:
Entonces, ¿eso es todo?
He estado experimentando y utilizando este código de razón (REASON_CHARTCHANGE) al máximo. Pero, ¿de qué sirve que todas las variables se pongan en su estado inicial y que OnDeinit se ejecute después de OnInit del nuevo TF?

¿Está claro por lo que acabo de decir que las variables se inicializan en el indicador?

La persona que lea tu post puede pensar que lo mismo ocurre en un Asesor Experto.

----

La respuesta a esta pregunta!"Cuando se cambia de TF, no se produce la reinicialización de la variable, mientras que sí se produce en los indicadores".

Andrey Dik:
puedes guardar los valores de las variables en algún lugar, en los globales por ejemplo...

Si quieres usar el método OnInit tienes que leer y restaurar los valores de la misma manera.

------------

Si usted está interesado sólo en el problema de cambiar el TF para el indicador - no significa que otros, incluido yo, no están interesados en la opción de cambiar el TF para el EA.

No puedodar consejos sobre el indicador, porque no sé cómo hacerlo en la práctica, pero observaré con interés las soluciones sugeridas.

Tengo entendido que los desarrolladores están leyendo este tema e incluso han corregido algunas cosas en la build 1580. Quizás ofrezcan soluciones.

 
Slawa:

¿No has leído lo que he escrito varias veces?

No hay manera en los indicadores. No puedes hacerlo en cinco desde el principio. Porque hay que descargar una copia completamente nueva del indicador con todas sus consecuencias.


Gracias por su sincera respuesta.

Siempre ha sido así en el 5. ¿Tal vez sea el momento de arreglarlo?

¿Realmente es tan difícil hacer el orden correcto? El ahorro de tiempo en el inicio se traduce entonces en interminables comprobaciones en cada tic.

Ya me he acostumbrado al paradigma OOP de MT5 y sé dónde está el rastrillo y cómo arreglar muletas para saltarse estos rastrillos, por supuesto si no hay nuevos. Resulta que es más fácil borrar un objeto y crear uno nuevo que cambiar un par de parámetros.

Del mismo modo, en un coche, en lugar de cambiar el aceite y seguir conduciendo, es mejor tirar el coche y hacer uno nuevo.

Me recuerda a un dibujo animado:


Descargar vídeo
 

¿Puede decírmelo, por favor?

He decidido escribir un programa que

1. En las salidas Inite 8 líneas

2. En DeInite salen 8 líneas más.

Lo hice funcionar en el probador (lo hice funcionar durante 2 días y lo conseguí).

Por alguna razón, falla selectivamente en el registro de algunas líneas.

¿Esto también es para acelerar las cosas?


------------------------------------------------------------------------------------------

PREGUNTA ELIMINADA PORQUE LOS REGISTROS COMPLETOS TIENEN TODA LA INFORMACIÓN

------------------------------------------------------------------------------------------

En la documentación es necesario añadir

1. El registro no muestra toda la información que el programador espera

¡¡¡-------- ES IMPRESCINDIBLE VER EL REGISTRO COMPLETO !!!

Archivos adjuntos:
Log2.txt  2 kb
ERROR_2.mq5  2 kb
 

Me gustaría resumir y sintetizar lo anterior. Entonces, antes del lanzamiento de la build 1580 de MT5 (actual build 1571), ¿qué tenemos?

En los indicadores, a diferencia de los Asesores Expertos, cuando el TF cambia, debido a que"se crea una nueva copia del indicador, que no sabe nada de la copia anterior", se reinicializan todas las variables, además de que el orden de ejecución de OnDeinit del antiguo TF y OnInit del nuevo TF es impredecible, independientemente de que el TF esté "arriba" o "abajo" (práctica, contraria a lo mencionado por el Sr. Slava). En este sentido, los programadores tienen una serie de problemas e incertidumbres. Por ejemplo:
- el programador, que no ha leído este tema, crea un objeto para algo en OnInit, comprobando lógicamente antes de la creación del indicador la existencia de un objeto con este nombre. También es lógico prescribir la eliminación de este objeto en OnDeinit. Cuando se cambia el TF, si primero se ejecuta el OnInit del nuevo TF, se comprueba la existencia del objeto, resulta que ya existe, y no se crea, porque ya está creado. Luego se realiza el OnDeinit del antiguo TF y se elimina el objeto. El programador está en estado de shock. ¿Dónde está mi objeto y por qué ha desaparecido? Se confundirá aún más, cuando la próxima vez que se cambie el TF, cuando la secuencia de OnInit y OnDeinit sea diferente, el objeto no se elimine. Está borrado, no está borrado.... Después de una larga investigación comenzará a dirigirse a Service Desk, nuevos hilos en el foro sobre el antiguo.
Esta es sólo la situación más sencilla. Habrá otros, ya que esta característica no está descrita en la documentación y sólo se puede leer sobre ella en el foro.
Si quieres crear algo especial y pasar algunos parámetros de la copia antigua del indicador a la nueva, cuando cambies el TF, no puedes usar OnDeinit debido a la secuencia impredecible de las operaciones de inicialización y desinicialización.
En miopinión, la mejor solución en este caso es utilizar las siguientes herramientas:ResourceCreate basado en el array de píxeles yResourceReadImage, pero es bastante engorroso y hay que tener cuidado con el conflicto de recursos, si se utilizan varios indicadores idénticos en una ventana, y cada vez que los datos que se quieren enviar para otra copia hay que guardarlos en un recurso no reinicializado, porque el tiempo de posible cambio de TF no es conocido para la aplicación. He implementado esto hace mucho tiempo (por ejemplo, en este producto), así que sé de lo que estoy hablando. La implementación de la transferencia de datos a través de archivos y variables globales de la terminal es una solución menos exitosa (IMHO).

Si la nueva compilación 1580 serácomo dice Slava, no facilitará la tarea, porque la desinicialización de la antigua copia del indicador se realizará después de la inicialización de una nueva. Pero no habrá incertidumbre.

Espero que los desarrolladores hayan prestado atención a este problema ya que están tratando de arreglar algo.
Esperamos la nueva construcción.

 

Todos los objetos gráficos se nombran con referencia a la TF actual. Al inicializar, crear, al desinicializar, eliminar. Durante el funcionamiento del indicador, modifique lo que sea necesario.

¿Hay algún problema? No hay problema. Todo es normal desde el momento de la puesta en marcha del indicador hasta el momento de su descarga.

Cambiamos la TF. No importa hacia dónde vaya, si hacia arriba o hacia abajo. Se lanza una copia del indicador. Esto equivale a que el indicador se ha lanzado por primera vez en este TF.

¿Hay algún problema? No hay ningún problema. La copia antigua se encargará de eliminar sus objetos, y la nueva copia creará otros nuevos de acuerdo con el calendario actual.

¿Qué estoy haciendo mal? ¿Por qué no veo ningún problema?

 
Andrey Dik:

Todos los objetos gráficos se nombran con referencia a la TF actual. Al inicializar, crear, al desinicializar, eliminar. Durante el funcionamiento del indicador modificamos lo que sea necesario.

¿Hay algún problema? No hay problema. Todo es normal desde el momento de la puesta en marcha del indicador hasta el momento de su descarga.

Cambiamos la TF. No importa hacia dónde vaya, si hacia arriba o hacia abajo. Se lanza una copia del indicador. Esto equivale a que el indicador se ha lanzado por primera vez en este TF.

¿Hay algún problema? No hay ningún problema. La copia antigua se encargará de eliminar sus objetos, y la nueva copia creará otros nuevos de acuerdo con el calendario actual.

¿Qué estoy haciendo mal? ¿Por qué no veo ningún problema?

No hay problema si se conoce esta característica indocumentada y sólo se trata del caso más sencillo: con gráfico. objetos. Me refiero a los que no conocen esta característica, creo que este tema lo lee un porcentaje muy pequeño de programadores de este foro y me da pena su tiempo para averiguar todos los matices. He estado en esta situación antes de entender la esencia.
 
Nikolai Semko:
No hay problema si usted es consciente de esta característica indocumentada y sólo se ocupa del caso más simple - con el gráfico. objetos. Me refiero a los que no conocen esta característica, creo que este tema lo lee un porcentaje muy pequeño de programadores de este foro, y me da pena su tiempo para averiguar todos los matices. Ya había estado en esta situación antes de comprender la esencia.

Nunca he oído hablar de matices como los descritos en este hilo, pero nunca me he encontrado con problemas como los descritos aquí.

si quieres transferir algo a otra copia del indicador, no necesitas hacerlo deinit - mantén los datos transferidos al día durante todo el tiempo de vida del indicador - por ejemplo en las variables principales del terminal, entonces no importa la razón de la descarga del indicador (cambio de TF, mi madre sacó el enchufe "para que no zumbara cuando todos duermen", terremoto, cambio de polos magnéticos de la tierra y así sucesivamente.etc.) la siguiente ejecución del indicador (incluyendo una copia cuando la TF cambie) obtendrá toda la información necesaria de esta fuente de datos mágica (para los casos desafortunados de escala global se pueden guardar los datos en un disco en la nube).

Chicos, no hay ningún problema.

 
Andrey Dik:

Todos los objetos gráficos se nombran con referencia a la TF actual. Al inicializar, crear, al desinicializar, eliminar. Durante el funcionamiento del indicador, modifíquelo según sea necesario.

¿Hay algún problema? No hay problema. Todo es normal desde el momento de la puesta en marcha del indicador hasta el momento de su descarga.

Cambiamos la TF. No importa hacia dónde vaya, si hacia arriba o hacia abajo. Se lanza una copia del indicador. Esto equivale a que el indicador se ha lanzado por primera vez en este TF.

¿Hay algún problema? No hay ningún problema.

Hay un problema: la existencia simultánea de objetos de diferentes indicadores. "Lo sentimos, tenemos problemas técnicos temporales" (pero esto se resolverá en unos segundos cuando se produzca el DeInit del antiguo indicador)

La copia antigua se encargará de eliminar sus objetos, y la nueva copia creará los nuevos, nombrándolos según el TF actual.

¿Qué estoy haciendo mal? ¿Por qué no veo ningún problema?

Es una visión estrecha. Por eso no puedes ver. Amplía un poco tus horizontes. Los primeros problemas se producen al trabajar con los archivos, ya que no está claro si el indicador anterior ha tenido tiempo de guardar los datos en el archivo o no. Habrá que crear algunos indicadores en las variables globales del terminal. La nueva copia del indicador tendrá que esperar a que la antigua copia restablezca los datos acumulados. Por cierto, el problema es que dicha sincronización sólo es posible en OnCalculate(). ¿Y qué hacer si el cambio se produce en fin de semana? ¿Una nueva copia no empezará hasta el lunes? ¡Oh, sí, podemos ponerlo en un temporizador! He oído que se puede disparar a los gorriones con un cañón, el tirachinas sería una buena forma de hacerlo.

Siguen siendo problemas sencillos. Intente tener en cuenta esta lógica cuando trabaje con DLL multihilo. Ahora es cuando empieza la diversión. Bueno, nos haremos más fuertes ))))

 
Andrey Dik:

Nunca he oído hablar de matices como los descritos en este hilo, pero nunca me he encontrado con problemas como los descritos aquí.

si quieres transferir algo a otra copia del indicador, no necesitas hacerlo deinit - mantén los datos transferidos al día durante todo el tiempo de vida del indicador - por ejemplo en las variables principales del terminal, entonces no importa la razón de la descarga del indicador (cambio de TF, mi madre sacó el enchufe "para que no zumbara cuando todos duermen", terremoto, cambio de polos magnéticos de la tierra y así sucesivamente.etc.) el siguiente lanzamiento del indicador (incluyendo la copia en el cambio de TF) obtendrá toda la información necesaria de esta fuente de datos mágica (para casos desafortunados de escala global es posible mantener los datos en el disco de la nube).

Chicos, no hay ningún problema.

Lo contestaré mañana. ¿DE ACUERDO? Conducir es fácil.
 
Ihor Herasko:

Hay un problema: la existencia simultánea de objetos de diferentes indicadores. "Lo sentimos, tenemos problemas técnicos temporales" (pero se solucionarán en unos segundos, cuando se produzca el DeInit del antiguo indicador)

Un campo de visión estrecho. Por eso no puedes ver. Amplía un poco tus horizontes. Los primeros problemas aparecen ya cuando se trabaja con archivos, porque no está claro si el indicador anterior ha conseguido guardar los datos en el archivo o no. Habrá que crear algunos indicadores en las variables globales del terminal. La nueva copia del indicador tendrá que esperar a que la antigua copia restablezca los datos acumulados. Por cierto, el problema es que dicha sincronización sólo es posible en OnCalculate(). ¿Y qué hacer si el cambio se produce en fin de semana? ¿Una nueva copia no empezará hasta el lunes? ¡Oh, sí, podemos ponerlo en un temporizador! He oído que se puede disparar a los gorriones con un cañón, el tirachinas sería una buena forma de hacerlo.

Siguen siendo problemas sencillos. Intente tener en cuenta esta lógica cuando trabaje con DLL multihilo. Ahora es cuando empieza la diversión. Bueno, nos haremos más fuertes)))

Ya he escrito claramente: mantén los datos que necesitas para copiar siempre actualizados. No tienes que hacerlo sólo durante la initación, debes mantenerlos siempre actualizados.

Todos los demás casos son artificiosos debido al mal humor.

Si hay un problema con la ejecución del mismo indicador al mismo tiempo, entonces cree objetos únicos cada vez con un enlace al TF y si ya hay objetos agregue 1 al nombre.

Nadie ha citado un solo caso en el que los problemas sean insalvables debido a la forma actual de funcionamiento del terminal con indicadores. Los problemas se deben a un trabajo incorrecto con los indicadores.

En general, mucha gente parece no entender que hay 3 tipos de programas por una razón (el cuarto estará disponible pronto).

Razón de la queja: