Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 601

 

Ciao a tutti!

Dare consigli, soluzioni o curiosare dove leggere.

Risolvere un problema: gestione degli errori quando si chiama iCustom()...

// MQL4
void OnTick()
{
....
   ResetLastError();
   double val=iCustom(NULL,0,INDUK_NAME,..., i);
   if ((nErr=GetLastError())>0)
   {
      Print("Error in ",__FUNCTION__," code=",nErr);
      ExpertRemove();
      return;
   }
...
}

Questa costruzione di codice non funziona per il completamento dell'EA, se "iCustom" è andato in crash con il messaggio "array out of range" durante il debug dell'EA nel tester.

 
Un superamento dell'array è un errore critico, dopo il quale l'esecuzione del programma si ferma e non viene eseguito altro codice. Ecco perché il vostro gestore di errori non funziona. E non avete bisogno del codice di errore in questo caso - è scritto nero su bianco nel log cosa ha causato il crash. E anche specificato la linea e la posizione in cui è successo.
 
Sergei Vladimirov:
L'overrun della matrice è un errore critico, dopo il qualeil programma si ferma e non viene eseguito altro codice. Ecco perché il tuo gestore di errori non funziona. E non avete bisogno del codice di errore in questo caso, è scritto nero su bianco nel diario cosa ha causato il crash. E anche specificato la linea e la posizione in cui è successo.

1. So che l'errore è nel registro e che è critico

2. Non capisco perché il tester non ferma l'EA e deve forzare uno stop?

Ci sono costrutti di linguaggio per la gestione delle eccezioni per organizzare l'Expert Advisor e la sua interazione con l'utente in modo conveniente in caso di errori critici?

 
fromme2you:

1. So che l'errore è nel registro e che è critico

2. Non capisco perché il tester non ferma l'EA e devo forzare uno stop?

Ci sono dei costrutti di linguaggio per gestire le eccezioni per organizzare in modo conveniente l'Expert Advisor e la sua interazione con l'utente in caso di errori critici?

Il tester si ferma se nel codice dell'Expert Advisor si è verificato un errore critico (ad esempio, divisione per 0, o un overrun di array).

Evitare di fermare il codice nel tester o nel codice reale, penso, è possibile solo se introduciamo i controlli appropriati nel codice. Il che non è sempre fattibile. Questo è particolarmente vero se state usando il codice di qualcun altro o incollate il codice di qualcun altro come subroutine nel vostro prodotto.

Un altro modo complicato è quello di leggere i file di log programmaticamente.

 
Yuri Evseenkov:

Il tester si ferma se si verifica un errore critico (ad esempio la divisione per 0 o il superamento di un array) nel codice del consigliere stesso....

Un altro modo complicato è quello di leggere i log programmaticamente.

Capisco, grazie per la risposta.

Un'altra domanda: come posso fare in modo che lo sviluppatore di MT4 e il runtime del codice MQL si impegnino a sviluppare un linguaggio per gestire le eccezioni come nel mio esempio, o uno simile?

 
fromme2you:

Capisco, grazie per la risposta.

Un'altra domanda: come posso convincere gli sviluppatori dell'ambiente di esecuzione del codice MT4 e MQL a mettere le loro menti e mani nello sviluppo di un linguaggio per la gestione delle eccezioni, come nel mio esempio o simile nel significato?

Contatta il servesdesk, crea un thread/sondaggio sul forum.

Non è passato molto tempo da quando MT4 è stato sepolto. Ora la tendenza, se non invertita, almeno la piattaforma e il linguaggio sono stati significativamente aggiornati di recente.

 
Yuri Evseenkov:

Contatta il servesdesk, crea un argomento/sondaggio sul forum.

Non è passato molto tempo da quando MT4 è stato seppellito. Ora la tendenza, se non invertita, almeno la piattaforma e il linguaggio sono stati significativamente aggiornati di recente.

è stato sepolto per la prima volta nel 2009

 

Salve. Se hai familiarità con l'argomento, per favore consiglia come risolvere questo problema. Voglio trovare i prezzi aperti delle barre a una certa ora, per esempio alle 01:00, analizzando per esempio le ultime 50 barre. Non sono sicuro di come affrontare questo compito in mql5.


Sia calcolando la data attuale + aggiungendovi il tempo richiesto e poi aggiungendo ventiquattro ore, questo metodo ha funzionato su mql4.

Per quanto ho capito, ci sono strutture speciali con output temporale, ma non posso usarle per qualche motivo.

Grazie in anticipo per il feedback.

Sarei molto grato se qualcuno potesse lanciarmi un piccolo pezzo di codice per capire il processo di pensiero.
 
Alex:

Salve. Se hai familiarità con l'argomento, per favore consiglia come risolvere questo problema. Voglio trovare i prezzi aperti delle barre a una certa ora, per esempio alle 01:00, analizzando per esempio le ultime 50 barre. Non sono sicuro di come affrontare questo compito in mql5.


Sia calcolando la data attuale + aggiungendovi il tempo richiesto e poi aggiungendo ventiquattro ore, questo metodo ha funzionato su mql4.

Per quanto ho capito, ci sono strutture speciali con output temporale, ma non posso usarle per qualche motivo.

Grazie in anticipo per la risposta.

Sarei molto grato se qualcuno potesse lanciarmi un po' di codice per capire il processo di pensiero.
In un indicatore o in un Expert Advisor / script?
 
Ciao, domanda: se uso ordersendasync in mt5 per un ordine pendente, come funziona? Per esempio, invierà un buy stop senza aspettare una risposta, ma quando l'ordine scatta, aspetterà che il server risponda all'ordine di acquisto?