Проблема с трейлиг стопом.

 
Не могу понять в чём причина: при тестировании и при торговле советником трейлинг стоп на некоторых сделках работает, а на некоторых не работает. Стоп-лосс у меня выставляется на всех позициях обязательно, и на селл и на бай. Трейлинг часто не работает вне зависимости от направления сделки. Если сделка убыточная, то ясно, что трейлинг и не должен работать, но если идёт почти сто пунктов в прибыль, а стоп не подтягивается, то приходится (если замечу) включать трейлинг в ручную в терминале. Может кто-нибудь подскажет в чем дело. Вот функция OrderModify, как она прописана в советнике:
------------------------
void CheckForClose()
{
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false ) break;
if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) continue;
{
if(OrderType() == OP_BUY)
{
if (ts>0 && Bid-OrderOpenPrice()>Point*ts && OrderStopLoss()<Bid-Point*(ts+tstep))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*ts,OrderTakeProfit(),0,Blue);
PlaySound("stops.wav");
return(0);
}
}
if(OrderType()==OP_SELL)
{
if(ts>0 && OrderOpenPrice()-Ask>Point*ts && OrderStopLoss()>Ask+Point*(ts+tstep))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Poi nt*ts,OrderTakeProfit(),0,Orange);
PlaySound("stops.wav");
return(0);
}
}
}
}
}

----------------------

Пробовал расставлять в коде Print(), но в журнале ничего не изменяется.

Приложил кусок лога и отчёт.

Файлы:
log.txt  5 kb
 
Здесь отчёт теста.
Файлы:
 

void CheckForClose()
{
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false ) break;
if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) continue;
{
if(OrderType() == OP_BUY)
{
if (ts>0 && Bid-OrderOpenPrice()>Point*ts && OrderStopLoss()<Bid-Point*ts)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*ts,OrderTakeProfit(),0,Blue);
PlaySound("stops.wav");
return(0);
}
}
if(OrderType()==OP_SELL)
{
if(ts>0 && OrderOpenPrice()-Ask>Point*ts && OrderStopLoss()>Ask+Point*ts)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*ts,OrderTakeProfit(),0,Orange);
PlaySound("stops.wav");
return(0);
}
}
}
}
}


 
И чем этот вариант лучше исходного?
 
meta-trader2007 писал (а) >>

void CheckForClose()
{
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false ) break;
if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) continue;
{
if(OrderType() == OP_BUY)
{
if (ts>0 && Bid-OrderOpenPrice()>Point*ts && OrderStopLoss()<Bid-Point*ts)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*ts,OrderTakeProfit(),0,Blue);
PlaySound("stops.wav");
return(0);
}
}
if(OrderType()==OP_SELL)
{
if(ts>0 && OrderOpenPrice()-Ask>Point*ts && OrderStopLoss()>Ask+Point*ts)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*ts,OrderTakeProfit(),0,Orange);
PlaySound("stops.wav");
return(0);
}
}
}
}
}


Этот вариант абсолютно ничего не меняет - это тоже самое, я его уже пробовал.