Не работает трэйлинг стоп MQL 4

 

Доброго времени суток!

Столкнулся с такой проблемой:

Открыто несколько позиций и для всех позиций должен работать трэйлинг, по началу трейлинг был прописан в том же цикле, что и закрытие, в таком случае трейлинг работал только для одной позиции и поочередно переходил к следующим после закрытия по стопу. Посоветовали перенести трал в другой цикл и желательно другой функцией, что я собственно и сделал, однако теперь модификация не работает вообще. В чем может быть проблема?

Код прилагаю

 

for(t=0;t<total;t++)
{
if (OrderType() == OP_BUY)
{
             if(TrailingStop>0)
            {
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
               {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                
                  }
               }
            }  
}  
else
{
    if(TrailingStop>0)
            {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
               {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                  
                  }
               }
            }
}
}


 

 

Уточнение:

С работой модификации разобрался, но тралл происходит только для одной позиции и поочередно переходит на следующую после закрытия по стопу, как реализовать модификацию для всех позиций одновременно? 

 
Filya1212:

Уточнение:

С работой модификации разобрался, но тралл происходит только для одной позиции и поочередно переходит на следующую после закрытия по стопу, как реализовать модификацию для всех позиций одновременно? 

А что у Вас в переменной total?
Поменяйте её на OrdersTotal()

и нужно выбрать очередной ордер в цикле
так же нужна сортировка по Символу и Магику(если есть)


for(t=0; t<OrdersTotal(); t++)
{

int res=OrderSelect(t, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == OP_BUY)
{
 
Andrei Fandeev:

А что у Вас в переменной total?
Поменяйте её на OrdersTotal()

и нужно выбрать очередной ордер в цикле
так же нужна сортировка по Символу и Магику(если есть)


for(t=0; t<OrdersTotal(); t++)
{

int res=OrderSelect(t, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == OP_BUY)
{
Спасибо. Все заработало.
Причина обращения: