Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 201

 
Alexsandr San:

Willst du es für mt4 oder mt5? Ich habe den Code, den ich gepostet habe, gelöscht. Ich habe nicht sofort bemerkt, dass mt4 hier diskutiert wurde

MQL4

 
Speculator:

MQL4

Hier, eine Menge guter Sachenhttps://www.mql5.com/ru/forum/131859/page6#comment_3359705
 
Hallo, ist es möglich, Telefon-/E-Mail-Benachrichtigungen in MT4 zu erhalten, wenn das Terminal ausgeschaltet ist, aber ein VPS-Server angeschlossen ist?
 
Alexsandr San:

Ich berate Sie - es gibt eine Menge guter Dinge zu findenhttps://www.mql5.com/ru/forum/131859/page6#comment_3359705

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
Gibt es eine Möglichkeit zu sehen, wie sich der resultierende Code durch die Anwendung von Makros entfalten wird?
 

Eine spezifischere und vielleicht interessante Frage:

Ich verwende das gleiche Konstrukt in verschiedenen Funktionen

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

Einige Funktionen sind jedoch vom Typ void und andere geben einen Wert zurück, so dass ich bei diesen Funktionen Null zurückgeben muss:

return(0);

Kann ich ein magisches Makro erstellen, das in jedem Fall das Richtige für mich austauscht?

 
Yurij Kozhevnikov:

Eine spezifischere und vielleicht interessante Frage:

Ich verwende das gleiche Konstrukt in verschiedenen Funktionen

Einige Funktionen sind jedoch vom Typ void und andere geben einen Wert zurück, so dass ich bei diesen Funktionen Null zurückgeben muss:

Kann ich ein solches magisches Makro erstellen, das mir in jedem Fall die erforderliche Variante ersetzt?

Die Verwendung von return in einem Makro ist eine gespannte Waffe, die auf das eigene Bein gerichtet ist, und wenn sie mit if kombiniert wird, verwandelt sie sich in eine Kanone))) Aber wenn Sie es wirklich wollen:

#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);
...

Ich habe es nicht getestet, aber es sollte funktionieren. Außerdem wurde die Waffe wieder in eine Pistole umgewandelt)))

 

Ich danke Ihnen!

Also übergebe ich im letzten Parameter entweder einen Wert für die Rückgabe oder ein Leerzeichen, das sich in

return ;

und ein Leerzeichen bedeutet nichts. Wie konnte ich nur vergessen, dass man sie auch ohne meine Lieblingsklammern verwenden kann.

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

Können Sie mir übrigens sagen, warum dieses Konstrukt innerhalb einer Schleife steht, die nur einmal ausgeführt werden kann? Ist es eine Pistole, die wieder zu einer Pistole wird? Gibt es mögliche Situationen wie unendliche Rekursion oder ähnliches?

 
Yurij Kozhevnikov:

Ich danke Ihnen!

Also übergebe ich im letzten Parameter entweder einen Wert für die Rückgabe oder ein Leerzeichen, das sich in

und ein Leerzeichen bedeutet nichts. Wie konnte ich nur vergessen, dass man sie auch ohne meine Lieblingsklammern verwenden kann.

Können Sie mir auch sagen, warum dieses Konstrukt in eine Schleife eingefügt wird, die nur einmal ausgeführt werden kann? Ist es eine Waffe, die wieder zu einer Waffe wird? Mögliche Situationen wie unendliche Rekursion oder ähnliches?

if (Bedingung) CHECK_READ(h,r,0); sonst CHECK_READ(h,r,1);
Setzen Sie das Makro ohne den do-while-Wrapper ein und sehen Sie, was passiert)))
 
Vladimir Simakov:
if (Bedingung) CHECK_READ(h,r,0); sonst CHECK_READ(h,r,1);
Setzen Sie das Makro ohne den do-while-Wrapper ein und sehen Sie, was passiert))
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;
  };

Das scheint der Fall zu sein, wenn ich das Substitutionsprinzip richtig verstehe.

Zusätzliche Semikolons nach geschweiften Klammern. Und es ist nicht klar, worauf sich das jetzt noch bezieht.

Es ist schade, dass es offenbar keine einfache Möglichkeit gibt, die Makroexpansion zu automatisieren, um zu sehen, was passiert. Es sei denn, Sie können Ihr eigenes Skript erstellen.

Ich danke Ihnen! Es gibt einen Grund dafür, dass in dem Makro nach while kein Semikolon steht.