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

 
EVGENII SHELIPOV #:

Guten Tag Makar !!!

Ihrem Rat folgend habe ich eine Stelle in der ungültigen OnTick()-Funktion gefunden, an der ich die TrailingGroupOrder()-Funktion anhängen kann, um einen Befehl zum Ändern einer Spur von Gruppenaufträgen zu senden, und oh mein Gott, die Spur von Gruppenaufträgen hat angefangen zu funktionieren. Meine Freude währte jedoch nicht lange. Bei näherer Betrachtung habe ich gesehen, dass nur die Bestellung mit einem Mindestticket ausgelöst wird.

Ich kann mit großer Wahrscheinlichkeit davon ausgehen, dass das Problem nur in der Änderung der ersten (minimalen) Bestellung liegt und nicht in der Änderung aller Bestellungen auf einmal.

Makar rät, wie man alle Aufträge im Grid???? ändern kann.

Zeigen Sie mir, wo Sie TrailingGroupOrder() in die Funktion void OnTick() einfügen?
 
MakarFX #:
Zeigen Sie mir, wo Sie TrailingGroupOrder() in die Funktion void OnTick() einfügen?


void OnTick()
{
     double JAW = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORJAW,0);
     double TEETH = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORTEETH,0);
     double LIPS = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORLIPS,0);
     double DI_PLUSCurrent=iADX(Symbol(),TimeframesIndicators,14, PRICE_CLOSE,MODE_PLUSDI,0);
     double DI_MINUSCurrent=iADX(Symbol(),TimeframesIndicators,14, PRICE_CLOSE,MODE_MINUSDI,0);
     double MacdCurrent=iMACD(Symbol(),TimeframesIndicators,12,26,9, PRICE_CLOSE,MODE_MAIN,0);
     double MacdPrevious=iMACD(Symbol(),TimeframesIndicators,12,26,9, PRICE_CLOSE,MODE_MAIN,2 ); 
     double ATR = iATR(Symbol(), TimeframesVolatility, BarCount, 0);
     {
      if (CountTrade() == 0)
      {
        if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0)
        if(LIPS>TEETH&& TEETH>JAW&&DI_PLUSCurrent>18&&DI_PLUSCurrent>DI_MINUSCurrent&&MacdCurrent>MacdPrevious)                              
         {
           FirstLots = Lots();
           tp = NormalizeDouble(Ask + TakeProfitFirstOrder*Point, Digits);
           ticket = OrderSend(Symbol(), OP_BUY, FirstLots, Ask, slip, 0, tp, "1-ый ордер", Magic, 0, Blue); 
         }
        if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0)
        if(LIPS<TEETH&& TEETH<JAW&&DI_MINUSCurrent>18&&DI_MINUSCurrent>DI_PLUSCurrent&&MacdCurrent<MacdPrevious)                            
         {
           FirstLots = Lots();
           tp = NormalizeDouble(Bid - TakeProfitFirstOrder*Point, Digits);
           ticket = OrderSend(Symbol(), OP_SELL, FirstLots, Bid, slip, 0, tp, "1-ый ордер", Magic, 0, Red); 
         }
       }
      if (CountTrade() == 1) Trailing();
     }
      if (CountTrade() < MaxOrders)                                                           
       {
           int order_type = FindLastOrderType();
           if (order_type == OP_BUY)
           { 
              price = FindLastOrderPrice(OP_BUY);  
              if(Ask<= price - Step()*Point)
              {
                  lastlot = NormalizeDouble(GetMinLotOrder()*MathPow( MultiplierParameter, OrdersTotal()), 2);
                  ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, slip, 0, 0, "Групповой ордер", Magic, 0, Blue);
                  if (ticket < 1)
                      Print ("Ошибка ордера на покупку");
                            ModifyOrders(OP_BUY);
              }
           }
             if (order_type == OP_SELL)
           { 
              price = FindLastOrderPrice(OP_SELL);  
              if(Bid>= price + Step()*Point)
              {
                  lastlot = NormalizeDouble(GetMinLotOrder()*MathPow( MultiplierParameter, OrdersTotal()), 2);
                  ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, slip, 0, 0, "Групповой ордер", Magic, 0, Red);
                  if (ticket < 1)
                      Print ("Ошибка ордера на продажу!");
                            ModifyOrders(OP_SELL);
              }
           }
         }
         if(CountTrade()>1)
          {
           TrailingGroupOrder();
          } 
         double op = CalculiteProfit(); 
         if (op > FindLastLots() && Drawdown > DrawdownClosingMinMaxOrders)
           {
           ClosseMinMaxOrders();
           } 
      Comment("Всего открыто ордеров : " + DoubleToStr(OrdersHistoryTotal(), 0)+ "\n" +
              "Максимальное количество : " + DoubleToStr(MaxOrders, 0)+ "\n" +
              "Количество открытых ордеров: " + DoubleToStr(OrdersTotal(), 0)+ "\n" +
              "Осталось ордеров: " + DoubleToStr((MaxOrders - OrdersTotal()), 0)+ "\n" +
              "Баланс средств счета: " + DoubleToStr(AccountBalance(), 0)+ "\n" +
              "Свободные средства: " + DoubleToStr(AccountFreeMargin(), 0)+ "\n" +
              "Относительная текущая просадка: " + DoubleToStr(((AccountBalance() - AccountFreeMargin())/AccountBalance())*100, 2)+ "\n" +
              "Относительная максимальная просадка: " + DoubleToStr(GetMaxDrawdown(), 2)+ "\n" +
              "Текущая прибыль/убыток: " + DoubleToStr(AccountProfit(), 2)+ "\n" +
              "Абсолютная максимальная прибыль: " + DoubleToStr(GetMaxProfit(), 2)+ "\n" +
              "Абсолютный максимальный убыток (просадка): " + DoubleToStr(GetMaxLoss(), 2)+ "\n" +
              "Плечо: " + DoubleToStr(AccountLeverage(), 0)+ "\n" + 
              "Своп: " + DoubleToStr(OrderSwap(), 2)+ "\n" + 
              "Коммссия: " + DoubleToStr(OrderCommission(), 2)+ "\n" + 
              "Шаг: "  + DoubleToStr(Step(), 0)+ "\n" + 
              "Минимальный тикет ордера: " + DoubleToStr(GetTicketMinOrder(), 0)+ "\n" + 
              "Максимальный тикет ордера: " + DoubleToStr(GetTicketMaxOrder(), 0)+ "\n" + 
              "Профит минимальный  ордера: " + DoubleToStr(GetProfitMinOrder(), 2)+ "\n" +  
              "Профит максимального  ордера: " + DoubleToStr(GetProfitMaxOrder(), 2)+ "\n" +
              "Профит суммарный: " + DoubleToStr(CalculiteProfit(),2));       
}
 
EVGENII SHELIPOV #:

Löschen Sie die rot markierten Elemente

void OnTick()
{
     double JAW = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORJAW,0);
     double TEETH = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORTEETH,0);
     double LIPS = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORLIPS,0);
     double DI_PLUSCurrent=iADX(Symbol(),TimeframesIndicators,14, PRICE_CLOSE,MODE_PLUSDI,0);
     double DI_MINUSCurrent=iADX(Symbol(),TimeframesIndicators,14, PRICE_CLOSE,MODE_MINUSDI,0);
     double MacdCurrent=iMACD(Symbol(),TimeframesIndicators,12,26,9, PRICE_CLOSE,MODE_MAIN,0);
     double MacdPrevious=iMACD(Symbol(),TimeframesIndicators,12,26,9, PRICE_CLOSE,MODE_MAIN,2 ); 
     double ATR = iATR(Symbol(), TimeframesVolatility, BarCount, 0);
     {
      if (CountTrade() == 0)
      {
        if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0)
        if(LIPS>TEETH&& TEETH>JAW&&DI_PLUSCurrent>18&&DI_PLUSCurrent>DI_MINUSCurrent&&MacdCurrent>MacdPrevious)                              
         {
           FirstLots = Lots();
           tp = NormalizeDouble(Ask + TakeProfitFirstOrder*Point, Digits);
           ticket = OrderSend(Symbol(), OP_BUY, FirstLots, Ask, slip, 0, tp, "1-ый ордер", Magic, 0, Blue); 
         }
        if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0)
        if(LIPS<TEETH&& TEETH<JAW&&DI_MINUSCurrent>18&&DI_MINUSCurrent>DI_PLUSCurrent&&MacdCurrent<MacdPrevious)                            
         {
           FirstLots = Lots();
           tp = NormalizeDouble(Bid - TakeProfitFirstOrder*Point, Digits);
           ticket = OrderSend(Symbol(), OP_SELL, FirstLots, Bid, slip, 0, tp, "1-ый ордер", Magic, 0, Red); 
         }
       }
      if (CountTrade() == 1) Trailing();
     }
      if (CountTrade() < MaxOrders)                                                           
       {
           int order_type = FindLastOrderType();
           if (order_type == OP_BUY)
           { 
              price = FindLastOrderPrice(OP_BUY);  
              if(Ask<= price - Step()*Point)
              {
                  lastlot = NormalizeDouble(GetMinLotOrder()*MathPow( MultiplierParameter, OrdersTotal()), 2);
                  ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, slip, 0, 0, "Групповой ордер", Magic, 0, Blue);
                  if (ticket < 1)
                      Print ("Ошибка ордера на покупку");
                            ModifyOrders(OP_BUY);
              }
           }
             if (order_type == OP_SELL)
           { 
              price = FindLastOrderPrice(OP_SELL);  
              if(Bid>= price + Step()*Point)
              {
                  lastlot = NormalizeDouble(GetMinLotOrder()*MathPow( MultiplierParameter, OrdersTotal()), 2);
                  ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, slip, 0, 0, "Групповой ордер", Magic, 0, Red);
                  if (ticket < 1)
                      Print ("Ошибка ордера на продажу!");
                            ModifyOrders(OP_SELL);
              }
           }
         }
         if(CountTrade()>1)
          {
           TrailingGroupOrder();
          } 
         double op = CalculiteProfit(); 
         if (op > FindLastLots() && Drawdown > DrawdownClosingMinMaxOrders)
           {
           ClosseMinMaxOrders();
           } 
      Comment("Всего открыто ордеров : " + DoubleToStr(OrdersHistoryTotal(), 0)+ "\n" +
              "Максимальное количество : " + DoubleToStr(MaxOrders, 0)+ "\n" +
              "Количество открытых ордеров: " + DoubleToStr(OrdersTotal(), 0)+ "\n" +
              "Осталось ордеров: " + DoubleToStr((MaxOrders - OrdersTotal()), 0)+ "\n" +
              "Баланс средств счета: " + DoubleToStr(AccountBalance(), 0)+ "\n" +
              "Свободные средства: " + DoubleToStr(AccountFreeMargin(), 0)+ "\n" +
              "Относительная текущая просадка: " + DoubleToStr(((AccountBalance() - AccountFreeMargin())/AccountBalance())*100, 2)+ "\n" +
              "Относительная максимальная просадка: " + DoubleToStr(GetMaxDrawdown(), 2)+ "\n" +
              "Текущая прибыль/убыток: " + DoubleToStr(AccountProfit(), 2)+ "\n" +
              "Абсолютная максимальная прибыль: " + DoubleToStr(GetMaxProfit(), 2)+ "\n" +
              "Абсолютный максимальный убыток (просадка): " + DoubleToStr(GetMaxLoss(), 2)+ "\n" +
              "Плечо: " + DoubleToStr(AccountLeverage(), 0)+ "\n" + 
              "Своп: " + DoubleToStr(OrderSwap(), 2)+ "\n" + 
              "Коммссия: " + DoubleToStr(OrderCommission(), 2)+ "\n" + 
              "Шаг: "  + DoubleToStr(Step(), 0)+ "\n" + 
              "Минимальный тикет ордера: " + DoubleToStr(GetTicketMinOrder(), 0)+ "\n" + 
              "Максимальный тикет ордера: " + DoubleToStr(GetTicketMaxOrder(), 0)+ "\n" + 
              "Профит минимальный  ордера: " + DoubleToStr(GetProfitMinOrder(), 2)+ "\n" +  
              "Профит максимального  ордера: " + DoubleToStr(GetProfitMaxOrder(), 2)+ "\n" +
              "Профит суммарный: " + DoubleToStr(CalculiteProfit(),2));       
}

Gelb hervorgehoben und an den Anfang gebracht

void OnTick()
{
      if (CountTrade() == 1) Trailing();
      if (CountTrade() > 1 ) TrailingGroupOrder();

     double JAW = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORJAW,0);
 
MakarFX #:

Löschen Sie die rot markierten Elemente

Gelbe Markierung bringt sie nach oben

Makar ist die Variante, die Sie mir gestern geschickt haben - es wäre sehr einfach, in dieser Variante werden die Aufträge auch fälschlicherweise geschlossen

 
EVGENII SHELIPOV #:

Makar, das ist die Variante, die Sie mir gestern geschickt haben - es wäre sehr einfach gewesen, in dieser Variante werden die Aufträge nicht korrekt geschlossen

Meine Korrekturen haben keinen Einfluss auf den Abschluss.

Noch eine Frage: Was bedeutet "tr" in der Funktion TrailingGroupOrder()?

if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - TrailingStopGroupOrder*Point, Digits), tp, 0))
 
EVGENII SHELIPOV #:

Makar, das ist die Variante, die Sie mir gestern geschickt haben - es wäre sehr einfach gewesen, in dieser Variante sind die Aufträge auch falsch abgeschlossen

Was meinen Sie damit, dass sie sich nicht richtig schließen lassen?
 
MakarFX #:
Was meinen Sie mit "nicht richtig schließen"?

Es werden nicht alle Aufträge aus dem Schleppnetz auf einmal geschlossen, sondern nur der Auftrag mit dem Mindestticket und so weiter, einer nach dem anderen

 
EVGENII SHELIPOV #:

Es werden nicht alle Aufträge aus dem Schleppnetz auf einmal geschlossen, sondern nur der Auftrag mit dem Mindestticket und so weiter, einer nach dem anderen

Ich werde es morgen überprüfen
 

Hallo zusammen, ich schreibe gerade einen Code für einen Schleppnetzplan von Gruppenaufträgen. Die Logik des Codes ist wie folgt:

Nachdem der zweite und die folgenden Aufträge geöffnet wurden, erhalten wir einen Befehl zum Ändern von Aufträgen ModifyOrders(), bei dem wir den Durchschnitt und dann die Gewinnmitnahme berechnen und alle Aufträge ändern, aber nur die Gewinnmitnahme.

Dann rufen wir die Funktion TrailingGroupOrder() aus der Funktion void OnTick() auf, wobei der Stop Loss in einen Trailing Stop geändert wird.

Die Frage ist, dass nur ein Auftrag mit einem Mindestticket geändert wird; dies ist nicht korrekt; alle Aufträge im Raster sollten geändert werden und bei TP oder SL schließen. Bitte helfen Sie mir, dies zu verstehen. Ich danke Ihnen im Voraus.

//+----------------------------------------------------------------------------+
//| Модификация групповых ордеров                                              |
//+----------------------------------------------------------------------------+
void ModifyOrders(int otype)
  {
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
           {
            if(otype == OP_BUY)
               tp = NormalizeDouble(GetAveragePrice() + TakeProfitGroupOrder*Point, Digits);
            if(otype == OP_SELL)
               tp = NormalizeDouble(GetAveragePrice() - TakeProfitGroupOrder*Point, Digits);
            if((otype == OP_BUY || otype == OP_SELL) && (Drawdown > DrawdownClosingTakeprofitZero))
               tp = NormalizeDouble(GetAveragePrice(), Digits);
           }
        }
     }
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
           {
            if(OrderModify(OrderTicket(), OrderOpenPrice(), 0, tp, 0))
               Print("Ордера успешно модифицированы!");
            else
               Print("Ошибка модификации ордеров!");
           }
        }
     }
  }
//+----------------------------------------------------------------------------+
//| Трейлинг стоп групповых ордеров                                            |
//+----------------------------------------------------------------------------+
void TrailingGroupOrder()
  {
   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 && Bid - GetAveragePrice() > TrailingStopGroupOrder*Point)
              {
               if(Bid - GetAveragePrice() > TrailingStopGroupOrder*Point || OrderStopLoss() == 0)
                 {
                  if(OrderStopLoss() < Bid - (TrailingStep + TrailingStopGroupOrder)*Point || OrderStopLoss() == 0)
                    {
                     if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - TrailingStopGroupOrder*Point, Digits), tp, 0))
                        Print("Ошибка модификации групповых ордеров на покупку!");
                    }
                 }
              }
            if(OrderType() == OP_SELL && GetAveragePrice() - Ask > TrailingStopGroupOrder*Point)
              {
               if(GetAveragePrice() - Ask > TrailingStopGroupOrder*Point || OrderStopLoss() == 0)
                 {
                  if(OrderStopLoss() > Ask + (TrailingStep + TrailingStopGroupOrder)*Point || OrderStopLoss() == 0)
                    {
                     if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + TrailingStopGroupOrder*Point, Digits), tp, 0))
                        Print("Ошибка модификации групповых ордеров на продажу!");
                    }
                 }
              }
           }
        }
     }
  }


 
EVGENII SHELIPOV #:

Hallo zusammen, ich schreibe gerade einen Code für einen Schleppnetzplan von Gruppenaufträgen. Die Codelogik für das Schleppnetz sieht folgendermaßen aus:

Warum diese Verdoppelung

            if(OrderType() == OP_BUY && Bid - GetAveragePrice() > TrailingStopGroupOrder*Point)
              {
               if(Bid - GetAveragePrice() > TrailingStopGroupOrder*Point || OrderStopLoss() == 0)
                 {
                  if(OrderStopLoss() < Bid - (TrailingStep + TrailingStopGroupOrder)*Point || OrderStopLoss() == 0)
                    {

So können Sie es tun

            if(OrderType() == OP_BUY && Bid - GetAveragePrice() > TrailingStopGroupOrder*Point)
              {
               if(OrderStopLoss() < Bid - (TrailingStep + TrailingStopGroupOrder)*Point || OrderStopLoss() == 0)
                  {


Zeigen Sie auch, welche Parameter

TrailingStep                
TakeProfitGroupOrder        
TrailingStopGroupOrder