Here is the MyOrdersTotal() function:
int MyOrdersTotal(int Magic)
{
int z=0;
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Pair) z++;
}
return(z);
}
And it is not in init() or deinit().
Thanks for your help.
For a WHILE loop where there is no guarantee the loop will exit gracefully (unlike a FOR loop), you should include an additional counter to make sure the loops exits.
Also be considerate of other users on the server, include a Sleep.
eg:
counter=0;
too_many=50;
while(MyOrdersTotal(Magic)!=0 && counter<too_many)
{
CloseOrders(Magic);
DeletePendingOrders(Magic);
Sleep(2000);
counter++;
}
Would a Refreshrates() inserted in the functions solve the problem ?? Thanks.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hi there, I'm having an issue with part of my code :
I'm trying to close all open and pending orders, unfortunately it deletes the pending orders and closes only the first open order.
Would a Refreshrates() inserted in the functions solve the problem ?? Thanks.
while(MyOrdersTotal(Magic)!=0)
{
CloseOrders(Magic);
DeletePendingOrders(Magic);
}
Here are the functions:
int DeletePendingOrders(int Magic)
{
int total = OrdersTotal();
for (int cnt = total-1 ; cnt >= 0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Pair && (OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT))
{
while(IsTradeContextBusy()||!IsTradeAllowed())Sleep(2000);
OrderDelete(OrderTicket());
}
}
return(0);
}
int CloseOrders(int Magic)
{
int total = OrdersTotal();
for (int cnt = total-1 ; cnt >= 0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Pair)
{
if (OrderType()==OP_BUY)
{
while(IsTradeContextBusy()||!IsTradeAllowed())Sleep(2000);
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
if (OrderType()==OP_SELL)
{
while(IsTradeContextBusy()||!IsTradeAllowed())Sleep(2000);
OrderClose(OrderTicket(),OrderLots(),Ask,3);
}
}
}
return(0);
}