Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Поделись программой в CodeBase. Получи доступ к миллионам трейдеров!
capricon
25
capricon 2011.05.09 00:34 

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

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
  }
}

Что скажете?

Alexander
2441
Alexander 2011.05.09 03:59  
Это код для закрытия ордера, а не модификации, т.е. он ничего не трейлит.
capricon
25
capricon 2011.05.09 11:56  
Roger:
Это код для закрытия ордера, а не модификации, т.е. он ничего не трейлит.


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


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

А почему он должен что-то закрывать. Ордер то еще не выбран
Andrey F. Zelinsky
29891
Andrey F. Zelinsky 2011.05.09 12:08  
capricon:

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

Что скажете?


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

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

capricon
25
capricon 2011.05.09 12:47  

Я же говорю - код внутри цикла открытых позиций, все выбрано, и да - 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 ... далее если шорт...

}

}


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

Victor Nikolaev
Модератор
14031
Victor Nikolaev 2011.05.09 12:48  
capricon:

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


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


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

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

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

Victor Nikolaev
Модератор
14031
Victor Nikolaev 2011.05.09 13:31  

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

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

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.

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

capricon
25
capricon 2011.05.09 13:41  
Vinin:

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

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

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

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



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