Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 485

 
-Aleks-:

Bitte helfen Sie mir zu verstehen!

Ich muss den maximalen Drawdown an jedem Tag (lassen Sie es sein) finden (das Schreiben in die Datei geschieht einmal pro Tag) - MT4 Terminal.

Der maximale Drawdown ist der Abstand zwischen dem Höchststand und dem aktuellen Drawdown der Mittel, und der Drawdown der Mittel ist der aktuelle Verlust.

Ich habe den folgenden Code geschrieben

   if(Analiz_Prosadki==true)
     {
      if(ContolSavaTXT==1)
        {
         ProfitNew=0;
         ProfitMin=0;
         ContolSavaTXT=0;
        }

      if(ContolSavaTXT==0)
        {
         ProfitNew=AccountInfoDouble(ACCOUNT_PROFIT);
         BalansNew==AccountInfoDouble(ACCOUNT_BALANCE);  //Текузее значение баланса
         if (BalansNew>BalansMax) BalansMax=BalansNew;
         if (ProfitNew<ProfitMin && BalansNew>=BalansMax) ProfitMin=ProfitNew;
         if (ProfitNew<ProfitMin && BalansNew<BalansMax) ProfitMin=ProfitNew-(BalansMax-BalansNew);
        }

      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitMin);   // Пишем информацию в файл - функция возвращает 1
     }

Aber sie ist bei einigen Diagrammen korrekt und bei anderen abnormal.

Offenbar habe ich einen Fehler im Code oder in der Logik gemacht, aber ich kann nicht herausfinden, welchen.

Soweit ich weiß, sollte man vom Höchststand des Aktienkurses bis zum Tiefststand des Aktienkurses zählen, nicht vom Saldo, was die Drawdowns viel besser aussehen lässt!

Und benutzen Sie bitte die SRC-Schaltfläche, nicht irgendeine andere Schaltfläche, damit Ihr Code nicht in der Antwort wiederholt wird und die Website unübersichtlich macht!

 
Boris:

Soweit ich weiß, müssen Sie vom Höchststand des Eigenkapitals bis zum Tiefststand des Eigenkapitals zählen, nicht vom Saldo, was das Bild des Drawdowns wirklich abschwächt!

Und benutzen Sie bitte die SRC-Schaltfläche, nicht irgendeine andere Schaltfläche, damit Ihr Code nicht in der Antwort wiederholt wird und die Website unübersichtlich macht!

Ich habe den Saldo in Geldmittel umgewandelt - es stimmt immer noch nicht mit dem Tester überein - der Wert im Tester ist größer.ACCOUNT_PROFIT ist eigentlich ein Delta zwischen Saldo und Geldmitteln, vielleicht ist das der Punkt...Auf der anderen Seite ist die Aufgabe, herauszufinden, wie viel Geld der EA braucht, um zu arbeiten, und es macht keinen Sinn zu berücksichtigen, die maximale Höhe der Mittel, so scheint es mir...

Ich weiß nicht, was SRC ist, und deshalb benutze ich es auch nicht.

 
-Aleks-:

ACCOUNT_PROFIT ist eigentlich ein Delta zwischen Saldo und Fonds, vielleicht ist es das... Andererseits besteht die Aufgabe darin, herauszufinden, wie viel Geld benötigt wird, damit der EA funktioniert, und es macht keinen Sinn, den maximalen Geldbetrag zu berücksichtigen, so scheint es mir...

Ich weiß nicht, was SRC ist, und deshalb benutze ich es auch nicht.

Die Schaltfläche links neben der Videokamera (siehe oben) dient zum Einfügen von Codes!

Über Equity! Wenn Sie Saldo durch Eigenkapital ersetzt haben, müssen SieACCOUNT_PROFIT ausschließen, denn Eigenkapital = Saldo + Gewinn. Im Terminal sehen wir jedoch immer, dass sich das Eigenkapital ändert, und der Tester meldet, dass das Eigenkapital und die Drawdowns beim Schließen der Positionen fixiert sind, daher werden die zwischenzeitlichen Drawdowns vom Tester nicht fixiert. Infolgedessen ist die Marktsituation im Testgerät besser als in der Realität. In letzter Zeit drucke ich im Tester, in der Demo und in der Realität alle Informationen aus, die ich für jede Aktion eines EA benötige, also für das Öffnen, Ändern, Schließen usw., um Schwachsinn zu vermeiden, den ich weder von mir noch von anderen tolerieren kann! Aber das haben Sie wahrscheinlich schon bemerkt. ;)

 

Guten Abend, könnten Sie mir bitte sagen, über CTrailingFixedPips Klasse aus der Standardbibliothek, was ist die Bedeutung von "trailing" TakeProfit Ebene? Es wird nie erreicht werden, nicht wahr? Entweder verstehe ich etwas nicht oder den Code oder die Bedeutung.

Aus der Dokumentation:

"Wenn der Kurseinzug höher ist als das Stop-Loss-Niveau, wird ein neuer Stop-Loss-Kurs für die Position vorgeschlagen.Wenn die Bedingung der Stop-Loss-Änderung erfüllt ist und das Take-Profit-Niveau nicht Null ist, wird vorgeschlagen, einen neuen Take-Profit-Preis für die Positionfestzulegen. "

<Expert\Trailing\CTrailingFixedPips.mqh>

//+------------------------------------------------------------------+
//| Checking trailing stop and/or profit for long position.          |
//+------------------------------------------------------------------+
bool CTrailingFixedPips::CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp)
  {
...
...   
   delta=m_stop_level*m_adjusted_point;
   if(price-base>delta)
     {
      sl=price-delta;
      if(m_profit_level!=0) tp=price+m_profit_level*m_adjusted_point;
     }
...
  }
 
Hexen:

Guten Abend, könnten Sie mir bitte sagen, über CTrailingFixedPips Klasse aus der Standardbibliothek, was ist die Bedeutung von "trailing" TakeProfit Ebene? Es wird nie erreicht werden, nicht wahr? Entweder verstehe ich etwas nicht oder den Code oder die Bedeutung.

Aus der Dokumentation:

"Wenn der Kurseinzug höher ist als das Stop-Loss-Niveau, wird ein neuer Stop-Loss-Kurs für die Position vorgeschlagen.Wenn die Bedingung derStop-Loss-Änderung erfüllt ist und das Take-Profit-Niveau nicht Null ist,wird vorgeschlagen, einen neuen Take-Profit-Preis für die Positionfestzulegen. "

<Expert\Trailing\CTrailingFixedPips.mqh>

Wahrscheinlich handelt es sich um einen Druckfehler. Es sollte Stop Loss heißen.
 
Hexen:

Guten Abend, könnten Sie mir bitte sagen, über CTrailingFixedPips Klasse aus der Standardbibliothek, was ist die Bedeutung von "trailing" TakeProfit Ebene? Es wird nie erreicht werden, nicht wahr? Entweder verstehe ich etwas nicht oder den Code oder die Bedeutung.

Aus der Dokumentation:

"Wenn der Kurseinzug höher ist als das Stop-Loss-Niveau, wird ein neuer Stop-Loss-Kurs für die Position vorgeschlagen.Wenn die Bedingung der Stop-Loss-Änderung erfüllt ist und das Take-Profit-Niveau nicht Null ist, wird vorgeschlagen, einen neuen Take-Profit-Preis für die Positionfestzulegen. "

<Expert\Trailing\CTrailingFixedPips.mqh>

Nach dem obigen Code zu urteilen, bewegt sich TP synchron mit SL. Schrauben Sie einen solchen Trailing-Stop)
 
Boris:

Diese Schaltfläche links neben der Videokamera (siehe oben) dient zum Einfügen von Code!

Für den Code gibt es den Stil "Code", der aus dem Menü ausgewählt werden kann - den verwende ich.

Boris:

Über Equity! Wenn Sie Saldo durch Eigenkapital ersetzen, müssen SieACCOUNT_PROFIT ausschließen, denn Eigenkapital = Saldo + Gewinn. Im Terminal sehen wir jedoch immer, dass sich das Eigenkapital ändert, und der Tester meldet ein festes Eigenkapital und Drawdowns bei Positionsschluss, daher werden zwischenzeitliche Drawdowns vom Tester nicht festgelegt. Infolgedessen ist die Marktsituation im Testgerät attraktiver als in der Realität. In letzter Zeit drucke ich im Tester, in der Demo und in der Realität alle Informationen aus, die ich für jede Aktion eines EA benötige, also für das Öffnen, Ändern, Schließen usw., um Schwachsinn zu vermeiden, den ich weder von mir noch von anderen tolerieren kann! Aber das haben Sie wahrscheinlich schon bemerkt. ;)

Wenn die Festlegung des Drawdowns im Tester für den Bericht nur bei der Schließung der Position erfolgt wäre, gäbe es keinen Drawdown bei der Verwendung einer Order auf dem Markt, was aber nicht der Fall ist ;)

ACCOUNT_PROFIT = Funds-balance, also sehe ich keinen Grund, diesen Indikator nicht in Berechnungen zu verwenden...

 
-Aleks-:

Bitte helfen Sie mir zu verstehen!

Ich muss den maximalen Drawdown an jedem Tag (lassen Sie es sein) finden (das Schreiben in die Datei geschieht einmal pro Tag) - MT4 Terminal.

Der maximale Drawdown ist der Abstand zwischen dem Höchststand und dem aktuellen Drawdown der Mittel, und der Drawdown der Mittel ist der aktuelle Verlust.

Ich habe den folgenden Code geschrieben

   if(Analiz_Prosadki==true)
     {
      if(ContolSavaTXT==1)
        {
         ProfitNew=0;
         ProfitMin=0;
         ContolSavaTXT=0;
        }

      if(ContolSavaTXT==0)
        {
         ProfitNew=AccountInfoDouble(ACCOUNT_PROFIT);
         BalansNew== AccountInfoDouble(ACCOUNT_BALANCE);  //Текузее значение баланса
         if (BalansNew>BalansMax) BalansMax=BalansNew;
         if (ProfitNew<ProfitMin && BalansNew>=BalansMax) ProfitMin=ProfitNew;
         if (ProfitNew<ProfitMin && BalansNew<BalansMax) ProfitMin=ProfitNew-(BalansMax-BalansNew);
        }

      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitMin);   // Пишем информацию в файл - функция возвращает 1
     }

In einigen Diagrammen wird sie jedoch korrekt angezeigt, in anderen nicht, wobei die Diagramme optisch identisch sind.

Ich muss einen Fehler im Code oder in der Logik gemacht haben, aber ich kann nicht herausfinden, welcher es ist.

Ich habe einen Fehler im Code gefunden - ein zusätzliches Gleichheitszeichen sollte sein

 BalansNew=AccountInfoDouble(ACCOUNT_BALANCE); 

Aber auch das brachte mich der Lösung der Ursache für die Differenz zwischen der Potic-Berechnung und der Ausgabe im Tester nicht viel näher.

Ich habe Boris' Theorie mit Eigenkapitalberechnungen überprüft und das Ergebnis war ebenfalls negativ.

   if(Analiz_Prosadki==true)

     {

      if(ContolSavaTXT==1)

        {

         ProfitNew=0;

         ContolSavaTXT=0;

        }


      if(ContolSavaTXT==0)

        {

         BalansNew=AccountInfoDouble(ACCOUNT_EQUITY);  //Текущее значение баланса

         if (BalansNew>BalansMax) BalansMax=BalansNew;

         if (BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax;

         if (ProfitNew<ProfitMin) ProfitMin=ProfitNew;

        }


      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitNew);   // Пишем информацию в файл - функция возвращает 1

     }

Übrigens ist nicht klar, wie Eigenkapital und Saldo im Diagramm des Testers nicht synchronisiert sind, wenn nur ein Lot gehandelt wird.

 
-Aleks-:

Ich habe einen Fehler im Code gefunden - ein zusätzliches Gleichheitszeichen sollte so sein

 BalansNew=AccountInfoDouble(ACCOUNT_BALANCE); 

Doch auch dieser Fehler brachte mich der Lösung der Ursache für die Differenz zwischen den berechneten Aktien und dem Ergebnis im Prüfgerät nicht näher.

Ich habe Boris' Theorie mit Eigenkapitalberechnungen überprüft und das Ergebnis war ebenfalls negativ.

   if(Analiz_Prosadki==true)

     {

      if(ContolSavaTXT==1)

        {

         ProfitNew=0;

         ContolSavaTXT=0;

        }


      if(ContolSavaTXT==0)

        {

         BalansNew=AccountInfoDouble(ACCOUNT_EQUITY);  //Текущее значение баланса

         if (BalansNew>BalansMax) BalansMax=BalansNew;

         if (BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax;

         if (ProfitNew<ProfitMin) ProfitMin=ProfitNew;

        }


      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitNew);   // Пишем информацию в файл - функция возвращает 1

     }

Übrigens ist nicht klar, wie Equity und Balance im Tester auf dem Chart de-synchronisiert werden, wenn nur ein Lot gehandelt wird.

Um zu verstehen, "wie Eigenkapital und Saldo aus dem Gleichgewicht geraten sind", müssen wir verstehen, was der Saldo und was das Eigenkapital ist.

Saldo - der Betrag des Eigenkapitals auf dem Konto.

Eigenkapital - der aktuelle, variable Geldbetrag auf dem Konto.

Die gleiche Funktion ist in Ihrem Tester vorhanden, sie behebt den Drawdown, aber nicht so, wie Sie es wünschen.

Zusammenfassend lässt sich sagen, dass Sie zur Berechnung des maximalen Drawdowns eine statische oder globale Variable zur Speicherung des Wertes deklarieren und diese Variable dann genau wie in Ihrem Code umschreiben müssen.

Das haben Sie jetzt geschrieben...

if (BalansNew>BalansMax) BalansMax=BalansNew; // Если новое значение эквити больше зафиксированного в прошлый раз - перезапишем значение переменной

// но это не просадка, это максимальная прибыль

if (BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax;  // А здесь BalansNew уже равно BalansMax и эта строка не выполняется никогда...

Sie müssen zwei Variablen "max" und "min" erstellen und Werte in sie schreiben.

Und hier ist ein lauter Gedanke: Schreiben Sie in die Datei besser nicht für den Tag, sondern beim Abschluss des Auftrags und schreiben Sie die Variablen neu. In diesem Moment ist das Eigenkapital gleich dem Saldo, und wir sollten die Variable, in der Max und Min geschrieben werden, auf Null setzen.

 
Alexey Viktorov:

Um zu verstehen, "wie Eigenkapital und Gleichgewicht aus dem Gleichgewicht geraten sind", müssen Sie verstehen, was ein Gleichgewicht ist und was Eigenkapital ist.

Der Saldo ist der feste Betrag, der sich auf dem Konto befindet.

Eigenkapital - der aktuelle, variable Geldbetrag auf dem Konto.

Die gleiche Funktion ist in dem Testprogramm, das Sie gerade schreiben, vorhanden und behebt den Drawdown, aber nicht so, wie Sie es wünschen.

Zusammenfassend lässt sich sagen, dass Sie zur Berechnung des maximalen Drawdowns eine statische oder globale Variable zur Speicherung des Wertes deklarieren und diese Variable dann genau wie in Ihrem Code umschreiben müssen.

Das ist es, was Sie jetzt geschrieben haben...

if (BalansNew>BalansMax) BalansMax=BalansNew; // Если новое значение эквити больше зафиксированного в прошлый раз - перезапишем значение переменной

// но это не просадка, это максимальная прибыль

if (BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax;  // А здесь BalansNew уже равно BalansMax и эта строка не выполняется никогда...

Sie müssen zwei Variablen "max" und "min" erstellen und Werte in diese Variablen schreiben.

Und hier ist ein lauter Gedanke: Schreiben Sie in die Datei besser nicht für den Tag, sondern beim Abschluss des Auftrags und schreiben Sie die Variablen neu. In diesem Moment ist das Eigenkapital gleich dem Saldo, und wir sollten die Variable, in der Max und Min geschrieben werden, auf Null setzen.

Danke, dass Sie auf das Hilfeersuchen reagiert haben!

Die globale Variable ist für reale Marktoperationen relevant - ich brauche Testinformationen, deshalb habe ich mich nicht damit beschäftigt.

Was Eigenkapital und Saldo ist, weiß ich natürlich, aber ich habe es versäumt, den Drawdown zu berechnen. Meine Codebeispiele zeigen, dass ich versucht habe, sowohl Saldo und Fonds als Maximum als auch Saldo und Fonds als Minimum zu nehmen.

Warum glauben Sie, dass die Ungleichungif (BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax; niemals erfüllt ist? Es ist nur nicht auf der Bar erfüllt, wenn die neue Balance Maximum erreicht ist (oder Eigenkapital - immer noch nicht wahr), aber zu diesem Zeitpunkt fixiere ich den Gewinn DrawdownProfitMin=ProfitNew.

Die Aufzeichnung der Datei für den Tag ist relevanter, da der maximale Drawdown in der Regel nicht zum Zeitpunkt der Schließung einer Order erreicht wird und das Ziel darin besteht, den durchschnittlichen Geldbetrag zu berechnen, der für die Arbeit des Expert Advisors erforderlich ist.