Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Problem mit while Schleife [gelöst]

Geschrieben

Hallo,

 

ich habe mal wieder eine Frage.

Ich möchte sicher gehen, dass der EA den OrderClose() unbedingt ausführt. Dazu habe ich mir gedacht, ich benutze eine while-Schleife. Leider stürzt bei der Ausführung der komplette Metatrader ab. Aber ich sehe meinen Fehler nicht. Vielleicht habt ihr einen Tipp für mich. Vielen Dank an alle, die sich den kurzen Code ansehen.

 

int start()
  {
   itotal  = OrdersTotal();
   icnt = 0;
   for(i=0;i<itotal;i++)
    {
     OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
     while(OrderClose(OrderTicket(),OrderLots(),Bid,3,Green) == false)
      {
       icnt++;                                  // just for info
       Alert(icnt);                             // just for info
      }
     Alert("Order closed at icnt = " + icnt);   // just for info
    }
   return(0);
  }

 

 

 

 

 

Featured Replies

Geschrieben

Der stürzt ab, weil Du MODE_HISTORY nimmst. Dort sind alle geschlossenen Trades drin. Die sind natürlich nur schwer zu schließen :wink:. Korrekt ist MODE_TRADES. Weiterhin musst Du beim Schließen aller Trades im Pool immer runter zählen, sonst klappt das nicht. Deswegen stürzt er zwar nicht ab, aber der von Dir gewünschte Effekt bliebe aus.

 

 

Hier mal meine Routine zum Schließen von Trades:

//Close Trade
bool CloseTrade(int ordertype, int ticket, double lots, double price, int slippage, color arrow_color)
{
   int loopcount=0;
   CloseTicket=OrderClose(ticket, lots, price, slippage, arrow_color);
   while (CloseTicket==false)
   {
      Sleep(600);
      loopcount++;
      if(loopcount > 100) break;
      RefreshRates();
      if(ordertype == OP_BUY) price = Bid;
      if(ordertype == OP_SELL) price = Ask;      
      CloseTicket=OrderClose(ticket, lots, price, slippage, arrow_color);
   }

   if (CloseTicket==true)
   {
      PlaySound("alert2.wav");
    } else {
        Print(Name + " Error closing order: ", GetLastError());
   }

   return (CloseTicket);
}
 

 

Aufgerufen wird es bspw. so:

 

for (i=OrdersTotal()-1; i>=0; i--) {
     OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if((OrderType()==OP_SELL) && OrderSymbol()==Symbol()) CloseTrade(OrderType(), OrderTicket(), OrderLots(), Ask, Slippage, CLR_NONE);
      if((OrderType()==OP_BUY) && OrderSymbol()==Symbol()) CloseTrade(OrderType(), OrderTicket(), OrderLots(), Bid, Slippage, CLR_NONE);
} 

 

Die if-Abragen sind entsprechend Deinen Regeln zu ergänzen bzw. die Logik voranzustellen.

Geschrieben
  • Autor

Vielen Dank conglom-o,

Deinen Code werde ich mir morgen mal in Ruhe ansehen. Schönen Abend noch.

Geschrieben

Vielen Dank conglom-o,

Deinen Code werde ich mir morgen mal in Ruhe ansehen. Schönen Abend noch.

 

Habe mein Posting noch um die Erläuterung von Deinem Fehler ergänzt - eventuell kannst Du Deine Routine damit dann fehlerfrei bekommen :conglom-o:.

Geschrieben
  • Autor

Problem gelöst?

 

Ja. Vielen tausend Dank. Am Sonntag war ich zu müde, um mich noch zu konzentrieren und gestern bin ich dann nicht dazu gekommen. Sorry.

Ich werde mich an Deinem Code orientieren.

 

(wo kann man ich den Thread auf gelöst setzen?)

 

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.