Schleifen und Schließen oder Löschen von Aufträgen - Seite 3

 

Was passiert, wenn wir eine Schleife wie diese ausführen?

  for(int i=0; i< OrdersTotal(); i++) // For market and pending orders
     {
      if((OrderSelect(i,SELECT_BY_POS)==true)     //If there is the next one
      && (OrderSymbol()==Symbol()) && OrderMagicNumber() == Magic_A )               
        {

Dies ist die Schleife, die im Buch mql4 angegeben ist, um ein Array für eine Bestellung zu erstellen.

Verringert sich die OrdersTotal() jedes Mal, wenn eine Bestellung abgeschlossen wird, von selbst?

//***************************************************************************

Ich habe gerade einen Blick in das Buch geworfen, unten ist die Schleife, die zum Schließen einer Bestellung gegeben wird, also ist die Antwort ja: ( https://book.mql4.com/trading/orderclose )

 for(int i=1; i<=OrdersTotal(); i++)          // Order searching cycle
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // If the next is available
        {                                       // Order analysis:
         //----------------------------------------------------------------------- 3 --
         if (OrderSymbol()!= Symb) continue;   
 
ffoorr:

Was ist, wenn wir eine Schleife wie diese machen,

Dies ist die Schleife, die im Buch mql4 angegeben ist, um ein Array für eine Bestellung zu erstellen.

Verringert sich die OrdersTotal() jedes Mal, wenn eine Bestellung abgeschlossen wird, von selbst?


Ja, das wird es... aber die Tatsache bleibt bestehen, dass nicht alle Aufträge geschlossen werden. Lesen Sie die ersten 2 Beiträge in diesem Thread ... es ist im Detail erklärt.
 
int TotalNumberOfOrders;   //  <-- this variable will hold the number of orders currently in the Trade pool

TotalNumberOfOrders = OrdersTotal();    // <-- we store the number of Orders in the variable

for(PositionIndex = TotalNumberOfOrders - 1; PositionIndex >= 0 ; PositionIndex --)  //  <-- for loop to loop through all Orders . .   COUNT DOWN TO ZERO ! 

Ist es in Ordnung, TotalNumberOfOrders = OrdersTotal() nicht zu deklarieren;

Was ich meinte, war, direkt OrdersTotal() zu verwenden

for ( x = OrdersTotal() - 1 ...... )

 
Anstatt zu fragen, warum probieren Sie das nicht einfach aus? Es wäre Ihre Erfahrung.
 
Ich verwende das derzeit, aber ich bin mir nicht sicher, was die Ausgabe angeht, obwohl es die gleiche ist. Da OrdersTotal() in der for-Schleife ist, wird das Schließen einer Bestellung die OrdersTotal immer wieder beeinflussen?
 
Probieren Sie beide aus und sehen Sie, ob Sie die Unterschiede erkennen können.
 
juniorlcq:
Ich verwende diese Methode, bin mir aber nicht sicher, ob die Ausgabe die gleiche ist. Da OrdersTotal() in der for-Schleife ist, wird das Schließen einer Order die OrdersTotal immer wieder beeinflussen?

Nein, denn Sie überprüfen nicht OrdersTotal, sondern PositionIndex als Bedingung für die Fortsetzung der Schleife.

for(PositionIndex = TotalNumberOfOrders - 1; PositionIndex >= 0 ; PositionIndex --)
 

Hervorragende Arbeit, dieses Thema zu erklären! Ohne die Grafiken ist es einfach unmöglich zu erklären... Gut gemacht.

Das einzige Mal, dass ich gezwungen war, die Count-up-Methode anstelle der Countdown-Methode zu verwenden, war bei einem Broker

der sich sehr über FIFO aufregte und mir nicht erlaubte, den neuesten Handel zuerst zu schließen .... wie dumm.

Und wieder sage ich ... gut gemacht ...

 
Jimdandy: Das einzige Mal, dass ich gezwungen war, die Count-up-Methode anstelle der Countdown-Methode zu verwenden, war bei einem Broker, der wirklich pingelig mit FIFO war und mir nicht erlaubte, den neuesten Handel zuerst zu schließen...., wie dumm.
In diesem Fall sollten Sie alle relevanten Ticketnummern (in einem Array) erfassen und dann schließen. Zählen Sie nicht hoch UND schließen Sie.
 

Hallo Experten, was ist Ihre Meinung zu dieser Lösung?

while(OrdersTotal()>0)
  {
   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
     {
      switch(OrderType())
        {
         case OP_BUY:  if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),MaxSlippage,CloseColor)) Print("OrderClose error ",GetLastError()); break;
         case OP_SELL: if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),MaxSlippage,CloseColor)) Print("OrderClose error ",GetLastError()); break;
         case OP_BUYSTOP:
         case OP_SELLSTOP:
         case OP_BUYLIMIT:
         case OP_SELLLIMIT: if(!OrderDelete(OrderTicket())) Print("OrderDelete error ",GetLastError());
        }
     }
   else Print("OrderSelect error ",GetLastError());
  }