Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Problem: Löschen von offenen Pending Orders (http://www.expert-advisor.com/forum/showthread.php?t=3656)

PortfolioTrader 07.05.14 15:41

Problem: Löschen von offenen Pending Orders
 
Ich finde mein Problem einfach nicht. Ich hoffe ihr könnte mir helfen.

Es sollen alle Pending Orders (OP_BUYSTOPP und OP_SELLSTOP) gelöscht werden. Hierzu mein Code:

PHP-Code:

   total=OrdersTotal();
   if(
total>0)
     {
      for(
int i=0;i<total;i++)
        {
         
OrderSelect(i,SELECT_BY_POS);
         if((
OrderMagicNumber()==Magic && OrderSymbol()==Symbol())&&(OrderType()==OP_BUYSTOP||OrderType()==OP_SELLSTOP))
           {
            
OrderDelete(OrderTicket());
           }
        }
     } 

Es bleiben leider immer Pending Orders offen.

Ich hoffe auf eure Hilfe!

fxdaytrader 07.05.14 16:00

Code:

//call: DeletePendingOrders(Symbol(),Magic);
void DeletePendingOrders(string symbol,int magicnumber) {
 bool result;
 bool FilterBySymbol=true;
 bool FilterByMagicNumber=true;
 for (int cnt=OrdersTotal()-1; cnt>=0; cnt--) {
  if (!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) continue;
  if (FilterBySymbol && OrderSymbol()!=symbol) continue;
  if (FilterByMagicNumber && OrderMagicNumber()!=magicnumber) continue;
  if (OrderType()<=OP_SELL) continue;
  if (OrderType()>OP_SELLSTOP) continue;
  {
    while (IsTradeContextBusy()) Sleep(100);
    result = OrderDelete(OrderTicket());
    }
  }
}

Da könnte/sollte man am Ende prüfen ob alle Orders gelöscht sind und es ggf. nochmals versuchen.

PortfolioTrader 07.05.14 16:26

Danke!
Du bastelst daraus dann also eine Funktion, wenn ich das verstehe?
Versuche ich gleich in der Art einzubauen.
Weißt du vll. was an meinem Code falsch ist? Ich will verstehen wieso es nicht alle löscht

PortfolioTrader 07.05.14 16:55

PHP-Code:

total=OrdersTotal();
   if(
total>0)
     {
      for(
i=total;i>=0;i--)
        {
         
OrderSelect(i,SELECT_BY_POS);
         if((
OrderMagicNumber()==Magic && OrderSymbol()==Symbol())&&(OrderType()==OP_BUYSTOP||OrderType()==OP_SELLSTOP))
           {
            
OrderDelete(OrderTicket());
           }
        }
     } 

Nun hab ich selbst doch noch das Problem mit meinem Code gefunden. Durch rumbasteln....
Geht nicht: for(int i=0;i<total;i++)
Geht: for(i=total;i>=0;i--)

Muss ich das verstehen:confused:


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:13 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum