Questions des débutants MQL4 MT4 MetaTrader 4 - page 201

 
Alexsandr San:

Vous le voulez pour mt4 ou mt5 ? J'ai supprimé le code que j'ai posté. Je n'ai pas remarqué immédiatement que mt4 était discuté ici.

MQL4

 
Speculator:

MQL4

Ici, beaucoup de bonnes choseshttps://www.mql5.com/ru/forum/131859/page6#comment_3359705
 
Bonjour, est-il possible de recevoir des notifications par téléphone/email dans MT4 lorsque le terminal est éteint, mais avec un serveur VPS connecté ?
 
Alexsandr San:

Je vous le conseille - il y a beaucoup de bonnes choses à trouversur https://www.mql5.com/ru/forum/131859/page6#comment_3359705.

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
Existe-t-il un moyen de voir à quoi ressemblera le code résultant de l'application des macros ?
 

Une question plus spécifique et peut-être intéressante :

J'utilise la même construction dans différentes fonctions

if(FileReadStruct(handle,temp_rate)!=60)
{
  IsError=true;
  Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError());
  return;
}

Cependant, certaines fonctions sont de type void et d'autres renvoient une valeur, je leur renvoie donc zéro :

return(0);

Puis-je faire une macro magique qui me substitue le bon dans chaque cas ?

 
Yurij Kozhevnikov:

Une question plus spécifique et peut-être intéressante :

J'utilise la même construction dans différentes fonctions

Cependant, certaines fonctions sont de type void et d'autres renvoient une valeur, je leur renvoie donc zéro :

Puis-je créer une telle macro magique, qui, dans chaque cas, substituerait pour moi la variante nécessaire ?

L'utilisation de return dans une macro est un pistolet armé pointé sur sa propre jambe, et lorsqu'il est combiné avec if - il se transforme en canon))). Mais si tu le veux vraiment :

#define  CHECK_READ(dHndl,dRate,dRet)  do \
if(FileReadStruct(dHndl,dRate)!=60){    \
  IsError=true;   \
  Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError()); \
  return dRet;} while(false)
  
...
CHECK_READ(handle,temp_rate,);
...
CHECK_READ(handle,temp_rate,0);
...

Je ne l'ai pas testé, mais ça devrait fonctionner. J'ai aussi transformé l'arme en pistolet))))

 

Merci !

Donc je passe dans le dernier paramètre soit une valeur pour le retour, soit un blanc, qui se transformera en

return ;

et un espace ne signifie rien. Bien sûr, comment ai-je pu oublier qu'il peut être utilisé sans mes supports préférés.

return(x);
return x; //равноценны

Au fait, pourriez-vous nous dire pourquoi cette construction est à l'intérieur d'une boucle, qui ne peut être exécutée qu'une seule fois ? Est-ce un canon transformé en arme ? Des situations possibles comme la récursion infinie ou quelque chose comme ça ?

 
Yurij Kozhevnikov:

Merci !

Donc je passe dans le dernier paramètre soit une valeur pour le retour, soit un blanc, qui se transformera en

et un espace ne signifie rien. Bien sûr, comment ai-je pu oublier qu'il peut également être utilisé sans mes supports préférés.

De plus, pouvez-vous me dire pourquoi cette construction est placée dans une boucle qui ne peut être exécutée qu'une seule fois ? Est-ce un pistolet transformé en pistolet ? Des situations possibles comme la récursion infinie ou quelque chose comme ça ?

si (condition) CHECK_READ(h,r,0) ; sinon CHECK_READ(h,r,1) ;
Déployez la macro sans le wrapper do-while et voyez ce qui se passe)))
 
Vladimir Simakov:
si (condition) CHECK_READ(h,r,0) ; sinon CHECK_READ(h,r,1) ;
Déployez la macro sans le wrapper do-while et voyez ce qui se passe))
if (condition) if(FileReadStruct(h,r)!=60){   
  IsError=true;   
  Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError()); 
  return 0;}; else if(FileReadStruct(dHndl,dRate)!=60){    
  IsError=true;   
  Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError()); 
  return dRet;};

=

if (condition) 
 if(FileReadStruct(h,r)!=60)
 {   
  IsError=true;   
  Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError()); 
  return 0;
 }; 
 else 
  if(FileReadStruct(dHndl,dRate)!=60)
  {    
   IsError=true;   
   Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError()); 
   return dRet;
  };

Cela semble être le cas, si je comprends bien le principe de substitution.

Des points-virgules superflus après des accolades. Et on ne sait pas très bien à quoi d'autre se réfère maintenant.

Il est dommage qu'il n'y ait apparemment pas de moyen facile d'automatiser l'expansion des macros pour voir ce qui se passe. A moins que vous ne puissiez créer votre propre script.

Merci ! Il y a une raison pour laquelle il n'y a pas de point-virgule après while dans la macro.

Raison: