Открылся ордер, НО сигнал остался - страница 2

 
Scriptong писал (а) >>

Попробуй такую функцию:

Вызов CheckExists(OP_BUY) - проверяем наличие позиции бай, открытой на текущей свече текущего таймфрейма. Если есть в открытых позициях, а также уже закрыта, но время открытия принадлежит текущей свече, то вернет False (открываться нельзя). Если позиция еще не открывалась, то вернет True.

Но функция бессильна при переключении периодов графика. Хотя в тестере отрабатывает корректно.

// Проверяем, нет ли ордера типа Type, открытого на текущей свече. Если ордер есть, то результат False
// Проверяеются не только существующие ордера, но и закрытые   
bool CheckExists(int Type, int pPeriod)
 {
  for(int i = 0; i < OrdersTotal(); i++)
   if(OrderSelect(i, SELECT_BY_POS))
    if(OrderType() == Type && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
     if(OrderOpenTime() >= iTime(Symbol(),pPeriod,0) )
      return(False);
  for(i = OrdersHistoryTotal()-1; i > 0; i--)
   {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
     if(OrderType() == Type && OrderOpenTime() >= iTime(Symbol(),pPeriod,0)  
        && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
      return(False);
    }    
      
  return(True);    
  }

добавить период - не сложно - логика вызова правда - и дальнейша меняется