Не могу сделать правильный delete!

 

Здравствуйте!

Надо чтобы отложенный передвигался вместе

со стопом ордера который трейлится, для этого его

нужно удалить. Подскажите

что у меня не так.

int del()
{
int B=0, S=0, SS=0, BS=0;
double p31, p32, s31, s32;


for(int i=OrdersTotal()-1;i >= 0;i--)
{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if( OrderSymbol()==Symbol())
{

if(OrderType()==OP_BUY)
{
B++;
s31 = NormalizeDouble(OrderStopLoss(),4);
}
if(OrderType()==OP_SELL)
{
S++;
s32 = NormalizeDouble(OrderStopLoss(),4);
}
if(OrderType()==OP_BUYSTOP)
{
BS++;

p31 = NormalizeDouble(OrderOpenPrice(),4);

}
if(OrderType()==OP_SELLSTOP)
{
SS++;

p32 = NormalizeDouble(OrderOpenPrice(),4);

}


}
}


if(((s31 > p32 || s32 < p31) && ((S > 0 && BS > 0) || (B > 0 && SS > 0))) ||
((B < 1 && S < 1) && (SS > 0 || BS > 0)))
{

OrderDelete(OrderTicket());
}
}
return(0);
}

 

Может проверку условий на удаление и само удаление вытащить из под for?

Сначала пройти по всем ордерам, собрать данные, потом принимать решение и действовать. Лучше не удалять и снова ставить, а модифицировать.

 

а отложенный получится модифицировать?

а вытащить проловала -- ен сдвигается вообще

 
liza:

а отложенный получится модифицировать?

а вытащить проловала -- ен сдвигается вообще


Вытащить по любому надо, иначе в этом коде нет разумной логики. Сначала вытащить, потом искать, почему не работает. В цикле еще надо запоминать тикет отложенныого ордера, чтобы удалять точно отложенный ордер, а не неизвестно что - OrderDelete(OrderTicket()).

 

Огроьное спасибо!!!

Все прекрасно работает!

Причина обращения: