Количество одновременно открытых ордеров не может быть больше 2, как это организовать?

 
Советник открывает сделки по стрелкам индикатора, сделки потом закрываются по СЛ или ТП.




Количество одновременно открытых ордеров не может быть больше 2 , как это организовать?

Можно сделать так: разрешить ордера открывать если OrdersTotal()<2,
но тогда может несколько ордеров открыться на одной стрелке.

Как по правильному организовать?
 
плюсом к OrdersTotal()<2 проверить наличие открытого ордера на текущем баре
 

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

проверка по OrdersTotal() - не правильный ход, т.к. это Тотал - т.е. все вообще, всех символов, всех роботов, и ручные в этой же куче. организуйте перебор со счётчиком только нужных.

 
Renat Akhtyamov:
плюсом к OrdersTotal()<2 проверить наличие открытого ордера на текущем баре
Можно смотреть OrderOpenTime() открытой сделки и  еще смотреть время текущего бара.

Но оно там до секунд показывает. поэтому оно все равно не будет совпадать.
 
Если на этом баре уже был открытый ордер - то больше на этом баре не разрешать открывать ордера  -

вот эту задачу нужно решить.
 
igrok333:
Можно использовать OrderOpenTime() и  еще смотреть время текущего бара.

Но оно там до секунд показывает. поэтому оно все равно не будет совпадать.

int prevSignal,Signal; //допустим -1 - продажа, 1 - покупка, 0 - отсутствие сигнала

datetime  prevTime;

int OnInit()

{

   prevTime=iTime(Symbol(),Period(),0);

   ...

}

//------

void OnTick()
{

   if(prevTime!=iTime(Symbol(),Period(),0) && MathAbs(Signal)==1 && prevSignal!=Signal && OrdersTotal()<2)

   {

       //можно открыть

   }

   prevSignal=Signal;

   prevTime=iTime(Symbol(),Period(),0);

   ...

}

 
Может в коммент писать время бара, и сравнивать есть ли уже ордер с таким комментом?

Но говорят брокер в 00:00 коммент изменяет.
 
Renat Akhtyamov:

int OnInit()

{

   datetime  prevTime=iTime(Symbol(),Period(),0);

   ...

}

//------

if(prevTime!=iTime(Symbol(),Period(),0) && OrdersTotal()<2)

{

//можно открыть

}

prevTime=iTime(Symbol(),Period(),0);

то есть работать только на открытии?

может так и организую ...
 
igrok333:
то есть работать только на открытии?

может так и организую ...

переделал код выше, иначе все равно 2 штуки откроет

 
Renat Akhtyamov:

переделал код выше, иначе все равно 2 штуки откроет

хорошо, спасибо.
 
igrok333:
хорошо, спасибо.
получилось?
Причина обращения: