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

 
Hallo zusammen. Können Sie mir sagen, wie ich diesen Code ändern kann for(int i=OrdersTotal()-1;i>=0;i--){
Im Moment werden die zuletzt geöffneten geschlossen. Ich möchte, dass sie die ersten zuerst schließt!
 
Rustam Bikbulatov:
Hallo zusammen. Können Sie mir sagen, wie ich diesen Code ändern kann for(int i=OrdersTotal()-1;i>=0;i--){
Im Moment werden die zuletzt geöffneten geschlossen. Ich möchte, dass sie die ersten zuerst schließt!
for(int i=0; i<OrdersTotal(); i++)
 
Rustam Bikbulatov:
Hallo zusammen. Bitte sagen Sie mir, wie ich diesen Code ändern kann for(int i=OrdersTotal()-1;i>=0;i--){
Im Moment werden die zuletzt geöffneten geschlossen. Sie wollen, dass sie die ersten zuerst schließt!
for( int i = 0; i < OrdersTotal(); i++ )
   {
    if( /*Функция закрытия. Если вернула истину*/ )
       i--;
   }

Versuchen Sie es auf diese Weise. Anstelle von Kommentaren sollten Sie die Funktion zum Schließen des Auftrags verwenden. Ich habe seine Funktionalität nicht überprüft. Und hier denke ich, dass wir die Funktion, die die Anzahl der Aufträge berechnet, jedes Mal aufrufen müssen, da die Anzahl der Aufträge abnehmen wird.

Wir können auch eine solche Variante ausprobieren:

while( OrdersTotal() > 0 )
   /*Функция закрытия ордера*/
 
Vitaly Muzichenko:
for(int i=0; i<OrdersTotal(); i++)
es schließt sich nicht richtig)
 
Rustam Bikbulatov:
er schließt sich auf ungeschickte Weise)
Der richtige Weg ist, sich zu merken, welche Aufträge abgeschlossen werden müssen, die Liste nach Bedarf zu sortieren und in dieser Reihenfolge abzuschließen

nicht korrekt, aber im Moment (bis zu einem bestimmten Build) funktioniert es: beim erfolgreichen Schließen von i--



 
Rustam Bikbulatov:
Hallo zusammen. Können Sie mir sagen, wie ich diesen Code ändern kann for(int i=OrdersTotal()-1;i>=0;i--){
Im Moment werden die zuletzt geöffneten geschlossen. Ich möchte, dass sie die ersten zuerst schließt!

//+------------------------------------------------------------------+
//|           Закрыть все позиции начиная с первых                   |
//+------------------------------------------------------------------+

double CloseOrders()

{
  for(int i=0; i<OrdersTotal(); )
  {
    if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    break;
    
    if (OrderMagicNumber() != mn)
    break;
    
    int type   = OrderType();

    bool result = false;
    
    switch(type)
    {
      //Close opened long positions
      case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, CloseColor );
                          break;
      
      //Close opened short positions
      case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), Slippage, CloseColor );
                          break;
    }
    
    if(result == false)
    {
      Print("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
      i++;
    }  
  }
return (True);
}
// End
 
Rustam Bikbulatov:
Er schließt auf unangenehme Weise)
Die von mir vorgeschlagene Option ist im Allgemeinen nicht für einen Abschluss geeignet.
Wenn Sie von der Schließung von alt zu neu sprechen, dann schließen Sie das Netz. Da ich einige Erfahrung mit Gittern habe, kann ich nur mit Sicherheit sagen, dass man nicht nach dem Alter der Position wählen sollte, sondern nach ihrem Los, und man sollte von einem größeren Los zu einem kleineren schließen. Wenn es sich um ein einziges Los handelt, gibt es keinen Unterschied in der Reihenfolge des Abschlusses. Verwenden Sie fertige Funktionen zum Schließen und erfinden Sie nicht etwas, das bereits erfunden wurde.)
 
Vielen Dank, Leute! Ich habe das schon geklärt!!!
 
Vitaly Muzichenko:
Die von mir vorgeschlagene Option ist im Hinblick auf den Abschluss im Allgemeinen unpassend.
Wenn Sie von der Schließung von alt zu neu sprechen, dann schließen Sie das Netz. Da ich einige Erfahrung mit Gittern habe, kann ich nur mit Sicherheit sagen, dass man nicht nach dem Alter der Position wählen sollte, sondern nach ihrem Los, und man sollte von einem größeren Los zu einem kleineren schließen. Wenn es sich um ein einziges Los handelt, gibt es keinen Unterschied in der Reihenfolge des Abschlusses. Verwenden Sie fertige Funktionen zum Schließen und erfinden Sie nicht etwas, das bereits erfunden wurde.)
Das ist richtig. Sie haben Recht!
 
Meine Herren Entwickler! Einen guten Tag an alle. Ich interessiere mich für eine Frage, wie man eine Expert Advisor-Vorlage (Skript) bei der Erstellung erstellt. Kann dies irgendwo bearbeitet werden und wie geschieht dies?
Grund der Beschwerde: