//+------------------------------------------------------------------+
//| Удаление текущих ордеров |
//+------------------------------------------------------------------+
void ChastClose(int type=-1)
{ int result;
double price;
int error,total=OrdersTotal();
for( i=0; i<total; i++)
{if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
if(OrderType()==type )
{
if(OrderType()==OP_BUY) price=Bid;
else price=Ask;
double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
lot=NormalizeDouble(OrderLots()*Proc/100,2);
if (lot<MinLot) lot=MinLot;
result=OrderClose(OrderTicket(),lot,price,3,CLR_NONE);
if(result!=TRUE) { error=GetLastError(); Print("Ошибка = ",error); }
else error=0;
if(error==135) RefreshRates();
else break;
}
}
else Print( "Ошибка во время выбора ордера ", GetLastError());}
}
//+------------------------------------------------------------------+
//| Удаление текущих ордеров |
//+------------------------------------------------------------------+
void ChastClose(int type=-1)
{ int result;
double price;
int error,total=OrdersTotal();
for( i=0; i<total; i++)
{if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
if(OrderType()==type )
{
while(true)
{
if(OrderType()==OP_BUY) price=Bid;
else price=Ask;
double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
if (NormalizeDouble(OrderLots()*Proc/100,Digits)<MinLot) lot=MinLot;
else lot=NormalizeDouble(OrderLots()*Proc/100,Digits);
result=OrderClose(OrderTicket(),lot,price,3,CLR_NONE);
if(result!=TRUE) { error=GetLastError(); Print("Ошибка = ",error); }
else error=0;
if(error==135) RefreshRates();
else break;
}
}
}
else Print( "Ошибка во время выбора ордера ", GetLastError());}
}
Окончательная версия.
//+------------------------------------------------------------------+
//| Удаление текущих ордеров |
//+------------------------------------------------------------------+
bool ChastClose(int type=-1)
{ bool result;
double price;
int cmd,error,total=OrdersTotal();
for(int i=0; i<total; i++)
{if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{if(OrderSymbol()!=Symbol()||OrderType()!=OP_BUY||OrderType()!=OP_SELL)continue;
cmd=OrderType();
if(cmd==type )
{
while(true)
{
if(cmd==OP_BUY) price=Bid;
else price=Ask;
result=OrderClose(OrderTicket(),NormalizeDouble(OrderLots()*Proc/100,Digits),price,3,CLR_NONE);
if(result!=TRUE) { error=GetLastError(); Print("Ошибка = ",error); }
else error=0;
if(error==135) RefreshRates();
else break;
}
}
}
else Print( "Ошибка во время выбора ордера ", GetLastError());}
return(result);}
if (OrderSymbol()==Symbol() && (OMN==Tipp || Tipp==-1))
if (OrderSymbol()==Symbol() && (OMN==Tipp))
. Иначе в нет зависимости от того кем выставлен ордер человеком или роботомresult=OrderClose(OrderTicket(),NormalizeDouble(OrderLots()*Proc/100,2),price,3,CLR_NONE);
MarketInfo(Symbol(),MODE_MINLOT)
, но тогда нужно найти этот самый лот на этом самом ордере.
axe44