help me please , I want close all the oder by one click anyboby can help ? me thank !
I made a script (or modified one, forget which) to do that:
int start()
{
bool result;
double price;
int cmd,error;
int hedgetotal,hedgecnt;
hedgetotal=OrdersTotal();
for(hedgecnt=0;hedgecnt<hedgetotal;hedgecnt++)
{
if(OrderSelect(hedgecnt,SELECT_BY_POS,MODE_TRADES))
{
cmd=OrderType();
if(cmd==OP_BUY || cmd==OP_SELL)
{
while(true)
{
if(cmd==OP_BUY) price=Bid;
else price=Ask;
result=OrderClose(OrderTicket(), OrderLots(), price, 3, CLR_NONE);
if(result!=TRUE) { error=GetLastError(); Print("LastError = ", error); }
else error=0;
if(error==135) RefreshRates();
else break;
}
}
}
else Print( "Error when order select ", GetLastError());
}
//----
return(0);
}
int start()
{
bool result;
double price;
int cmd,error;
int hedgetotal,hedgecnt;
hedgetotal=OrdersTotal();
for(hedgecnt=0;hedgecnt<hedgetotal;hedgecnt++)
{
if(OrderSelect(hedgecnt,SELECT_BY_POS,MODE_TRADES))
{
cmd=OrderType();
if(cmd==OP_BUY || cmd==OP_SELL)
{
while(true)
{
if(cmd==OP_BUY) price=Bid;
else price=Ask;
result=OrderClose(OrderTicket(), OrderLots(), price, 3, CLR_NONE);
if(result!=TRUE) { error=GetLastError(); Print("LastError = ", error); }
else error=0;
if(error==135) RefreshRates();
else break;
}
}
}
else Print( "Error when order select ", GetLastError());
}
//----
return(0);
}
for(hedgecnt=0;hedgecnt<hedgetotal;hedgecnt++)
and
for(hedgecnt=hedgetotal-1;hedgecnt>0;hedgecnt--)
are different!!!!!!!!!!!!!!!!!
and
for(hedgecnt=hedgetotal-1;hedgecnt>0;hedgecnt--)
are different!!!!!!!!!!!!!!!!!
I think I saw this problem at another topic, that closing order number 1 makes all
remaining orders be renumbered anew from 1. So you'd need to close the higher-numbered
positions first, and use a decrementing counter.
//--------------------------------------------------------------------- // Close all the market orders //--------------------------------------------------------------------- #property copyright "© RickD 2006-2007" #property link "www.e2e-fx.net" int Slippage = 3; void CloseOrders() { int cnt = OrdersTotal(); for (int i=cnt-1; i >= 0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; //if (OrderSymbol() != Symbol()) continue; //if (OrderMagicNumber() != Magic) continue; if (OrderType() == OP_BUY) { OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage); } if (OrderType() == OP_SELL) { OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), Slippage); } } }
void start() { for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(Symbol()==OrderSymbol()) { if(OrderClose(OrderTicket(), OrderLots(), OrderClosePrice() ,0, Red)) { Print("Order " + OrderTicket() + " closed!"); } else { Print("Error closing order " + OrderTicket()); } } } } }
There is no need to Print("Order " + OrderTicket() + " closed/failed!"); MT4 log will contain information about all the
operation by default.
please write code for me thank very much !