Si alguien me puede ayudar...Tengo un asesor experto para 4 pares de gráficos, y al ejecutarlo para el 5º, después de cargarlo con éxito, me falla la inicialización global, y luego se quita...
Agradeceria al menos una orientacion de que buscar..
Gracias...
Parece que tienes un problema durante la inicialización. Revisa tu código. Puedes publicar el código correspondiente si necesitas ayuda.
Gracias por responder...
El caso es que mi código funciona bien para 4 gráficos(pares), pero cuando intento ejecutarlo para uno más ocurre esto.
Y el código es un poco enorme, así que no sé si te ayudará...
Puede que no sea el código. Mi terminal se estrelló cuando estaba arrastrando las ventanas de la terminal, se recuperó parcialmente pero dijo que la inicialización global falló. Tuve que reiniciar el terminal. Nunca he visto ese error antes de la compilación 625 y ha habido más de un informe de ello durante esta última semana o así.
Amigos, sé que este hilo es como un mes de edad ahora, pero creo que esto es un problema de MetaTrader en lugar de un problema de código. Me ha pasado esto de forma aleatoria en un indicador en el que estoy trabajando. A veces ocurre si miro o cambio las propiedades del indicador, a veces ocurre si cierro y reinicio el terminal y a veces simplemente ocurre espontáneamente. Definitivamente es algún tipo de problema de inicialización. La razón por la que estoy seguro de esto es que tengo un conjunto de botones que creo para ver MAs en marcos de tiempo diferentes al que está actualmente. En todos los casos, cuando falla los botones de TF siguen en el gráfico pero el indicador ha sido eliminado. Naturalmente, los botones ya no hacen nada. Para que las cosas vuelvan a funcionar tengo que borrar los botones manualmente y volver a poner el indicador en el gráfico. Funciona bien durante un tiempo y luego ¡BOOM! Vuelve a estar muerto. No hay razón para ello. No creo que el problema sea nuestro código. Creo que es algo jodido con MT4. Estoy corriendo v625, por cierto. Si se me ocurre algo para sortear esto, lo publicaré.
Profesor
Yo también tuve este "fallo de inicialización global".
Sucedió cuando cambié el marco de tiempo del gráfico
No veo ninguna razón para ello y no he podido replicarlo.
Lo extraño es que los últimos 2 bloques de código en init crean objetos y estos fueron creados en el gráfico.
Como no se llamó a deinit, no se borraron.
int OnInit() { //--- indicator buffers mapping IndicatorBuffers(4); //---- drawing settings SetIndexArrow(0,250); SetIndexArrow(1,250); SetIndexStyle(0,DRAW_NONE); SetIndexDrawBegin(0,i-1); SetIndexBuffer(0,CTFresistancetBuffer); SetIndexLabel(0,"Resistance"); SetIndexStyle(1,DRAW_NONE); SetIndexDrawBegin(1,i-1); SetIndexBuffer(1,CTFsupportBuffer); SetIndexLabel(1,"Support"); SetIndexBuffer(2,HTFresistancetBuffer,INDICATOR_CALCULATIONS); SetIndexBuffer(3,HTFsupportBuffer,INDICATOR_CALCULATIONS); switch(S_R_TimeFrame) { case M5: SRPeriod=PERIOD_M5; break; case M15: SRPeriod=PERIOD_M15; break; case M30: SRPeriod=PERIOD_M30; break; case H1: SRPeriod=PERIOD_H1; break; case H4: SRPeriod=PERIOD_H4; break; case Daily: SRPeriod=PERIOD_D1; break; case Weekly: SRPeriod=PERIOD_W1; break; case Monthly: SRPeriod=PERIOD_MN1; break; case Current_Chart: SRPeriod=PERIOD_CURRENT; break; } if(Digits==3 || Digits==5) NewPip=Point*10; else NewPip=Point; string obj_name = "TDR_ARROW" ; ObjectCreate(obj_name, OBJ_LABEL, 0, 0, 0); ObjectSet(obj_name, OBJPROP_CORNER, 1); ObjectSet(obj_name, OBJPROP_XDISTANCE, 30); ObjectSet(obj_name, OBJPROP_YDISTANCE, 30); ObjectSetText(obj_name, CharToStr(243), 30, "Wingdings", clrBlue); obj_name = "TDR_LINE" ; ObjectCreate(obj_name, OBJ_TREND, 0, 0, 0); ObjectSetInteger(0,obj_name,OBJPROP_WIDTH,LineWidth+1); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { for(i=ObjectsTotal()-1;i>=0;i--) { string ObName=ObjectName(i); if(StringFind(ObName,"TDR",0)!=-1) ObjectDelete(ObName); } return; } //+------------------------------------------------------------------+
Mi problema parece haber sido usar init() y deinit() en lugar de las nuevas OnInit() y OnDeinit(). Las cosas parecen funcionar después de que cambié a las nuevas llamadas. Más vale que MetaQuotes no se esté riendo de mí. Creo recordar haber leído en alguna parte de la voluminosa lista de cambios que las viejas llamadas eran todavía compatibles con MQL4. De hecho, tengo otro indicador que todavía los utiliza y crea una serie de objetos de etiqueta sin hipo. Es probable que cambiar eso sólo para estar en el lado seguro ya que planea ofrecer ambos indicadores para la venta cuando estoy listo.
De todos modos, el problema parece haber sido que deinit() no estaba siendo llamado cuando el indicador se desinicializaba por lo que los objetos no estaban siendo eliminados como deberían haber sido. La inicialización fallaba porque los objetos seguían existiendo. Estaba haciendo una comprobación de errores en todo pero el fallo de creación de objetos no estaba siendo reportado. Aparentemente, se estropeó y me dio el error de MQL antes de llegar a mi código de manejo de errores.
GumRai, usted podría tratar de usar SubStr en lugar de StringFind. No debería importar, pero he comprobado que MQL puede ser un poco raro a veces. ¿Estás seguro de que OnDeinit() no fue llamado? Lo que me dio la pista de mi problema fue poner una declaración de alerta en mi método deinit() y notar que nunca fue llamado. También puedes intentar envolver tu código de borrado con código de manejo de errores para ver qué puede estar haciendo.
Profesor
Mi problema parece haber sido usar init() y deinit() en lugar de las nuevas OnInit() y OnDeinit(). Las cosas parecen funcionar después de que cambié a las nuevas llamadas. Más vale que MetaQuotes no se esté riendo de mí. Creo recordar haber leído en alguna parte de la voluminosa lista de cambios que las antiguas llamadas seguían siendo compatibles con MQL4. De hecho, tengo otro indicador que todavía los utiliza y crea una serie de objetos de etiqueta sin hipo. Es probable que cambiar eso sólo para estar en el lado seguro ya que planea ofrecer ambos indicadores para la venta cuando estoy listo.
De todos modos, el problema parece haber sido que deinit() no estaba siendo llamado cuando el indicador se desinicializaba por lo que los objetos no estaban siendo eliminados como deberían haber sido. La inicialización fallaba porque los objetos aún existían. Estaba haciendo una comprobación de errores en todo pero el fallo de creación de objetos no estaba siendo reportado. Aparentemente, se estropeó y me dio el error de MQL antes de llegar a mi código de manejo de errores.
GumRai, usted podría tratar de usar SubStr en lugar de StringFind. No debería importar, pero he comprobado que MQL puede ser un poco raro a veces. ¿Estás seguro de que OnDeinit() no fue llamado? Lo que me dio la pista de mi problema fue poner una declaración de alerta en mi método deinit() y notar que nunca fue llamado. También podrías intentar envolver tu código de borrado con código de manejo de errores para ver qué puede estar haciendo.
Profesor
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- 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
Si alguien me puede ayudar...Tengo un asesor experto para 4 pares de gráficos, y al ejecutarlo para el 5º, después de cargarlo con éxito, me falla la inicialización global, y luego se quita...
Agradeceria al menos una orientacion de que buscar..
Gracias...