confusione sul comportamento delle variabili - pagina 7

 

rifatto l'Expert Advisor per il test del fine settimana senza start()

1. vai al grafico

2. cambiare i parametri

3. il log mostra che la stringa (blu) riceve valori errati da una variabile esterna, a differenza di 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() {}





File:
testinit.mq4  1 kb
 
wlad:

rifatto l'Expert Advisor per il test del fine settimana senza start()

1. vai al grafico

2. cambiare i parametri

3. il log mostra che la stringa (blu) riceve valori errati da una variabile esterna, a differenza di int (verde)





E c'è effettivamente un bug....Le variabili impostate a livello esterno non vengono avviate quando l'EA viene riavviato, ma prendono qualche schifezza dai riavvii precedenti...Grazie a Wlad per la sua pazienza)))))
 

E anche qui c'è un tema... un semplice indicatore in cui c'è

#property indicator_color1 Red
и

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

Il colore rimane rosso con il suo spessore... Finché non si cancella forzatamente l'indicatore e lo si riavvia, cioè la semplice ricompilazione non aiuta. Si scopre che i parametri sono estratti da alcuni tronchi.... Stronzate, ovviamente, ma wlad ci è arrivato))))

 
Apparentemente è collegato, ho notato da molto tempo, a volte si cambia il codice EA, lo si compila, ma il codice precedente funziona, fino a quando non si ricarica il terminale. Anche il riavvio di Expert Advisor non aiuta. Ma questo non è sempre il caso, quindi me la prendo comoda. Beh, è lì... Non sembra dare troppo fastidio.
 

Sì..,

sarebbe bello se gli sviluppatori potessero risolvere il problema

o è inutile scrivere qui e andare direttamente all'help desk?

A proposito, dove posso andare?

 
Sepulca:
Э... congratulazioni, sono una specie di nonno, non proprio, ma i bambini lo ammettono......)))

Congratulazioni! Quanti anni ha il nonno?
 

Si prega di consigliare

Come faccio a contattare la pinza?

non riesco a trovarlo da nessuna parte

 
wlad:

Si prega di consigliare

Come faccio a contattare la pinza?

non riesco a trovarlo da nessuna parte

Non puoi farlo direttamente dal quarto forum. È possibile dal quinto forum. Vedi il link "Service Desk" nel tuo profilo mql5.com (a sinistra, nella colonna con l'elenco dei servizi del profilo).
 
MetaDriver:
Non puoi farlo direttamente dal quarto forum. È possibile dal quinto forum. Vedi il link "Service Desk" nel tuo profilo mql5.com (a sinistra, nella colonna con l'elenco dei servizi del profilo).
Grazie, lo controllerò.
 
wlad:

rifatto l'Expert Advisor per il test del fine settimana senza start()

1. vai al grafico

2. cambiare i parametri

3. il log mostra che la stringa (blu) riceve valori errati da una variabile esterna, a differenza di int (verde)



Non è riproducibile nelnuovo compilatore. Nessuno cambierà mai quello vecchio.

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()
  {
//---

  }
//+------------------------------------------------------------------+
Motivazione: