ecco la seconda opzione
si scopre che le variabili puntano alla stessa posizione di memoria dopo la prima assegnazione
if(firsttime) { backup = StringVal;
Mi piacerebbe sapere da quale costruzione proviene
Ecco un esempio
extern string StringVal = "string"; string backup = ""; bool firsttime = true; int init() { Print("========================="); Print("StringVal=",StringVal," backup=",backup); if(StringVal != backup){ if(firsttime) { backup = StringVal; Print(" First Call ===> backup = StringVal"); } Print("StringVal=",StringVal,"< > backup=",backup); } firsttime = false; } int start() { }
Se compilo come esperto
allora quando cambio la StringVal, il backup cambia immediatamente
e l'ultima Stampa non si chiama
Dov'è il problema?
Bene, cambiate manualmente lo StringVal e l'init funziona immediatamente, è giusto ...
è chiaro che init() funziona
Il problema è che 2. la variabile viene aggiornata indipendentemente da altre condizioni
non c'è una condizione di aggiornamento - ma l'aggiornamento avviene!
Sì, è tutto chiaro
Il problema è che 2. la variabile è impostata indipendentemente da altre condizioni
SEMPRE
PROBLEMA SERIO
ecco un esempio simile
il valore della prima variabile viene passato alla seconda variabile solo una volta e il valore della seconda variabile non deve cambiare nell'ulteriore esecuzione del programma
ma ogni volta che la prima variabile viene cambiata, il valore della seconda variabile cambia, il che non dovrebbe essere
extern string Value = "O"; string temp_=""; bool firsttime=true; int start() { string txt=StringConcatenate( " Value: ",Value,"\n", " temp_: ",temp_,"\n", " firsttime: ",firsttime); if(firsttime) { temp_=Value; firsttime=false; } // значение присваевается тольо ОДИН раз Print(txt); Comment(txt); }
ecco un esempio simile
il valore della prima variabile viene passato alla seconda variabile solo una volta e il valore della seconda variabile non deve cambiare nell'ulteriore esecuzione del programma
ma ogni volta che la prima variabile viene cambiata, il valore della seconda variabile cambia, il che non dovrebbe essere
Quando la variabile esterna viene cambiata, EA viene riavviata, il che porta all'inizializzazione delle variabili dichiarate a livello globale. Questo è corretto. Se volete evitare questo, usate le variabili globali.
sbagliato - nessuna inizializzazione
Ecco una prova dalla guida
Le variabili globali sono inizializzate solo una volta, subito dopo che il programma è stato caricato nella memoria del terminale client.
E in generale, non si tratta di inizializzazione ma di cambiamento di variabile
Si prega di leggere attentamente il codice
E il problema si verifica solo con le variabili di tipo stringa
Con altri tipi nessun problema!
ecco la seconda opzione
si scopre che le variabili puntano alla stessa posizione di memoria dopo la prima assegnazione
Mi piacerebbe sapere da quale costruzione proviene
Ecco un esempio
si ha sempre lo StringVal != backup e firsttime sarà sempre vero perché (init) viene avviato solo una volta ma ogni volta che si riavvia l'EA e ne viene avviato uno nuovo quando si cambia finestra informativa o quando si cambia set all'avvio del terminale . Quindi, quando cambiateStringVal, ricominciate l'init.
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
se compilo come esperto
poi quando cambio la StringVal, il backup cambia immediatamente
e l'ultima Stampa non si chiama
Dov'è il problema?