Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1239

 
BarCloseB1 = iClose(nameSym,xPeriod,xshiftBar);
BarCloseB1Signal = iClose(nameSymSignal,xPeriod,xshiftBar)

Guten Tag!

Ich lerne den Schlusswert für das aktuelle Symbol und den anderen (den Signalwert für den aktuellen Balken), wenn ich einen neuen stündlichen Balken öffne.

Aber in Wirklichkeit entspricht der Wert für das aktuelle Instrument, während der Wert für das Signalinstrument den Wert des vorhergehenden Balkens annimmt, d.h. wenn xshiftBar = 1, dann nimmt esxshiftBar=2 für das Signalinstrument, d.h. einen Balken mehr

 
Vitaly Muzichenko:

Sie können nur das abheben, was Sie mit dieser Ressource verdient haben, nämlich den Verkauf von Software, Signalen und Computerleistung. Was eingegeben wird, kann nur für diese Ressource ausgegeben werden.

Vitaly, du hast das falsch verstanden. Sie müssen es zuerst abheben und können es dann, wenn Sie es brauchen, einzahlen.

 
Yerkin Sagandykov:

Guten Tag!

Ich lerne den Schlusswert für das aktuelle Symbol und den anderen (den Signalwert für den aktuellen Balken), wenn ich einen neuen stündlichen Balken öffne.

Aber in Wirklichkeit entspricht der Wert für das aktuelle Instrument, während der Wert für das Signalinstrument den Wert des vorhergehenden Balkens annimmt, d.h. wenn xshiftBar = 1, dann nimmt esxshiftBar=2 für das Signalinstrument, d.h. einen Balken mehr

Um dies zu überprüfen, ersetzen Sie die Variablen durch die Werte 1 und 2. Dann werden Sie wissen, wo der Fehler liegt.

 
Alekseu Fedotov:

Mit iCustom

Danke, aber können Sie mir bitte sagen, warum die gezeichneten Ebenen zu schnell nach unten fliegen?
Dateien:
snake.mq4  16 kb
 
Alexey Viktorov:

Zur Überprüfung setzen Sie die Werte 1 und 2 an die Stelle der Variablen. Dann werden Sie wissen, wo der Fehler liegt.

Das Problem ist nicht in den variablen Werten meiner Meinung nach. Ich habe gerade eine Neuberechnung in meinem Code bei der Ankunft einer neuen Stunde. und es stellt sich heraus, dass durch das aktuelle Symbol neue Bar erscheint und berechnet den Wert von bar = 1, aber durch das Signal-Symbol ist ein neuer Balken noch nicht gebildet hat oder etwas und berechnet Werte für bar = 2

 if  ( iTime(nameSym, LPeriod, 0 ) == counted_bar ) return; 
Обработчик события "новый бар"
Обработчик события "новый бар"
  • www.mql5.com
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
 
Yerkin Sagandykov:

Das Problem liegt meiner Meinung nach nicht in den Werten der Variablen. Ich habe gerade eine Neuberechnung in meinem Code, und es stellt sich heraus, dass für das aktuelle Symbol ein neuer Balken erscheint und der Balken =1 berechnet wird, aber für das Signalsymbol ist noch kein neuer Balken gebildet worden und die Werte für Balken =2 berechnet werden

Dann kann ich mit Sicherheit sagen, dass der neue Balken auf dem Signalsymbol erscheint. Und irgendwie warten auf diese neue Bar. Es gibt mehrere Möglichkeiten, und Sie müssen entscheiden, welche Sie verwenden möchten.

 

Grüße. Könnten Sie mir bitte einen Tipp geben?

Ich muss den maximalen Drawdown für die Aufträge eines bestimmten EAs berechnen.

Wenn ich nach allen Ordnungen zähle, dann tue ich das, und es passt zu den Ergebnissen von MT selbst:

      if(AccountEquity()>max_equity){
         max_equity=AccountEquity();
      }   
      if(max_drawdown_total<max_equity-AccountEquity()){
         max_drawdown_total=max_equity-AccountEquity();
      } 

Ich berechne es für einen Expert Advisor so:

      if(MoneyCount()>max_equity_1){
         max_equity_1=MoneyCount();
      }   
      if(max_drawdown_total_1<max_equity_1-MoneyCount()){
         max_drawdown_total_1=max_equity_1-MoneyCount();
      }

double MoneyCount(){
   double count=0;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic){
            count+=(OrderProfit()+OrderSwap()+OrderCommission()); //
         }   
      }
   }
   return count;
}

Ich glaube, dass die Ergebnisse im Testgerät gleich sein sollten, aber es gibt einen Unterschied (nicht sofort) von etwas mehr als einem Prozent. Was habe ich falsch gezählt?

 
Guten Tag. Könnten Sie mir bitte sagen, welche Sprache ich bevorzugen soll: mql4 oder 5? Und warum hat mt4 einen eingebauten Meta-Editor 5, oder gibt es den auch für mql4?
 
Hallo, könnten Sie bitte beraten, wie man Indikator-Werte in den Code zu reflektieren, wenn ein auf andere überlagert ist, z. B. ATR ist auf MA überlagert, ist es möglich, in MT4?
 
ZahvatkiN:
Hallo, könnten Sie bitte beraten, wie man Indikatorwerte in den Code zu reflektieren, wenn ein auf einem anderen überlagert wird, z. B. ATR auf MA überlagert wird, ist es in MT4 möglich?

Für MQL4 verwenden Sie iMAOnArray(), für MQL5 - wenn Sie ein iMA-Handle erstellen, geben Sie das Handle eines zuvor erstellten ATR anstelle des Preises an, zu dem der gleitende Durchschnitt berechnet wird

Grund der Beschwerde: