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

 
Andrey Sokolov #:

Haben Sie ein 24-Stunden-Gedächtnis?

Nein. Ich habe noch nicht herausgefunden, wie ich das, was ich brauche, umsetzen kann - vielleicht klappt es ja bei der zweiten Iteration;-)
 
DanilaMactep #:
Nein. Ich habe noch nicht herausgefunden, wie ich das, was ich brauche, umsetzen kann - vielleicht gelingt mir das bei der zweiten Iteration;-)

Maxim Kuznetsov hat Ihnen gesagt wie. Haben Sie es gelesen?

 

Guten Tag, bitte helfen Sie bei der Lösung des Problems mit dem falschen Abschluss von Aufträgen

Wenn ein positiver Gewinn erzielt wird, schließt der Expert Advisor den ersten und den letzten Auftrag im Auftragsgitter

Bei einem Demokonto ist alles in Ordnung, aber bei einem echten Konto wird nur der vorletzte Auftrag geschlossen. Ich stand vor einem solchen Problem, als ich das gesamte Auftragsnetz schließen musste und das Problem in den Requotes lag, dann wurde das Flag gesetzt und das Problem ist gelöst. Hier habe ich das Gleiche getan, aber das Problem ist nicht gelöst.

Fahne:

int flag_close3=0;
//-------------------------------------------------------------------+  Команда на закрытие мин макс и предпоследнего ордеров в сетке профит = 0
   if(CalculiteProfitMinMaxPenultimateOrders() >= 0 && Drawdown >= DrawdownClosingMinMaxOrdersZero && FindPenultimateProfit() > 0)
     {
       flag_close3=1;
     }
//-------------------------------------------------------------------+  Флаг на закрытие  ордеров
   if(flag_close3==1)
      ClosseMinMaxPenultimateOrdersZero();
//+----------------------------------------------------------------------------+
//| Закрытие минимального максимального и предпоследнего ордеров профит = 0    |
//+----------------------------------------------------------------------------+
void  ClosseMinMaxPenultimateOrdersZero()
  {
   int slipp = (int) MarketInfo(_Symbol,MODE_SPREAD)*2;
   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(CalculiteProfitMinMaxPenultimateOrders() >= 0  && Drawdown >= DrawdownClosingMinMaxOrdersZero && FindPenultimateProfit() > 0)
                 {
                  if(OrderClose(GetTicketPenultimateOrder(), FindPenultimateLots(), Bid, slipp) && OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) &&
                     OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp))
                    {
                     SendNotification("Закрылся минимальный максимальный и предпоследний ордера на покупку: " + Symbol() + ", Баланс: " + DoubleToString(NormalizeDouble(AccountBalance(), 2))
                                      + ", Свободно денежных средств: " + DoubleToString(NormalizeDouble(AccountFreeMargin(), 2)));
                     Print("Максимальный и минимальный ордера на покупку успешно закрыты!");
                    }
                  else
                    {
                     Print("Не удалось закрыть максимальный и минимальный ордера на покупку!",GetLastError());
                    }
                 }
              }

            if(OrderType() == OP_SELL)
              {
               if(CalculiteProfitMinMaxPenultimateOrders() >= 0 && Drawdown >= DrawdownClosingMinMaxOrdersZero && FindPenultimateProfit() > 0)
                 {
                  if(OrderClose(GetTicketPenultimateOrder(), FindPenultimateLots(), Ask, slipp) && OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) &&
                     OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp))
                    {
                     SendNotification("Закрылся минимальный максимальный и предпоследний ордера на продажу: " + Symbol() + ", Баланс: " + DoubleToString(NormalizeDouble(AccountBalance(), 2))
                                      + ", Свободно денежных средств: " + DoubleToString(NormalizeDouble(AccountFreeMargin(), 2)));
                     Print("Максимальный и минимальный ордера на продажу успешно закрыты!");
                    }
                  else
                    {
                     Print("Не удалось закрыть максимальный и минимальный ордера на продажу!",GetLastError());
                    }
                 }
              }
           }
        }
     }
  }

Danke!!!!

 
EVGENII SHELIPOV Bei einem Demokonto ist alles in Ordnung, aber bei einem echten Konto wird nur der vorletzte Auftrag geschlossen. Ich stand vor einem solchen Problem, als ich das gesamte Auftragsnetz schließen musste und das Problem in den Requotes lag, dann wurde das Flag gesetzt und das Problem ist gelöst. Hier habe ich das Gleiche getan, aber das Problem ist nicht gelöst.

Fahne:

Danke!!!!

Wo wird Ihre Flagge zurückgesetzt?
 
Tretyakov Rostyslav #:
Wo wird Ihre Flagge zurückgesetzt?
//-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену и текста
   if(CountTrade() == 0)
     {
      flag_close=0;
      ObjectsDeleteAll(0,"AveragePriceLine");
      if(ObjectFind(0,"signal4")==0 && CountTrade(0) < 1)//для бай
        {
         ObjectDelete(0,"signal4");
        }
      if(ObjectFind(0,"signal3")==0 && CountTrade(1) < 1)//для селл
        {
         ObjectDelete(0,"signal3");
        }
     }

Wenn ich es hier reinstellen würde, wäre es richtig

 
EVGENII SHELIPOV #:

Wenn ich es hier reinschreibe, wird es richtig sein.

Nein. Auf diese Weise wird sie zurückgesetzt, wenn alle Aufträge abgeschlossen sind.

Da Sie nicht alle Aufträge abschließen müssen, ist es besser, die Tickets erneut auszuführen und sie abzuschließen.

 
Tretyakov Rostyslav #:

Nein. Auf diese Weise wird sie zurückgesetzt, wenn alle Aufträge abgeschlossen sind.

Da Sie nicht alle Aufträge abschließen müssen, ist es besser, die Tickets erneut auszuführen und abzuschließen

Einen Moment noch.

 
EVGENII SHELIPOV #:

Einen Moment noch.



//-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену мин и макс ордеров и текста
   if(CountTrade() == 0 || Drawdown < DrawdownClosingMinMaxOrdersZero)
     {
      flag_close2=0;
      flag_close3=0;
      ObjectsDeleteAll(0,"AveragePriceLineMinMaxOrders");
      if(ObjectFind(0,"signal41")==0 && (CountTrade(0)<1 || Drawdown < DrawdownClosingMinMaxOrdersZero)) //для бай
        {
         ObjectDelete(0,"signal41");
        }
      if(ObjectFind(0,"signal42")==0 && (CountTrade(1)<1 || Drawdown < DrawdownClosingMinMaxOrdersZero))//для селл
        {
         ObjectDelete(0,"signal42");
        }
     }

aber auf diese Weise.

 
Tretyakov Rostyslav #:

Nein. Auf diese Weise wird sie zurückgesetzt, wenn alle Aufträge abgeschlossen sind.

Da Sie nicht alle Aufträge abschließen müssen, ist es besser, die Tickets in einer Schleife durchzugehen und sie abzuschließen.

Muss ich bei der Funktion "Auftrag abschließen" nicht durch die Ticker gehen?

//+----------------------------------------------------------------------------+
//| Закрытие минимального максимального и предпоследнего ордеров               |
//+----------------------------------------------------------------------------+
void  ClosseMinMaxPenultimateOrders()
  {
   int slipp = (int) MarketInfo(_Symbol,MODE_SPREAD)*2;
   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(CalculiteProfitMinMaxPenultimateOrders() >= 0 && OrderGroupCloseSignal()==0 &&
                  Drawdown >= DrawdownClosingMinMaxOrders && FindPenultimateProfit() > 0)
                 {
                  if(OrderClose(GetTicketPenultimateOrder(), FindPenultimateLots(), Bid, slipp) && OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) &&
                     OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp))
                    {
                     SendNotification("Закрылся минимальный максимальный и предпоследний ордера на покупку: " + Symbol() + ", Баланс: " + DoubleToString(NormalizeDouble(AccountBalance(), 2))
                                      + ", Свободно денежных средств: " + DoubleToString(NormalizeDouble(AccountFreeMargin(), 2)));
                     Print("Максимальный и минимальный ордера на покупку успешно закрыты!");
                    }
                  else
                    {
                     Print("Не удалось закрыть максимальный и минимальный ордера на покупку!",GetLastError());
                    }
                 }
              }

            if(OrderType() == OP_SELL)
              {
               if(CalculiteProfitMinMaxPenultimateOrders() >= 0 && OrderGroupCloseSignal()==1 &&
                  Drawdown >= DrawdownClosingMinMaxOrders && FindPenultimateProfit() > 0)
                 {
                  if(OrderClose(GetTicketPenultimateOrder(), FindPenultimateLots(), Ask, slipp) && OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) &&
                     OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp))
                    {
                     SendNotification("Закрылся минимальный максимальный и предпоследний ордера на продажу: " + Symbol() + ", Баланс" + DoubleToString(NormalizeDouble(AccountBalance(), 2))
                                      + ", Свободно денежных средств" + DoubleToString(NormalizeDouble(AccountFreeMargin(), 2)));
                     Print("Максимальный и минимальный ордера на продажу успешно закрыты!");
                    }
                  else
                    {
                     Print("Не удалось закрыть максимальный и минимальный ордера на продажу!",GetLastError());
                    }
                 }
              }
           }
        }
     }
  }
 
EVGENII SHELIPOV #:


sondern so.

//-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену мин и макс ордеров и текста
   if(CountTrade() == 0 || Drawdown < DrawdownClosingMinMaxOrdersZero)
     {
      flag_close2=0;
      flag_close3=0;

Das heißt, wenn es keine Aufträge gibt