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

 
xyz999: 2) Wie ist es zu verstehen, wenn die Optimierung (Backtest) über einen Zeitraum von 10 Monaten durchgeführt wurde und z.B. die Option 1/4 Forward Test gewählt wurde:
Client-Terminal / Strategie-Tester / Backtesting / Forward Testing
 

Ich danke Ihnen.

Ja, über diesen Link.

http://www.metatrader5.com/ru/terminal/help/tester/tester_using/forward_testing.

Ich habe die Antwort auf meine zweite Frage gefunden. Auf die erste und dritte Frage gibt es jedoch KEINE Antwort.

Ich würde sie auch gerne haben.

Ich möchte die Ergebnisse und Kennziffern anderer Händler kennen. Denn meine Ergebnisse sind sehr alarmierend. Ich bin Wissenschaftler auf dem Gebiet der automatischen Steuerung und Modellierung nicht-stationärer Prozesse, wozu auch eine Grafik der Preisbewegung auf dem Markt gehört. Ich beschäftige mich seit vielen Jahren mit der Modellierung nichtstationärer Prozesse, und die Arbeitsweise des Testers passt in keiner Weise zu meiner langjährigen Erfahrung. Hier stimmt etwas nicht. Entweder verwende ich das Prüfgerät falsch oder es funktioniert nicht richtig. Das wollen wir gemeinsam herausfinden.

Mein Backtest, der streng nach dem Optimierungszeitraum durchgeführt wurde, zeigt 200 % des Gewinns, den wir während der Optimierung mit denselben Parametern hatten. Wenn wir jedoch andere Optimierungsparameter wählen und während des Optimierungszeitraums testen, erhalten wir einen um ein Vielfaches geringeren Gewinn. Das sollte nicht der Fall sein. Aus diesem Grund habe ich einige Fragen.

 
xyz999: Ich habe eine Antwort auf meine zweite Frage gefunden. Es gibt jedoch KEINE ANTWORT auf die erste und dritte Frage. Ich würde sie auch gerne haben.

Nun, es liegt nicht an mir, wie man sagt: "Was immer ich kann" (c). Ich bin weit vom eigentlichen Thema entfernt. Versuchen Sie, das Forum zu durchsuchen, vielleicht wurde das Thema Vorwärtsprüfung dort bereits diskutiert. Oder, wenn Sie das Thema für sehr wichtig halten, erstellen Sie einen neuen thematischen Zweig. Andernfalls gehen die Fragen in der allgemeinen Verzweigung verloren.

xyz999 : Ja, unter diesem Link https://www.metatrader5.com/ru/terminal/help/algotrading/testing habe ich die Antwort auf meine zweite Frage gefunden.

Im Terminal gibt es auch Referenzmaterial. F1.

 
mario065:

Das war sehr dumm von mir.

Ich habe den Körper des benutzerdefinierten gleitenden Durchschnittsindikators genommen und den MFI-Puffer hineingelegt.

Ich habe den Preis geändert.

Ich habe es für Sie als Experte getan, nur ein Indikator und ein Kommentar zur Überprüfung.

Danke, dass Sie die Nachricht nicht unbeantwortet gelassen haben. Leider lehnt das Prüfgerät die Glättung der anderen Indikatoren immer noch ab. Mein EA verwendet die Werte von zwei Indikatoren - MFI und DEMA - gleichzeitig. Ich habe Ihren Algorithmus mit MFI in meinem EA implementiert - vergeblich - ich konnte ihn nicht für die Optimierung der globalen Variablen ausführen.

Nochmals vielen Dank für Ihre Nachrichten.
 
Im Artikel über EA https://www.mql5.com/ru/articles/100 werden Bedingungen für das Öffnen von Positionen genannt, aber keine Bedingungen für das Schließen von Positionen.


   bool Buy_opened=false;  // переменные, в которых будет храниться информация 
   bool Sell_opened=false; // о наличии соответствующих открытых позиций

   if(PositionSelect(_Symbol)==true) // есть открытая позиция
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true;  //это длинная позиция
        }
      else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         Sell_opened=true; // это короткая позиция
        }
     }    
             
   bool Buy_Condition_1=...
   bool Buy_Condition_2=...
   bool Buy_Condition_3=...

   
 if(Buy_Condition_1 || Buy_Condition_2)
     { 
       if(Buy_Condition_3)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if(Buy_opened)
           {
            Alert("Уже есть позиция на покупку!!!");
            return;    // не добавлять к открытой позиции на покупку
           }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // последняя цена ask
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.magic = EA_Magic;                                            // Magic Number
         mrequest.type = ORDER_TYPE_BUY;                                       // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=10;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Ордер Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
            return;
           }
        }
      }
 
 bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
            return;    // закрыл
         }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена bid
         mrequest.sl = 0;
         mrequest.tp = 0;
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.magic = EA_Magic;                                            // Magic Number
         mrequest.type = ORDER_TYPE_SELL; // ордер на продажу                                     // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=10;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);

Anstelle der Fragezeichen habe ich PositionSelect(_Symbol) mit dem Wert true eingegeben, aber das hat nicht geholfen.


Frage. Was kann ich minimal ändern, um die Bedingungen für den Abschluss festzulegen?
Пошаговое руководство по написанию MQL5-советников для начинающих
Пошаговое руководство по написанию MQL5-советников для начинающих
  • 2010.06.09
  • Samuel
  • www.mql5.com
Написание советников на MQL5 проще чем кажется, вы легко можете этому научиться. В этом руководстве вы познакомитесь с основными моментами, необходимыми для написания простого советника на основе конкретной торговой стратегии. Рассмотрена структура советника, использование встроенных технических индикаторов и торговых функций, вопросы отладки и тестирования советника на исторических данных.
 
Lester:
In dem Artikel über den Expert Advisor https://www.mql5.com/ru/articles/100 werden die Bedingungen für das Öffnen von Positionen erwähnt, aber nicht die Bedingungen für das Schließen von Positionen.


Anstelle der Fragezeichen habe ich PositionSelect(_Symbol) mit dem Wert true eingegeben, aber das hat nicht geholfen.


Frage. Was kann ich mindestens ändern, um die Abschlussbedingungen festlegen zu können?

Sie haben eine Rückkehr nach Alert. Die Position wird wahrscheinlich nicht wegen dieser Rückkehr geschlossen. Bitte nehmen Sie es weg und versuchen Sie es erneut.

// есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
           return;    // закрыл
         }  


 
Danke, denn ich hatte das Gefühl, dass die Antwort sehr einfach ist und ganz in der Nähe liegt.
Bei den Fragezeichen stellte sich jedoch eine andere Frage.

Über den Algorithmus.

Unter geeigneten Bedingungen + keine Position - wird die Position geöffnet, und unter anderen Bedingungen und bei Vorhandensein einer offenen Position - wird die offene Position geschlossen.

Wenn ich mich nicht täusche - Existenz einer Position, nämlich Buy_opened

if(Buy_Condition_1 || Buy_Condition_2)
     { 
       if(Buy_Condition_3)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if(Buy_opened)
           {
            Alert("Уже есть позиция на покупку!!!");
            return;    // не добавлять к открытой позиции на покупку
           }        

gleich eins - löst Alarm und Rückkehr aus (kehrt zum Anfang zurück), und gleich null - eröffnet Kaufauftrag.

Frage. Was soll ich anstelle von Fragezeichen schreiben - die Bedingung einer offenen Order, damit der EA keine Position öffnet (in meinem Fall öffnet er eine Verkaufsorder)?

 bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
            return;    // закрыл
         }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена bid
         mrequest.sl = 0;
         mrequest.tp = 0;

Im Moment habe ich auch Buy_opened vorgeschrieben, weil die Bedingungen dieser Definition mit PositionSelect(_Symbol) zusammenhängen

Ich verstehe, dass die Fragen nichts bedeuten, da es möglich ist, schnell alle möglichen logischen Optionen auszuprobieren und zu testen, aber das Problem ist, dass der Tester-Bug mir nicht erlaubt, dies zu tun, aber es gibt eine Möglichkeit, tatsächlich auf M1 im echten Handelsmodus zu diagnostizieren.

 
Lester:
...

Ich verstehe, dass die Fragen nichts bedeuten, da man schnell alle möglichen logischen Optionen ausprobieren und testen kann, aber das Problem ist, dass der Tester-Bug mir nicht erlaubt, das zu tun, aber es gibt eine Möglichkeit, tatsächlich auf M1 im echten Handelsmodus zu diagnostizieren.

Ich verstehe Ihre Frage nicht ganz.

Und welchen Fehler haben Sie im Tester gefunden, der Sie daran hindert, den Test durchzuführen?

 
tol64:

Ich verstehe Ihre Frage nicht ganz.

Was ist der Fehler im Tester, der Sie daran hindert, den Test durchzuführen?

Ich habe es schon früher oder im Indikator-Zweig beschrieben. Die Dema, die sich auf den MFI-Indikator-Handle bezieht, wird nicht im MFI-Fenster angezeigt und daher funktioniert der Tester nicht, aber der Expert Advisor funktioniert. Dasselbe gilt für MA, AMA...!

Zur Frage. Was sollen wir anstelle der Fragezeichen schreiben, damit der Expert Advisor "versteht", dass es eine offene Position gibt und nicht eine Order eröffnet!

bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
           // Return убрал благодаря форуму ))
         }        
 
Lester:
Wie bereits beschrieben, oder im Indikatorzweig. Die Dema, die sich auf den MFI-Indikator-Handle bezieht, wird im MFI-Fenster nicht angezeigt, und daher funktioniert der Expert Advisor nicht. Das Gleiche gilt für MA und AMA.

Zur Frage. Was sollen wir anstelle von Fragezeichen schreiben, damit der EA "sieht", dass es eine offene Position gibt und keine Order eröffnet!

Wenn eine Position vorhanden ist (PositionSelect(_Symbol)) und alle anderen Bedingungen erfüllt sind, dann wird die Position geschlossen. Wenn die Rückgabe aus Ihrem Beispiel nicht entfernt wird, sollte die Bedingung wie folgt aussehen

if(!PositionSelect(_Symbol))
  {
   return;
  }

was bedeutet, dass, wenn es keine Position gibt, diese verlassen wird. Wenn es nicht beendet wird, führt das Programm den Code aus, der nach diesem Block kommt.

Aber ich würde die Prüfung auf Vorhandensein/Fehlen einer Position vor die Prüfung der Abschlussbedingungen stellen.