[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 323

 
Vinin писал(а) >>

Ecco perché si fanno errori di proposito.

E di proposito, è divertente... Mi piacerebbe vedere questo errore, ma non riesco a trovarlo.

 
Daiver2 >> :

Eseguo alcune funzioni come script di test per vedere se ci sono errori di compilazione e quali controllare se funzionano o meno nel terminale. Ho preso oggi la funzione di pre-calcolo delle barre nella finestra:

Naturalmente esce il messaggio *Non ci sono abbastanza barre*, ma su un nuovo tick capisco che questo messaggio apparirà di nuovo a tempo indeterminato.

Ora aggiungo una variabile e scrivo in una dichiarazione if, e anche nel futuro blocco di gestori di errori Bloc_Error, metto un operatore switch e lo risultato:

La domanda è cosa ho fatto di sbagliato nell'operatore di switch, perché non viene visualizzato il messaggio *Expert is not working*, e perché l'EA smette davvero di funzionare?????
//+------------------------------------------------------------------+      
    switch()//?????????????? почему в switch не передаёте параметр 
      {
      case 3:          // Неверные параметры:
      Work=false;
      return(0);
      }


 

Ciao a tutti!

Non riesco a capire la causa dell'errore quando l'EA è in esecuzione. Sto testando un EA su 11 coppie in un terminale allo stesso tempo (conto demo). Controllo le condizioni di entrata all'inizio di ogni ora, cioè 11 EAs iniziano a lavorare simultaneamente. La funzione IsTradeBusy() (da qui https://www.mql5.com/ru/articles/1412) è stata usata per evitare che si disturbino a vicenda. Recentemente, l'Expert Advisor segnala un errore quando cerca di cambiare il valore della variabile globale TradeIsBusy invece di aprire una posizione. Ecco una parte del codice:

     // пытаемся менять значение TradeIsBusy с 0 на 1
     // если нам это удаётся, выходим из ф-ции, возвращая 1 - "успешное завершение"
     if(GlobalVariableSetOnCondition( "TradeIsBusy", 1.0, 0.0 )) 
         return(1);
     else
     // если нет, возможны 2 причины: TradeIsBusy = 1 (тогда надо ждать), либо 
     // возникла ошибка (это мы и проверим)
     {
        _GetLastError = GetLastError();
        // если это всё таки ошибка, выводим информацию и пробуем ещё раз
        if(_GetLastError != 0)
        {
           Print("TradeIsBusy()-GlobalVariableSetOnCondition(\" TradeIsBusy\",1.0,0.0 )-Error #",
           _GetLastError );
           continue;
        }
     }

Codici di errore:

#4002 - "indice della matrice - fuori portata"

#4105 - "Nessun ordine è selezionato".

Non capisco quali condizioni possono causare questi errori usando il comando GlobalVariableSetOnCondition?

Terminal Broco Trader 4.0 build 225.

Il terminale può avere un glitch come questo?

 
Urain писал(а) >>

>>Grazie, lo farò.

 
OAndrey писал(а) >>

Ciao a tutti!

Non riesco a capire la causa dell'errore quando l'EA è in esecuzione. Sto testando un EA su 11 coppie in un terminale allo stesso tempo (conto demo). Controllo le condizioni di entrata all'inizio di ogni ora, cioè 11 EAs iniziano a lavorare simultaneamente. La funzione IsTradeBusy() (da qui https://www.mql5.com/ru/articles/1412) è stata usata per evitare che si disturbino a vicenda. Recentemente, l'Expert Advisor segnala un errore quando cerca di cambiare il valore della variabile globale TradeIsBusy invece di aprire una posizione. Ecco una parte del codice:

Codici di errore:

#4002 - "indice della matrice - fuori portata"

#4105 - "Nessun ordine è selezionato".

Non capisco quali condizioni possono causare questi errori usando il comando GlobalVariableSetOnCondition?

Terminal Broco Trader 4.0 build 225.

Il terminale può avere un glitch come questo?

Non posso dire nulla su questo pezzo di codice. E come consiglio. Ripristina lo stato dell'ultimo errore all'inizio della funzione. Può accadere da qualche altra parte.

   GetLastError();  //Сбрасываем состояние 

   // пытаемся менять значение TradeIsBusy с 0 на 1
   // если нам это удаётся, выходим из ф-ции, возвращая 1 - "успешное завершение"
   if(GlobalVariableSetOnCondition( "TradeIsBusy", 1.0, 0.0 )) 
      return(1);
   else
   // если нет, возможны 2 причины: TradeIsBusy = 1 (тогда надо ждать), либо 
   // возникла ошибка (это мы и проверим)
   {
      _GetLastError = GetLastError();
      // если это всё таки ошибка, выводим информацию и пробуем ещё раз
      if(_GetLastError != 0)
      {
         Print("TradeIsBusy()-GlobalVariableSetOnCondition(\" TradeIsBusy\",1.0,0.0 )-Error #",
         _GetLastError );
         continue;
      }
   }
 

Come fare un'interruzione di riga nel testo? Per esempio, mostro qualcosa su un grafico, in OBJ_LABEL, e voglio che il testo sia scritto in più righe.

 
Mathers >> :

Come fare un'interruzione di riga nel testo? Per esempio, mostro qualcosa su un grafico, in OBJ_LABEL, e voglio che il testo sia scritto in più righe.

Visualizzazione in etichette multiple.

 

Cosa succede se il numero di linee cambia dinamicamente? E può essere abbastanza grande. Forse si può usare qualcos'altro al posto di un'etichetta?


Ed ecco un'altra domanda: diciamo che ho uno script che fa qualcosa in un ciclo infinito con un ritardo per esempio di un secondo. Quando cerco di rimuoverlo - scelgo "delete script" ma non viene rimosso dal grafico, inizia a ravanare senza alcun ritardo. Quando premo "delete" ancora una volta rimuove lo script. Qual è il problema? Forse qualcosa che dovrei aggiungere al codice per completarlo correttamente?

 
Mathers >> :

Cosa succede se il numero di linee cambia dinamicamente? E può essere abbastanza grande. Forse si può usare qualcos'altro al posto di un'etichetta?

Allarme, in alternativa. Commento - questo è buono.

Ed ecco un'altra domanda: diciamo che ho uno script che fa qualcosa in un ciclo infinito con un ritardo per esempio di un secondo. Quando cerco di rimuoverlo - scelgo "delete script" ma non viene rimosso dal grafico, inizia a ravanare senza alcun ritardo. Quando premo "delete" ancora una volta rimuove lo script. Qual è il problema? Forse dovrei aggiungere qualche parola in più nel mio codice.

Sostituire while(true) con while(!IsStopped())

 
Mathers >> :

Cosa succede se il numero di linee cambia dinamicamente? E può essere abbastanza grande. Forse si può usare qualcos'altro al posto di un'etichetta?

No, a meno che il commento non si adatti. Scrivete una funzione f dove verrà generato l'output e scrivete ciò di cui avete bisogno attraverso di essa.

Ed ecco un'altra domanda: diciamo che ho uno script che fa qualcosa in un ciclo infinito con un ritardo per esempio di un secondo. Quando cerco di rimuoverlo - scelgo "delete script" ma non viene rimosso dal grafico, inizia a ravanare senza alcun ritardo. Quando premo "delete" ancora una volta rimuove lo script. Qual è il problema? Forse dovrei aggiungere qualche parola in più nel mio codice.

È così che dovrebbe essere.