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

 

Können Sie mir bitte einen geeigneten Zick-Zack-Kurs empfehlen... Ich benutze nämlich so einen und der wackelt manchmal ganz schön...


 

Bitte sagen Sie mir, ich verstehe nicht ganz - in der Tester-Chart ist die folgende, alle Ticks sind M1, ab Einzahlung 5000 aber Drawdown zeigt 62% (3325), ist es offensichtlich nicht auf dem Chart. Eine Diskrepanz?

Liegt es an der Qualität der Modellierung? Wie berechnet der Prüfer diese Absenkung? Wenn er sie berechnet, warum ist sie dann nicht auf der Aktienkurve zu sehen?



 
Aleksey Mavrin:

Wenn er sie berechnet, warum wird sie dann nicht in der Eigenkapitalkurve angezeigt?

MT4 zeigt die grüne Equity-Linie erst an, wenn eine Order geschlossen ist.

Aleksey Mavrin:

Die Drawdown-Rate beträgt 62 % (3325), während sie im Diagramm natürlich nicht angezeigt wird. Diskrepanz?

Der Tester berechnet den Drawdown auf der Grundlage des Eigenkapitals, aber in Bezug auf den Auftrag mit dem höchsten Drawdown, d. h., wenn Sie einen offenen Auftrag im Tester hatten und einen Durchschnittswert ermittelten, war Ihr Gesamtkapital vielleicht im Plus, aber der verlustreichste Auftrag hatte zu einem bestimmten Zeitpunkt des Tests einen hohen Drawdown.


HH: Die Qualität der Modellierung ist sehr gering, Sie testen den TS auf allen Ticks, aber ein sehr großer TF wird für den Test gewählthttps://www.mql5.com/ru/articles/1486

 
Igor Makanu:

MT4 zeigt die grüne Equity-Linie erst an, wenn eine Order geschlossen ist. Sobald sie geschlossen ist, erscheint die grüne Linie (MT5 hat diesen Nachteil nicht).

Der Tester berücksichtigt den Drawdown auf das Eigenkapital, aber relativ zu dem Auftrag mit einem maximalen Drawdown, d.h. Sie können einen offenen Auftrag im Tester gehabt haben und Sie haben einen Durchschnitt, Ihr Gesamtkapital kann im + gewesen sein, aber der verlustreichste Auftrag war in einem bestimmten Moment des Tests in einem großen Defizit


ZS: die Qualität der Simulation ist sehr niedrig, Sie testen den TS auf allen Ticks, aber ein sehr großer TF wurde für den Test gewählthttps://www.mql5.com/ru/articles/1486

Das stimmt, der Durchschnittswert. Jetzt ist es klarer, vielen Dank! Das Einzige, was an der Equity-Linie dran ist, ist.

Ich habe seinen Trading-Chart (ich meine Visualizer) grid-average analysiert, wie er ist, d.h. er hat sehr häufige Drawdowns und die Equity-Linie auf dem Chart spiegelt dies nicht wider, zum Beispiel hier

Handel 2018 Dec 04. Handel 1238, auf dem Chart ist dies in der Nähe der zweiten vom Ende vertikalen gestrichelten Linie, unter der die Handelsnummer 1251 ist. Es gibt keinen Hinweis auf einen Rückgang der grünen Linie.

D.h. es ist immer noch unklar, wie es gezeichnet wird, aber ich schließe daraus, dass es unmöglich ist, ihm zu vertrauen, und wir sollten MT5 nicht mehr benutzen)

R.S. Ich weiß nicht, warum die Qualität der Simulation so schlecht ist, TF ist M1, alle Ticks.


 
Aleksey Mavrin:

Das stimmt, der Durchschnittswert. Das macht jetzt mehr Sinn, vielen Dank! Das Einzige, was an der Equity-Linie dran ist, ist.

Ich habe seinen Trading-Chart (ich meine Visualizer) grid-average analysiert, wie er ist, d.h. er hat sehr häufige Drawdowns, und die Equity-Linie auf dem Chart spiegelt dies nicht wider, zum Beispiel hier

Handel 2018 Dec 04. Handel 1238, auf dem Chart ist dies in der Nähe der zweiten vom Ende vertikalen gestrichelten Linie, unter der die Handelsnummer 1251 ist. Es gibt keinen Hinweis auf einen Rückgang der grünen Linie.

D.h. es ist immer noch unklar, wie es gezeichnet wird, aber ich schließe daraus, dass es unmöglich ist, ihm zu vertrauen, und wir sollten MT5 nicht mehr benutzen)

R.S. Ich weiß nicht, warum die Qualität der Simulation so schlecht ist, TF ist M1, alle Ticks.


Der MetaTrader 4-Tester ist dem MetaTrader 5-Tester sehr unterlegen. Es kann keine Mittel anzeigen, bis etwas geschlossen wird - es zeigt sie nur zum Zeitpunkt der Gewinn-/Verlustnahme an. In Ihrem Bild werden alle Short-Positionen auf einmal geschlossen, deshalb gibt es im Bericht keine Equity-Linie zwischen Eröffnung und Schließung. Wenn Sie zwischen der Eröffnung und derSchließung der Positionen auf Ihrem Screenshot mindestens eine Position geschlossen hätten, würde der Equity Drawdown, den Sie zum Zeitpunkt der Schließung hatten, in Ihrem Bericht erscheinen. Das heißt, der Bericht würde zwei Inanspruchnahmen ausweisen - in der Bilanz durch die Schließung einer Position mit einem Verlust und in den Fonds - durch die Inanspruchnahme der aktuellen Mittel aufgrund des aktuellen gleitenden Verlusts in den Fonds aller offenen Positionen.

 
Aleksey Mavrin:

D.h. es ist noch unklar, wie es zustande kommt, aber es lässt den Schluss zu, dass man ihm in keiner Weise trauen kann und es auf MT5 schieben sollte)

dem Sie vertrauen können, aber Sie müssen den gesamten Testerbericht lesen

Fügen Sie Ihre Schätzung des Drawdowns in den Code ein und zeigen Sie sie im Protokoll in OnDeinit() an, wenn Sie überprüfen wollen, wie der Tester den maximalen Drawdown berechnet, dann etwas wie dieses

double minOrderProfit = 0.0;

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Print("minOrderProfit = ",minOrderProfit);
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   for(int i=0;i<OrdersTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) minOrderProfit = fmin(minOrderProfit,OrderProfit());
   }

// основной код

   
  }
//+------------------------------------------------------------------+


ZS: nicht überprüft, aber es sollte funktionieren

 
Igor Makanu:

dem Sie vertrauen können, aber Sie müssen den gesamten Testerbericht lesen

Fügen Sie Ihre Schätzung des Drawdowns in den Code ein und geben Sie sie in OnDeinit() im Protokoll aus. Wenn es darum geht, den Tester bei der Berechnung des maximalen Drawdowns zu überprüfen, dann etwa so


ZS: nicht überprüft, aber es sollte funktionieren

Ich habe es verstanden, danke. Ich sammle alle Statistiken in meinen EAs und für Tester-Optimierer im Allgemeinen, ich zähle Sharps-Koeffizienten und andere, Volatilität und DD, etc. täglich, monatlich, insgesamt, natürlich, alles, was ich kann.

Und dies war ein Experiment mit einem Roboter von Market, ich habe es zu überprüfen, weil ich weiß, dass eine solche Kurve Chart kann nicht mit solchen Mega-Profits existieren. Ich war davon überzeugt, dass ich Recht hatte, z.B. aufgrund der Art und Weise, wie die Aktienkurve in MT4 angezeigt wird

Ich habe mich vergewissert, dass ich richtig liege, denn durch die Art und Weise, wie die Equity-Kurve im MT4 angezeigt wird, werden die Fähigkeiten des Produkts falsch eingeschätzt (wenn Sie sich den Trade-Chart ansehen), während die Charts im Markt herumstochern, verstehen Sie? :) s.s. sie verkaufen Scheiße an Menschen

 

Guten Tag.

Ich habe einen Indikator geschrieben, muss aber feststellen, dass es einen Fehler gibt!!! Frage an die rote horizontale Linie (vom Beginn der Tagessitzung).

Ich habe versucht, es aus irgendeinem Grund zu verwenden, aber es hat in den Expertenberatern nicht richtig funktioniert, undich glaube nicht, dass ich es richtig gemacht habe. Und er schwört auf den Eintrag in EAs.

(2019.12.19 11:25:31.532 Session Day (EURUSDrfd,H1) array out of range in 'Session Day.mq5' (144,41)

Hilfe aus der Halle...

Vielen Dank im Voraus für den Tipp!


PS

ROTE LINIE Richtung (Sitzungseröffnung) ist RECHTS, von heute bis gestern!!!!!!!

//+------------------------------------------------------------------+
//|                                                  Session Day.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots   2
//---- plot ColorCandles
#property indicator_type1   DRAW_CANDLES
#property indicator_color1  White,Blue,Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#property indicator_label1  "Open;High;Low;Close"
//----
#property indicator_type2   DRAW_LINE
#property indicator_color2  Red
#property indicator_style2  STYLE_SOLID
#property indicator_width2  3
#property indicator_label2  "Line open session"
//-----
input int     StartCandle = 100;         //Кол-во свечек для расчета средней
input int     StartBarDay = 0;           //Час начала торгового дня
input int     BarSession1 = 10;          //Чвс Открытия дневной сессии
input int     BarSession2 = 19;          //Чвс Закрытия дневной сессии
input bool    LevelOpenSession = true;   //Уровень открытия сессии дня
//---
double ExtOpenBuffer[];
double ExtHighBuffer[];
double ExtLowBuffer[];
double ExtCloseBuffer[];
double ExtBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtOpenBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtHighBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,ExtLowBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,ExtCloseBuffer,INDICATOR_DATA);
   SetIndexBuffer(4,ExtBuffer,INDICATOR_DATA);
//--- установим цвет контура и теней
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrWhite);
//--- установим цвет тела для бычьей свечи
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrBlue);
//--- установим цвет тела для медвежьей свечи
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrRed);
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
   if(Period()<PERIOD_H4)
      IndicatorSetString(INDICATOR_SHORTNAME,"Session Day \nOpen session: "+string(BarSession1)+" hour \nClose session: "+string(BarSession2)+" hour");
   else
      IndicatorSetString(INDICATOR_SHORTNAME,"Session Day");
   int bars=iBars(NULL,_Period);
   for(int b=0; b<5; b++)
      PlotIndexSetInteger(b,PLOT_DRAW_BEGIN,bars-StartCandle);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int i;
   if(rates_total<24)
      return(0);
   MqlDateTime tm;
//----
   if(prev_calculated==0)
     {
      ArrayInitialize(ExtOpenBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtHighBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtCloseBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtBuffer,EMPTY_VALUE);
      i=0;
     }
   else
      i=prev_calculated-1;
//----
   while(i<rates_total && !IsStopped())
     {
      TimeToStruct(time[i],tm);
      if(Period()==PERIOD_MN1 && (tm.mon==4 || tm.mon==8 || tm.mon==12))
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()==PERIOD_W1 && tm.mon>=1 && tm.mon<=12 && tm.day>=1 && tm.day<8)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()==PERIOD_D1 && tm.day_of_week==1)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()==PERIOD_H4 && tm.hour==StartBarDay && tm.min==0)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()<=PERIOD_H1 && tm.hour==BarSession1 && tm.min==0)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()<=PERIOD_H1 && tm.hour==BarSession2 && tm.min==0)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }


                     ПРОБЛЕМА !!!!!
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      if(LevelOpenSession==true && Period()==PERIOD_H1 && tm.hour==BarSession1 && tm.min==0)
         for(int j=0; j<24; j++)
           {
            ExtBuffer[i-j]=open[i];
            if(ExtBuffer[i-j]!=ExtBuffer[i-j-1])
               ExtBuffer[i-j-1]=EMPTY_VALUE;
           }
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      //---
      i++;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+




 
kopeyka2:

Guten Tag.

Ich habe einen Indikator geschrieben, muss aber feststellen, dass es einen Fehler gibt!!! Frage an die rote horizontale Linie (vom Beginn der Tagessitzung).

Ich habe versucht, es aus irgendeinem Grund zu verwenden, aber es hat in den Expertenberatern nicht richtig funktioniert, und ich glaube nicht, dass ich es richtig gemacht habe. Und er schwört auf den Eintrag in EAs.

(2019.12.19 11:25:31.532 Session Day (EURUSDrfd,H1) array out of range in 'Session Day.mq5' (144,41)


 ExtBuffer[i-j]=open[i];
            if(ExtBuffer[i-j]!=ExtBuffer[i-j-1])
               ExtBuffer[i-j-1]=EMPTY_VALUE;

An dieser Stelle greifen Sie irgendwann auf einen negativen Array-Index zu. Prüfen Sie das Setzen und Überprüfen aller Randbedingungen für i, j

 
Artyom Trishkin:

Der MetaTrader 4-Tester ist dem MetaTrader 5 deutlich unterlegen. Es kann keine Mittel anzeigen, bis etwas geschlossen wird - es zeigt sie nur im Moment der Gewinn-/Verlustnahme an. In Ihrem Bild wurden alle Short-Positionen auf einmal geschlossen, deshalb gibt es im Bericht keine Equity-Linie zwischen Eröffnung und Schließung. Wenn Sie zwischen der Eröffnung und der Schließung der Positionen auf Ihrem Screenshot mindestens eine Position geschlossen hätten, würde der Equity Drawdown, den Sie zum Zeitpunkt der Schließung hatten, in Ihrem Bericht erscheinen. Das heißt, der Bericht würde zwei Inanspruchnahmen ausweisen - in der Bilanz durch die Schließung einer Position mit einem Verlust und in den Fonds - durch die Inanspruchnahme der aktuellen Mittel aufgrund des aktuellen gleitenden Verlusts in den Fonds aller offenen Positionen.

Das ist eine ziemlich klare Beschreibung, danke. Aus irgendeinem Grund habe ich den Beitrag zuerst nicht bemerkt(

Und dann eine Frage) - Abfrage innerhalb des Testers von Funktionen von Informationen über den Zustand des Kontos wie AccountEquity, etc. - es ein korrektes Bild gibt, unabhängig davon, ob eine Position geschlossen ist oder nicht?

Wenn z. B. langfristige Geschäfte eröffnet werden und der Equity Drawdown jeden Tag aufgezeichnet wird, wird der Prüfer nicht schummeln?

Grund der Beschwerde: