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

 
Mihail Matkovskij #:

Der Trailing Edge sollte ausgelöst werden, wenn sich der Kurs in Richtung des TP bewegt, und nichts tun, wenn der Kurs zurückgeht. Der SL-Level sollte nur in Richtung des TP gehen und nicht zurückfallen.

Ich weiß

Ich schrieb.

es gibt eine unendliche Anzahl von Stop-and-Take-Positionen, die man sofort einnehmen kann

2021.12.23 21:07:51.634 2021.12.21 21 21:12:20 111 AUDUSD,M15: Kaufauftragsänderung erfolgreich!

2021.12.23 21:07:51.634 2021.12.21 21 21:12:20 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71288 tp: 0.72038 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:18 111 AUDUSD,M15: Buy Order Modification erfolgreich!

2021.12.23 21:07:51.634 2021.12.21 21 21:12:18 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71268 tp: 0.72018 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:16 111 AUDUSD,M15: Buy Order Modification erfolgreich!

2021.12.23 21:07:51.634 2021.12.21 21 21:12:16 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71248 tp: 0.71998 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:15 111 AUDUSD,M15: Buy Order Modification erfolgreich!

2021.12.23 21:07:51.634 2021.12.21 21 21:12:15 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71228 tp: 0.71978 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:13 111 AUDUSD,M15: Buy Order Modification erfolgreich!

2021.12.23 21:07:51.634 2021.12.21 21 21:12:13 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71208 tp: 0.71958 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:11 111 AUDUSD,M15: Buy Order Modification erfolgreich!

2021.12.23 21:07:51.634 2021.12.21 21 21:12:11 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71188 tp: 0.71938 ok

2021.12.23 21:07:51.634 2021.12.21 12:12:10 111 AUDUSD,M15: Buy Order Modification erfolgreich!

2021.12.23 21:07:51.634 2021.12.21 21 21:12:10 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71168 tp: 0.71918 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:08 111 AUDUSD,M15: Buy Order Modification erfolgreich!

2021.12.23 21:07:51.634 2021.12.21 21 21:12:08 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71148 tp: 0.71898 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:06 111 AUDUSD,M15: Buy Order Modification erfolgreich!

2021.12.23 21:07:51.634 2021.12.21 21 21:12:06 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71128 tp: 0.71878 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:05 111 AUDUSD,M15: Buy Order Modification erfolgreich!

2021.12.23 21:07:51.634 2021.12.21 21 21:12:05 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71108 tp: 0.71858 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:00 111 AUDUSD,M15: Modify Buy Order erfolgreich!

2021.12.23 21:07:51.634 2021.12.21 21 21:12:00 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71088 tp: 0.71838 ok

2021.12.23 21:07:51.634 2021.12.21 12:11:53 111 AUDUSD,M15: Buy Order Modification erfolgreich!

2021.12.23 21:07:51.634 2021.12.21 12:11:53 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71068 tp: 0.71818

2021.12.23 21:07:51.634 2021.12.21 12:11:52 111 AUDUSD,M15: Modify Buy Order erfolgreich!


 
законопослушный гражданин #:

Ich weiß.

Ich schrieb.

der Stopp und die Aufnahme werden sofort unendlich oft verschoben

Sie sollten den SL des zu ändernden Auftrags ermitteln und ihn mit dem berechneten SL vergleichen. Wenn sie gleich sind, sollte der Roboter nichts tun, bis der berechnete SL den SL des zu bearbeitenden Auftrags übersteigt. So vergleichen Sie zwei Double-Werte: entweder vergleichen Sie NodmalizeDouble(value, Digits) (von jedem Wert) oder EqualDoubleshttps://www.mql5.com/ru/docs/basis/types/double

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Вещественные типы (double, float) - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
законопослушный гражданин #:

Ich weiß.


Sie haben es richtig eingestellt. Haben Sie etwas innerhalb der Funktion TrailingOrders() geändert?

 
Mihail Matkovskij #:

Sie sollten den SL der zu ändernden Order ermitteln und mit dem berechneten SL vergleichen. ...

Im Allgemeinen gelten die folgenden Regeln.

  • Der berechnete SL ist kleiner als der SL des Auftrags (ungünstiger) - nichts tun
  • Der berechnete SL ist gleich dem SL des Auftrags - nichts tun
  • Der berechnete SL übersteigt den SL des Auftrags (profitabler) - ändern Sie ihn mit dem berechneten Wert
Mit diesen Schleppnetzregeln können fast alle Schleppnetze mit beliebigen SL-Berechnungsalgorithmen erstellt werden.
 
Tretyakov Rostyslav #:

Sie haben es richtig eingestellt. Haben Sie etwas innerhalb der Funktion TrailingOrders() geändert?

Ich änderte sie und stellte sie so ein, wie sie war, und das Ergebnis war das gleiche.

 
законопослушный гражданин #:

Ich habe es geändert und "so wie es ist" eingesetzt, und das Ergebnis ist das gleiche.

Es ist notwendig, die Eingabeparameter zu sehen, denn das Protokoll zeigt, dass das Schleppnetz korrekt funktioniert
 
Tretyakov Rostyslav #:
Wir müssen die Eingabeparameter sehen, denn laut Protokoll funktioniert das Schleppnetz korrekt

2021.12.24 16:10:14.788 2021.12.17 00:00:00 111 - Kopie: Lot=0.01; StopLoss=200; TakeProfit=560; Slippage=3; Magic=1; K_Martin1=0.01; K_Martin2=1.9; K_Martin3=1.4; OrdersClose=3; OrdersClose2=5; DigitsLot=2; PeriodMA=21; MovingShift=1;


 
законопослушный гражданин #:

2021.12.24 16:10:14.788 2021.12.17 00:00:00 111 - Kopie: Lot=0.01; StopLoss=200; TakeProfit=560; Slippage=3; Magic=1; K_Martin1=0.01; K_Martin2=1.9; K_Martin3=1.4; OrdersClose=3; OrdersClose2=5; DigitsLot=2; PeriodMA=21; MovingShift=1;


Vielleicht habe ich die Funktion falsch in den Code eingefügt?

void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.
   TrailingOrders();
// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     } 
       DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2)));
       DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2))); 
  }

und die Funktion selbst separat einfügen

//-------------------------------------------------------------------+

void TrailingOrders()
  {
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY)
              {
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.75*_Point) && OrderStopLoss()<OrderOpenPrice()-20*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss()+20*_Point, OrderTakeProfit()+20*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.9*_Point) && OrderStopLoss()>=OrderOpenPrice()-20*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss()+30*_Point, OrderTakeProfit()+10*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
              }
           }
        }
     }
  }
 
законопослушный гражданин #:

Habe ich die Funktion falsch in den Code eingefügt?

und die Funktion selbst separat einfügen

//-------------------------------------------------------------------+

void TrailingOrders()
  {
   
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY)
              {
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.75*_Point) && OrderStopLoss()<=OrderOpenPrice()-StopLoss*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice()-(StopLoss+20)*_Point, OrderTakeProfit()+20*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.9*_Point) && OrderStopLoss()>=OrderOpenPrice()-(StopLoss+20)*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss()+30*_Point, OrderTakeProfit()+10*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
              }
           }
        }
     }
  }

Die Spur ist korrekt.

Probieren Sie es so

 
Tretyakov Rostyslav #:

Der Wagen steht richtig.

Versuchen Sie dies.

ins All abheben

Der Stopp hält zuerst an und fliegt dann sofort zusammen mit dem Take ins All (und schließt den Auftrag unterwegs ab).

Das ist nicht das Problem, wie ich es verstehe.

korrigieren Sie mich, wenn ich falsch liege: void OnTick()

wenn keine offenen Aufträge vorhanden sind und ein Signal vorliegt, dann vOrderOpenBuy() / vOrderOpenSell()

Dann kommt void vOrderModify(int iOTi) - d.h. sie setzen Stopps und takei und prüfen dann auf Fehler.

Das heißt, dass es nicht möglich ist, den Auftrag im Sinne des Trailing zu korrigieren, solange er nicht zum Stop oder Take geschlossen wird.

Sie benötigen ein (maximal zwei) Mehrfaches von "stop and take".

Wenn Sie den Trailing-Stop ändern und einen Gewinn mitnehmen möchten, müssen Sie anders vorgehen.

Ich überlege noch, wie ich es umsetzen kann.

Dateien:
111.mq4  25 kb