Y ahora - un super-duper mega-pregunta: ¿cuál es el contexto de la vida de los recursos creados en MQL5? Todo el terminal, cualquier contenedor interno como "símbolo-marco de tiempo" flujos, gráfico o algo más? No está escrito al respecto en la ayuda.
Foro sobre trading, sistemas automatizados de trading y prueba de estrategias de trading
Secuencia de ejecución de Init() y DeInit().
Nikolai Semko, 2017.04.16 09:42 AM
Por supuesto recursos - me parecen la solución óptima, porque son invisibles, a diferencia de glob. variables terminales y archivos, y rápido. Y también puede transferir matrices a través de ellos, así como a través de archivos, pero sólo más rápido, porque todo sucede en la memoria RAM. Y también pertenecen a la ventana, no al terminal, como en el caso de las globales. Además, se puede crear un recurso para todos los mismos indicadores en la ventana.
Acabo de creerlo, por eso lo hice a través de recursos. Inicialmente era a través de globales.
No lo probé
Sólo lo creí, así que lo hice a través de recursos. Originalmente fue a través de global.
Y hay una pregunta más - ¿qué pasa si un indicador se crea a partir de un Asesor Experto?
Hmmm...
Interesantes anulaciones de funciones...
¿Cómo funciona? Digamos, ¿usando la función de inicialización como ejemplo?
Pues...
Entonces, como la librería se inserta primero, al compilar OnInit() de la librería se registra como función de inicialización.
Y comprueba la sincronización y luego llama a la función OldOnInit(). ¿Qué es esta función? Todavía no está definida.
Aha... Más aún - el identificador OnInit() es definido por el define como OldOnInit(). Más tarde, cuando la "vieja" función OnInit() sea definida, será reemplazada por OldOnInit() - la misma que será llamada por la OnInit() de la librería.
Hmm. El uso original de defines. En mi opinión, bastante peligroso, en términos de soporte posterior y posibilidades de cambiar el orden de declaración de los identificadores. (Tenía la impresión de que no se pueden utilizar identificadores no declarados). Pero, desde el punto de vista del uso - todo es limpio y correcto.
En mi opinión, bastante peligroso, en términos de soporte adicional y posibilidades de cambiar el orden de declaración de los identificadores.
No he encontrado un ejemplo peligroso.
Que yo recuerde, esta es la única librería de este tipo en la que #include está presente, pero en ninguna parte del código se llama a nada de ella por parte del usuario.
Pido disculpas. Fui engañado.
Si usas un indicador vacío con ese OnInit (sin borrar el recurso):
int OnInit() { uint set[1]; set[0]=3; uint w=1,h=1; if(ResourceReadImage("::Res_name",set,w,h)) Print("el recurso ya existe set[0] = "+DoubleToString(set[0],0)); else { if(ResourceCreate("::Res_name",set,1,1,0,0,0,COLOR_FORMAT_XRGB_NOALPHA)) Print("Se ha creado un nuevo recurso".); else Print("No se ha podido crear un recurso".); } return(INIT_SUCCEEDED); }
puedes sacar las siguientes conclusiones sobre el recurso:
1. El recurso pertenece al terminal, no a la ventana. Por lo tanto, es razonable añadir, digamos, un manejador de ventana al nombre del recurso.
2. El tiempo de vida del recurso es el tiempo que el terminal está vivo, y el recurso se elimina cuando se reinicia el terminal. Por lo tanto, sería razonable guardar los datos necesarios en la variable global del terminal (o archivo mediante ResourceSave) cuando se cierra el terminal (el código de motivo es REASON_CLOSE), y cuando se vuelve a cargar el terminal, crear un nuevo recurso transfiriendo los datos del PT global (o archivo) con el posterior borrado del PT global (o archivo), para que no molesten a la vista (entonces la variable global del terminal existirá sólo en el momento de cerrar y abrir el terminal).
Por un lado es bueno, porque hay interesantes posibilidades de transferencia de datos y sincronización entre ventanas y en general todo en el terminal, pero por otro lado añade código y algunas complicaciones.
Lo siento de nuevo por dar información no verificada.
Pero ahora hay claridad con recursos poco documentados. Y por cierto, una herramienta muy valiosa.
El recurso pertenece al terminal, no a la ventana. Por lo tanto, es razonable añadir, digamos, un manejador de ventana al nombre del recurso.
return("::" + (string)::ChartID() + (string)INIT_SYNC::crc64(Bytes) + ::MQLInfoString(MQL_PROGRAM_NAME));
Parece que no se necesita nada más.
Por cierto, puede ser conveniente sin manejador de ventana en algunas situaciones, cuando la copia del indicador debe ser UNO para todo el terminal.
ZY La versión actualizada contiene esta corrección.
Por cierto, tal vez, sin manejador de ventana puede ser conveniente en algunas situaciones, cuando la copia del indicador debe ser UNO para todo el terminal.
Sí, yo también pensé en ello
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Init_Sync:
Autor: fxsaber