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

 
Maksim Burov #:

Guten Tag.

Können Sie mir sagen, wie ich die erhaltenen Optimierungsparameter für einen anderen Zeitraum wiederholen kann?

Ich habe für das letzte halbe Jahr die Parameter für ein Währungspaar optimiert und in Excel aufgezeichnet. Ich habe den Zeitraum für das letzte Jahr genommen und möchte die Parameter ausführen. Wie kann ich sie wieder in den Tester oder Optimierer eingeben?
Prüfen Sie, was geht, was geht nicht, und notieren Sie es in Excel. Führen Sie dann zum Beispiel die letzten 2 Jahre durch.

Wählen Sie den Zeitraum aus, für den Sie Ihre Daten prüfen wollen. Klicken Sie dann auf der Registerkarte der ermittelten Parameter mit der rechten Maustaste auf die gewünschten Parameter und wählen Sie Einzeltest.
 
Roman Kutemov #:
Wählen Sie den Zeitraum aus, für den Sie Ihre Daten prüfen wollen. Klicken Sie dann auf der Registerkarte der erhaltenen Parameter mit der rechten Maustaste auf den gewünschten Parameter und wählen Sie Einzeltest.

Danke.
Und wie kann man alles im Bereich tun, ohne jeden Parameter einzeln anzusteuern?

 

Könnten Sie mir bitte bei den Berechnungen helfen?


Ich brauche einen Take-Profit 3 mal den Anschlag haben. Es scheint zu funktionieren, aber etwas ist falsch)). Der Roboter handelt mit Gold und Indizes, weigert sich aber, mit Währungen zu handeln (obwohl er alles korrekt berechnet).

Zuerst setze ich den Stop auf das Tief von Kerze 1:

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
      Print("Цена стопа ", stoploss);

Dann berechne ich den Abstand vom ASK zum Stop in Punkten und weise diesen Wert den Pert-Punkten zu:

//---Опредеяем размер стопа в пунктах
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   double points = NormalizeDouble((ask - low) / _Point, _Digits);
      Print("Размер стопа ", points);

Danach berechne ich den Stop auch in Pips:

//---Считаем тейкпрофит
   double TP = NormalizeDouble(points * 3, _Digits);
   Print("Размер тейка ", TP);


Dann eröffne ich ein Geschäft und füge TR zum ASK hinzu:

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, ask + TP,"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }


Und im Tester sind alle Berechnungen korrekt, in 5-stelligen Punkten, der Stop ist auch auf Low1, die Größe des Stops ist auch korrekt in 5-stelligen Punkten. Aber mit dem Take Profit stimmt etwas nicht, er liegt nicht bei 507 Pips, sondern bei 5070 Pips.



 

Hallo, Sergej.

Bei der Berechnung des Stopps geht man von der Entfernung im Preis zur Entfernung in Pips. Dann multipliziert man mit 3 und erhält den Abstand zum Takeout ebenfalls in Pips. Und dann addieren Sie die Anzahl der Pips zum Briefkurs.

Versuchen Sie, nicht durch die Größe eines Pips zu dividieren oder daran zu denken, wieder damit zu multiplizieren.

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
      Print("Цена стопа ", stoploss);

//---Опредеяем размер стопа
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   double points = NormalizeDouble((ask - low) / _Point, _Digits);
   double points = NormalizeDouble((ask - low), _Digits);
      
//--- ...

Oder wie folgt

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
   Print("Цена стопа ", stoploss);

//---Опредеяем размер стопа в пунктах (это целое число)
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   int points = (ask - low) / _Point;
   Print("Размер стопа ", points);

//---Считаем тейкпрофит
   int TP = points * 3;
   Print("Размер тейка ", TP);

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, NormalizeDouble(ask + TP * _Point, _Digits),"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }
 
Yuriy Bykov #:

Hallo, Sergei.


Ich danke dir sehr! Ich habe mich wirklich in den Preisen/Artikeln verirrt. Ich werde es jetzt versuchen)))

 
Jetzt ist alles gezählt und richtig eingestellt, aber nur auf USDJPY, XAUUSD und jeder Index. Aber auf Währungen wie USDCAD, EURUSD die Eule nicht Handel und sendet Fehler 4756. Ich habe den Wert in der Hilfe nachgeschlagen, aber es hat nicht geholfen)
 
Sergey Izhutov #:
Jetzt ist alles gezählt und richtig eingestellt, aber nur auf USDJPY, XAUUSD und jeder Index. Aber auf Währungen wie USDCAD, EURUSD die Eule nicht Handel und sendet Fehler 4756. Ich habe den Wert in der Hilfe nachgeschlagen, aber es hat nichts gebracht)

Machen Sie es wie im vorherigen Beitrag: Geben Sie den Code an, der Positionen für Sie öffnet. Dann sind Sie vielleicht in der Lage, einige Ratschläge zu geben. Es sollte keinen grundsätzlichen Unterschied zwischen USDJPY und USDCAD geben, höchstwahrscheinlich liegt ein trivialer Fehler vor.

 
Yuriy Bykov #:

Machen Sie es wie im letzten Beitrag:

Hier ist der Code

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, ask + BuyTP,"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }
                 else
                     {
                         // Получение кода ошибки
                         int error_code = GetLastError();
                         Print("Ошибка отправки заявки: ", GetLastError());
                     }
                  
                     return;
            }
            
    //---Открываем сделку на продажу
         if(Close < maHandle && Close < Open)
            {
               if(trade.Sell(Lot,_Symbol,SYMBOL_ASK,stoploss,ask - SellTP,"Это я, твой робот") == true)
                  {
                     Print("Открыта продажа");
                  }
                 else
                     {
                         // Получение кода ошибки
                         int error_code = GetLastError();
                         Print("Ошибка отправки заявки: ", GetLastError());
                     }
                  
                     return;
            }
 

Höchstwahrscheinlich liegt der Fehler hier:

if(Close > maHandle && Close > Open)

Nach Ihrer Logik sollte maHandle der Preis sein, und dies ist höchstwahrscheinlich ein Handle, d.h. eine ganze Zahl - die Seriennummer des Indikators unter allen geladenen Indikatoren. Schauen Sie in der MQL5-Hilfe nach, wie Sie die Indikatorwerte korrekt ermitteln können.

 
Yuriy Bykov #:

Hier liegt wahrscheinlich ein Irrtum vor:

Nach Ihrer Logik sollte maHandle der Preis sein, und das ist höchstwahrscheinlich ein Handle, d.h. eine ganze Zahl - die Seriennummer des Indikators unter allen geladenen Indikatoren. Schauen Sie in der MQL5-Hilfe nach, wie man Indikatorwerte korrekt ermittelt.

Ich habe am Abend dasselbe gedacht, nämlich dass ich es entfernen sollte. Ich habe mich noch nicht mit Indizes angefreundet. Ich erinnere mich nur vage daran, dass ich in 4 einfach geschrieben habe, dass Close > MA ist, und dort hat alles funktioniert. Ich werde versuchen, den Handle auszukommentieren und sehen, was dabei herauskommt.

Grund der Beschwerde: