Eine Frage an MQL-Experten - Seite 13

 

Warum funktioniert der Code in der Schleife nicht?

while(!IsStopped())

{

Code

Schlaf(50);

}

aber bei Ticks funktioniert es gut

 
seka-s79:

Warum funktioniert der Code in der Schleife nicht?

Warum das Huhn nicht über die Straße rennt
 

А! Ich hab's! Ich danke Ihnen!!!

 

Problem mit Symbol() MT4:

2 Funktionen zur Veranschaulichung:

string   SymbolOK()
{

   string   value;
   string   argument = "ANYTHING";

   if(false)
   {
      value = argument;
   }

   return(value);

}

string   SymbolPROBLEM()
{

   string   value;
   string   argument = Symbol();

   if(false)
   {
      value = argument;
   }

   return(value);

}

Die Ausführung der ersten gibt einen leeren String aus:

int start()
{
   Comment(SymbolOK());
   return(0);
}

Aber die zweite Funktion gibt eine String-ID "EURUSD" aus (naja, hängt vom Chart ab, aber gibt aus, obwohl es nach der Logik der Funktion ein leerer String sein sollte):

int start()
{
   Comment(SymbolPROBLEM());
   return(0);
}

Helfen Sie mir zu verstehen, was los ist? Dankeschön

 
anton.veksler:

Problem mit Symbol() MT4:

2 Funktionen zur Veranschaulichung:

Die Ausführung der ersten gibt einen leeren String aus:

Aber die zweite Funktion gibt eine String-ID "EURUSD" aus (naja, hängt vom Chart ab, aber gibt aus, obwohl es nach der Logik der Funktion ein leerer String sein sollte):

Helfen Sie mir zu verstehen, was los ist? Dankeschön

Ihr if(false) wird nie funktionieren, also wird sich der Wert in keiner Weise ändern und höchstwahrscheinlich eine leere Zeichenkette sein. Ich weiß allerdings nicht, wie die Werte von String-Variablen eingeleitet werden. Vielleicht werden sie gar nicht initiiert, dann kann in Ihrer Version alles ausgegeben werden.
 
Sepulca:
Ihr if(false) wird nie funktionieren, also wird sich der Wert in keiner Weise ändern und höchstwahrscheinlich eine leere Zeichenkette sein. Ich weiß allerdings nicht, wie die Werte von String-Variablen eingeleitet werden. Vielleicht werden sie gar nicht initiiert, dann kann in Ihrer Version alles ausgegeben werden.

"...Wenn kein Anfangswert explizit festgelegt wird, wird eine numerische Variable mit Null (0) und eine String-Variable mit leerem String initialisiert....".
 
zoritch:
"...Wenn kein Anfangswert explizit festgelegt wird, wird eine numerische Variable mit Null (0) und eine String-Variable mit dem leeren String.... initialisiert".



Na bitte, Sie haben es sogar schon in der Dokumentation gefunden... Aber im Allgemeinen eine d...n... Frage. Machen Sie sich keine Mühe, es ist nicht so schwer, stattdessen zu tippen:

string   value;

etwa so:

string   value="ЭтоСтрокаПокаЕёЕщёНиктоНеТрогал";
 
Sepulca:



Na bitte, Sie haben es sogar in der Dokumentation gefunden... Aber im Allgemeinen ist es eine dumme Frage. Es ist nicht allzu schwer, stattdessen zu tippen:

etwa so:


Ich danke Ihnen für Ihre Antwort. Zur Dokumentation: Ich weiß, dass die String-Variable ohne explizite Initialisierung eine leere Zeichenkette ist, aber diese Funktion gibt einen Zeichencode des Tools zurück. D.h. wir werden nie in eine Bedingung (falsch absichtlich), so wie Wert wird Symbol() in dieser Version (dieses Beispiel der Funktion ist übertrieben), das heißt, mit impliziter Initialisierung der String-Variable ist nicht eine leere Zeichenfolge (und ich wirklich auf sie gezählt), aber etwas unklar, oder vielmehr der Mechanismus der impliziten String-Initialisierung ist nicht klar. Das "Ausfüllen" der Variablendeklaration ist nicht schwierig, es ist nur das Verhalten des Systems außerhalb der Dokumentation, das irgendwie verwirrend ist. Und vor allem geschieht dies, wenn Sie Symbol() verwenden.


string   SymbolPROBLEM()
{

   string   value;
   string   argument = Symbol();

   if(false)
   {
      value = argument;
   }

   return(value);

}
 

Guten Tag zusammen!

Ich habe einen Arbitrage Expert Advisor geschrieben. Das Einstiegssignal wird generiert, wenn die aktuelle Divergenz der Preislinien des DELTA_MA-Indikators den in den Parametern eingestellten DELTA-Wert überschreitet:

//жжжжжжжжжжжжжжжжжжжжжжж Ищем возможность войти в рынок жжжжжжжжжжжжжжжжжжжжжжжж
// Задаем ценовые линии МА на 1-м баре
  MA_1=   (iMA(Symbol_1,Period(),per2,0,ma_method,Price,1)-
           iMA(Symbol_1,Period(),per1,0,ma_method,Price,1)) ;  
  MA_2= (iMA(Symbol_2,Period(),per2,0,ma_method,Price,1)-
         iMA(Symbol_2,Period(),per1,0,ma_method,Price,1))   ;                 
 ДЕЛЬТА_MA  =   MathAbs(MA_1 - MA_2 ) ; //- разность ценовых линий на 1 баре        
//------------------------------------------------ 

if (ДЕЛЬТА_MA > ДЕЛЬТА && MA_1 > MA_2)//если линии разошлись больше заданного значения
       //(первыя выше второй), то продаем 1-й инструмент и покупаем/продаем второй 
      TradeDOWN=true;       else TradeDOWN=false;

Der EA funktioniert einwandfrei und korrekt! Die Probleme begannen, als ich einen Filter einfügen wollte, der den Einstieg nur erlaubt, wenn die erste Bedingung erfüllt ist - die Konvergenz der Kurslinien zur gleichen Zeit:

extern double       ДЕЛЬТА = 350;

extern string  ____F____  = "=== FILTER ===";
 extern bool     FILTER_= true; //Арбитр. вход реализуется только при схождении линий
Der Algorithmus für eine solche Bedingung ist wie folgt implementiert