confusión sobre el comportamiento de las variables - página 7

 

rehacer el Asesor Experto para la prueba del fin de semana sin start()

1. ir al gráfico

2. cambiar los parámetros

3. el registro muestra que la cadena (azul) recibe valores erróneos de la variable externa, a diferencia de int (verde)

extern string ValueString = "DDD";
extern int    ValueInt    = 10;  
     
string tempString="val";
int    tempInt   =0;

bool   firsttime=true;
       
int init() {  
   if(firsttime) {     // значение присваевается тольо ОДИН раз   
      Print("иницилизация глобальных переменных");
      Print("tempString = ",tempString);
      Print("tempInt    = ",tempInt);
      
      Print("однократное присваение внешних значений глобальным переменным");
      tempString=ValueString; 
      tempInt   =ValueInt; 
      firsttime =false; 
      Print("ValueString: ",ValueString," < >","  tempString: ",  tempString);
      Print("ValueInt:     ",ValueInt,  " < >","  tempInt:      ",tempInt);
   } else {
      Print("меняем входные параметры");
      Print("ValueString: ",ValueString," < >","  tempString: ",  tempString);
      Print("ValueInt:     ",ValueInt,  " < >","  tempInt:      ",tempInt);
   }                          
}

int start() {}





Archivos adjuntos:
testinit.mq4  1 kb
 
wlad:

rehacer el Asesor Experto para la prueba del fin de semana sin start()

1. ir al gráfico

2. cambiar los parámetros

3. el registro muestra que la cadena (azul) recibe valores erróneos de una variable externa, a diferencia de int (verde)





Y efectivamente hay un bug....Las variables configuradas en el nivel externo no se inician cuando se reinicia el EA, sino que cogen alguna mierda de reinicios anteriores...Gracias a Wlad por su paciencia)))))
 

Y aquí también hay un tema... un indicador simple en el que hay

#property indicator_color1 Rojo
и

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3,Aqua);

El color sigue siendo rojo con su grosor... Hasta que no se borre el indicador a la fuerza y se reinicie, es decir, la simple recompilación no sirve de nada. Resulta que los parámetros se extraen de algunos troncos.... Mentira, por supuesto, pero Wlad llegó a ella ))))

 
Al parecer está relacionado, lo he notado desde hace tiempo, a veces cambias el código del EA, lo compilas, pero el código anterior funciona, hasta que vuelves a cargar la terminal. Ni siquiera reiniciar el Asesor Experto ayuda. Pero no siempre es así, así que me lo tomo con calma. Bueno, está ahí... No parece que me moleste demasiado.
 

Sí,

sería bueno que los desarrolladores lo arreglaran

¿o es inútil escribir aquí y dirigirse directamente al servicio de ayuda?

Por cierto, ¿dónde puedo ir?

 
Sepulca:
Э... felicitame, soy una especie de abuelo, no realmente, pero los niños lo admiten......))

Enhorabuena. ¿Qué edad tiene el abuelo?
 

Por favor, asesórese

¿Cómo puedo contactar con la pinza?

no lo encuentro en ningún sitio

 
wlad:

Por favor, asesórese

¿Cómo puedo contactar con la pinza?

no lo encuentro en ningún sitio

No puedes hacerlo directamente desde el cuarto foro. Se puede desde el quinto foro. Consulta el enlace "Service Desk" en tu perfil de mql5.com (a la izquierda, en la columna con la lista de servicios del perfil).
 
MetaDriver:
No puedes hacerlo directamente desde el cuarto foro. Se puede desde el quinto foro. Consulta el enlace "Service Desk" en tu perfil de mql5.com (a la izquierda, en la columna con la lista de servicios del perfil).
Gracias, lo comprobaré.
 
wlad:

rehacer el Asesor Experto para la prueba del fin de semana sin start()

1. ir al gráfico

2. cambiar los parámetros

3. el registro muestra que la cadena (azul) recibe valores erróneos de una variable externa, a diferencia de int (verde)



No es reproducible enel nuevo compilador. Nadie cambiará nunca la antigua.

extern string ValueString = "DDD";
extern int    ValueInt    = 10;  
     
string tempString="val";
int    tempInt   =0;

bool   firsttime=true;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(firsttime) 
     {     // значение присваевается тольо ОДИН раз   
      Print("иницилизация глобальных переменных");
      Print("tempString = ",tempString);
      Print("tempInt    = ",tempInt);

      Print("однократное присваение внешних значений глобальным переменным");
      tempString=ValueString;
      tempInt   =ValueInt;
      firsttime =false;
      Print("ValueString: ",ValueString," < >","  tempString: ",tempString);
      Print("ValueInt:     ",ValueInt," < >","  tempInt:      ",tempInt);
        } else {
      Print("меняем входные параметры");
      Print("ValueString: ",ValueString," < >","  tempString: ",tempString);
      Print("ValueInt:     ",ValueInt," < >","  tempInt:      ",tempInt);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+