Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1315

 
Aleksey Mavrin:

C'è una cosa del genere in MT4, non so se quando OnInit viene attivato dopo aver cambiato il conto, l'ambiente non ha avuto il tempo di aggiornare il numero di conto o qualche altro bug, ho deciso di timer

molte cose vanno male se il terminale con EA in esecuzione viene ricaricato

imho, se il codice non è per tester, allora tutta l'inizializzazione è meglio farla quando arriva il primo tick - allora il 99,9% di tutto sarà inizializzato correttamente

 
Igor Makanu:

molte cose vanno male se il terminale con un EA in esecuzione è sovraccarico

imho, se il codice non è per un tester, allora tutta l'inizializzazione è meglio farla quando arriva il primo tick - allora il 99,9% di tutto sarà inizializzato correttamente

Sono d'accordo, ma probabilmente c'è lo 0,1% ))

 
Igor Makanu:

molte cose vanno male se il terminale con un EA in esecuzione è sovraccarico

imho, se il codice non è per tester, allora è meglio inizializzare tutto quando arriva il primo tick - allora il 99,9% di tutto sarà inizializzato correttamente

meglio fare tutta l'inizializzazione quando arriva il primo tick - allora il 99,9% delle cose sarà inizializzato correttamente... Com'è?

 
ponochka:

tutte le inizializzazioni sono meglio fatte all'arrivo del primo tick - allora il 99,9% di tutto sarà inizializzato correttamente... Com'è?

void OnTick()
{
   static bool first_run = true;
   if(first_run)
   {
      MyOnInit();
      first_run = false;
   }
 
Igor Makanu:

Puoi farlo in modo diretto, evitando il tipo di imbottitura 'My'.

int OnInit()
  {
   ...
    account=AccountNumber();
   ...
  }

void OnTick()
{
  static bool first_run = true;
   if(first_run)
   {
     if(account==0) { // Если терминал не успел получить данные с сервера
      OnInit(); // пробуем снова всё инициализировать
      return;
     }
      first_run = false;
   }
 
Vitaly Muzichenko:

Potete farlo direttamente evitando l'imbottitura sotto forma di "My".

non è imbottitura, è codice strutturato.

Il tuo esempio è un esempio di come sia pigro scrivere un paio di lettere in più e ottenere codice non sistematico - qui almeno 2 volte sarà chiamato OnInit() quando si esegue EA, non il fatto che sarà necessario, o meglio non violare ciò che è stato scritto prima - il livello delle domande che hai visto, giusto? )))

 
Igor Makanu:

non è un blocco, è un codice strutturato

Il tuo esempio è un esempio di come sia pigro scrivere un paio di lettere in più e ottenere codice non strutturato - qui almeno 2 volte sarà chiamato OnInit() all'avvio EA, non il fatto che sarà necessario, o meglio non romperà ciò che è stato scritto prima - il livello delle domande che hai visto, giusto? )))

first_run = true;

Bisogna anche controllare in Init alla prima inizializzazione e forse c'è già "zero".

Altrimenti sì, sono d'accordo.


P.S. Non sono d'accordo, non sarà chiamato 2 volte se sei riuscito a connetterti al server e ottenere dati reali da esso.

 
Igor Makanu:

non funziona, perché è scritto nella documentazione cheOnTick() non funziona negli indicatori!

 
ponochka:

non funziona, perché la documentazione dice cheOnTick() non funziona negli indicatori!

Beh, questo è il limite :(

Sostituire OnTick() con

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
E io andrò all'altro ramo.
 
Vitaly Muzichenko:

Beh, questo è il limite :(

Ho scritto sopra, sul livello delle domande ;)

E hai iniziato a cercare l'ottimizzazione dell'inizializzazione in OnTick/OnInit - tutto è più semplice lì, hai bisogno di protezione per il codice trovato da condividere con gli stessi amici ))))

Motivazione: