Помогите с трейлинг стопом, если не лень!

 

Есть такой вот кусок кода, который наотрез отказывается работать. Не могу понять почему. Этот код находится внутри цикла открытых позиций.

if(TrailingStop>0) 
{
  highest_price=OrderOpenPrice(); 
  if(Bid>highest_price)
  { 
    highest_price=Bid;
  }
  if(Bid<(highest_price-Point*TrailingStop))
  {
    OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
    return(0); // exit
  }
}

Что скажете?

 
Это код для закрытия ордера, а не модификации, т.е. он ничего не трейлит.
 
Roger:
Это код для закрытия ордера, а не модификации, т.е. он ничего не трейлит.


Я знаю, что для закрытия. Мне это и нужно, только вот почему не закрывает, когда условие выполняется? Вот в чём вопрос.
 
capricon:


Я знаю, что для закрытия. Мне это и нужно, только вот почему не закрывает, когда условие выполняется? Вот в чём вопрос.

А почему он должен что-то закрывать. Ордер то еще не выбран
 
capricon:

Есть такой вот кусок кода, который наотрез отказывается работать. Не могу понять почему. Этот код находится внутри цикла открытых позиций.

Что скажете?


1. Ордер надо выбрать - функция https://docs.mql4.com/ru/trading/OrderSelect

2. По цене Bid закрываются только ордера OP_BUY

 

Я же говорю - код внутри цикла открытых позиций, все выбрано, и да - Bid поскольку в конкретном примере код относится к открытой длинной позиции. Вот с начала тогда:

total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{ 
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) 
{
if(OrderType()==OP_BUY) 
{ 
if(TrailingStop>0) 
{
high_price=OrderOpenPrice(); 
if(Bid>high_price)
{ 
high_price=Bid;
}
if(Bid<(high_price-Point*TrailingStop))
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
return(0); // exit
}

}
}

else ... далее если шорт...

}

}


Но конструкция не закрывает открытые позиции. Не могу понять почему.

 
capricon:

Я же говорю - код внутри цикла открытых позиций, все выбрано, и да - Bid поскольку в конкретном примере код относится к открытой длинной позиции. Вот с сначала тогда:


Но конструкция не закрывает открытые позиции. Не могу понять почему.


Для вставки кода используйте кнопку SRC
 
Vinin:

Для вставки кода используйте кнопку SRC

Понял, буду знать. Спасибо.

 

Давай подумаем как твой код работает

Возьмем вот этот участок

high_price=OrderOpenPrice(); 
if(Bid>high_price) { 
   high_price=Bid;
}
if(Bid<(high_price-Point*TrailingStop)) {
   OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
   return(0); // exit
}

Вначале переменной high_price присваивается цена открытия. Если high_price меньше цены Bid, то high_price присваивается Bid.

Второе условие уже не выполняется.

 
Vinin:

Давай подумаем как твой код работает

Возьмем вот этот участок

Вначале переменной high_price присваивается цена открытия. Если high_price меньше цены Bid, то high_price присваивается Bid.

Второе условие уже не выполняется.



Точно, спасибо. Ошибка в логике. Поймал сам себя за хвост. Буду думать дальше как это реализовать.
Причина обращения: