Download MetaTrader 5
To add comments, please log in or register
Download MetaTrader 5 mobile version and trade from anywhere in the world!
cryptex23
268
cryptex23 2015.12.21 19:09 
  vol=MathFloor(AccountEquity())/10000;
  {
  for( int count=0;count<OrdersTotal();count++)
  {
  OrderSelect(count,SELECT_BY_POS,MODE_TRADES);

  if (OrderType()==1)
  {
  vask=MarketInfo(OrderSymbol(),MODE_ASK);
  OrderClose(OrderTicket(),vol,vask,clrAliceBlue);
  Print("OrderClose error", GetLastError());
  }
  else if(OrderType()==0)
  {
  vbid=MarketInfo(OrderSymbol(),MODE_BID);
  OrderClose(OrderTicket(),vol,vbid,clrAliceBlue);
  Print("OrderClose error", GetLastError());  
  }
  }
  }
Hello All, I am trying to close all open orders one after the other. When I run the above I inevitably end up getting some or the other error. Can someone point out the potential fallacies? 
honest_knave
969
honest_knave 2015.12.21 19:27  

You need to count down not up.

  for( int count=0;count<OrdersTotal();count++)

 

See here for an explanation of why.

bluestacks
58
bluestacks 2015.12.22 05:43  
for(int x=OrdersTotal();x>=0;x--)
{
    if(OrderSelect(x,SELECT_BY_POS)==true)
    {
         if(OrderType()==OP_BUY){ cprice=MarketInfo(OrderSymbol(),MODE_BID);} 
         else if(OrderType()==OP_SELL){ cprice=MarketInfo(OrderSymbol(),MODE_ASK);} 
         
         if(!OrderClose(OrderTicket(),OrderLots(),cprice,clrNone))
         {
              PrintFormat("Error closing order #%d. %s",OrderTicket(),ErrorDescription(GetLastError()));
         }
    }
}
honest_knave
969
honest_knave 2015.12.22 06:51  
blue_stacks:


Rather than figuring out the close price, you can just use OrderClosePrice()

Donald Gibson
483
Donald Gibson 2015.12.22 07:53  
cryptex:
Hello All, I am trying to close all open orders one after the other. When I run the above I inevitably end up getting some or the other error. Can someone point out the potential fallacies? 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ClosePos()
  {
//-------------------------------------------------------------------------------------------------
   int CloseLong=0,CloseShort=0;
//-------------------------------------------------------------------------------------------------
//Long
   for(int i=OrdersTotal()-1;i>=0;i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if(OrderMagicNumber()==EA_MagicNumber)
            if(OrderComment()==EA_Comment)
               if(OrderSymbol()==Symbol())
                 {
                  if(OrderType()==OP_BUY)
                    {
                     Print("-------------------------------------------------------------------------------------------------");
                     CloseLong=OrderClose(OrderTicket(),OrderLots(),Bid,EA_Slippage,EA_ArrowColor);
                     //If a error has occurred - Print the error description
                     if(CloseLong==0)
                       {
                        Print("Long Order was not Closed..Error  : "+ErrorDescription(GetLastError()));
                       }
                     //If a error has not occurred - Print the trade information
                     if(CloseLong>0)
                       {
                        if(Bid<OrderOpenPrice())
                          {
                           Print("Loss...",DoubleToStr(OrderOpenPrice()-Bid,Digits),".pips");
                          }
                        if(Bid>OrderOpenPrice())
                          {
                           Print("Profit..",DoubleToStr(Bid-OrderOpenPrice(),Digits),".pips");
                          }
                        Print("Close Order Price...",DoubleToStr(Bid,Digits));
                        Print("Order Symbol...",Symbol());
                        Print("Long Order was closed successfully");
                        Print("-------------------------------------------------------------------------------------------------");
                        OrderCloseLine();
                       }
                    }
                  if(OrderType()==OP_SELL)
                    {
                     Print("-------------------------------------------------------------------------------------------------");
                     CloseShort=OrderClose(OrderTicket(),OrderLots(),Ask,EA_Slippage,EA_ArrowColor);
                     if(CloseShort==0)//If a error has occurred - Print the error description
                       {
                        Print("Short Order was not Closed..Error  : "+ErrorDescription(GetLastError()));
                       }
                     if(CloseShort>0)//If a error has not occurred - Print the trade information
                       {
                        if(Ask>OrderOpenPrice())
                          {
                           Print("Loss...",DoubleToStr(Ask-OrderOpenPrice(),Digits),".pips");
                          }
                        if(Ask<OrderOpenPrice())
                          {
                           Print("Profit..",DoubleToStr(OrderOpenPrice()-Ask,Digits),".pips");
                          }
                        Print("Close Order Price...",DoubleToStr(Ask,Digits));
                        Print("Order Symbol...",Symbol());
                        Print("Short Order was closed successfully");
                        Print("-------------------------------------------------------------------------------------------------");
                        OrderCloseLine();
                       }
                    }
                 }
  }
cryptex23
268
cryptex23 2015.12.28 16:39  
Thank you for the valuable comments above. I have implemented them. My new piece looks something like this. However I am getting OrderCLose error 3. Which pertains to invalid trade parameters. Not sure how to resolve it.
  for( int count=OrdersTotal()-1;count>=0;count--)
  {
  OrderSelect(count,SELECT_BY_POS,MODE_TRADES);
  
  if (OrderType()==1)
  {
  vask=MarketInfo(OrderSymbol(),MODE_ASK);
  vol=OrderLots();
  OrderClose(OrderTicket(),vol,vask,clrAliceBlue);
  Print("OrderClose error", GetLastError());
  }
  else if(OrderType()==0)
  {
  vbid=MarketInfo(OrderSymbol(),MODE_BID);
  vol=OrderLots();
  OrderClose(OrderTicket(),vol,vbid,clrAliceBlue);
  Print("OrderClose error", GetLastError());  
  }
  }
Doerk Hilger
1073
Doerk Hilger 2015.12.28 18:35  

If this is part of an EA, you should - please - take care that you only close the orders your EA opened and not all. Parts like these produce hassle to other EAs when they´re not properly coded. 

Same for ObjectsDeleteAll() ... an absolute no-go-function. Never use.

Doerk 

honest_knave
969
honest_knave 2015.12.28 18:59  

You're passing a color for the slippage parameter. The 5th parameter should be color.

Also, you're adding extra code that you don't need (vask and vbid). Just use OrderClosePrice()

 

cryptex:
Thank you for the valuable comments above. I have implemented them. My new piece looks something like this. However I am getting OrderCLose error 3. Which pertains to invalid trade parameters. Not sure how to resolve it. 

for( int count=OrdersTotal()-1;count>=0;count--)
  {
  OrderSelect(count,SELECT_BY_POS,MODE_TRADES);
  
  if (OrderType()==1)
  {
  vask=MarketInfo(OrderSymbol(),MODE_ASK);
  vol=OrderLots();
  OrderClose(OrderTicket(),vol,vask,clrAliceBlue);
  Print("OrderClose error", GetLastError());
  }
  else if(OrderType()==0)
  {
  vbid=MarketInfo(OrderSymbol(),MODE_BID);
  vol=OrderLots();
  OrderClose(OrderTicket(),vol,vbid,clrAliceBlue);
  Print("OrderClose error", GetLastError());  
  }
  }

 

honest_knave
969
honest_knave 2015.12.28 19:02  
Doerk:

Same for ObjectsDeleteAll() ... an absolute no-go-function. Never use.

In the past, yes it was troublesome. But now you can finally specify a tag (prefix) which is great. One less UDF in most of my code.

int  ObjectsDeleteAll( 
   long           chart_id,   // chart ID 
   const string     prefix,   // prefix in object name 
   int    sub_window=EMPTY,   // window index 
   int    object_type=EMPTY   // object type 
   );
cryptex23
268
cryptex23 2016.01.01 17:04  
honest_knave:

You're passing a color for the slippage parameter. The 5th parameter should be color.

Also, you're adding extra code that you don't need (vask and vbid). Just use OrderClosePrice()

 

Thanks Knave. Thanks for pointing I was missing a parameter. It works like a charm now :D
/
To add comments, please log in or register