Помоги пожалуйста написать ф-цию, которая не давала бы выставлять в одном месте больше одного отложенного ордера.

 
Перед установкой ордера пробеги в цикле по всем ордерам и если цена открытия совпадает с той на которую планируется поставить ордер то false иначе true.
 

Пробовал. Постоянно выполняется условие истина или ложь. Сравнивание ведется по первой попавшийся сделке. Как сделать, чтобы оно сначала проверило все существующие ордера, а потом только принимало решеныя.

 

Может выбирал не правильный оператор?

 

Сравнивать надо разность цен с некоторой дельтой иначе например при 5-знаке никогда не попадёшь на эту цену, но в районе 1-го 5-значного пункта будет 10 ордеров.

 

Как это реализовать?

 

Находил готовые ф-ции, но они никуда не годные. Например:
void SchOrders()
{
// для начала работы счётчиков мы их обнуляем
SchBuyStop=0; SMB=Symbol();
for(x=OrdersTotal()-1;x>=0;x--)
{//Начало цикла
if (OrderSelect(x, SELECT_BY_POS, MODE_TRADES))
{//начало работы с выбранным ордером
if(OrderType()==OP_BUYSTOP)
SchBuyStop++;
}//конец работы с выбранным ордером
}//Конец цикла

 
Melko писал(а) >>

Как это реализовать?

// Функция возвращает истину - есть ордер около текущей цены, ложь - нет ордера. 
// Без проверок на магик и символ и корректности выбора ордера, т.е. для тестера
bool DoesOrderExist(double delta) {
   for(int i=OrdersTotal()-1; i>=0; i--)
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (OrderType() == OP_SELLSTOP && MathAbs(OrderOpenPrice()-Bid) < delta*Point)  // Этот ордер в пределах 5 пунктов от текущей цены
         return(true);
      if (OrderType() == OP_BUYSTOP  && MathAbs(OrderOpenPrice()-Ask) < delta*Point)  // Этот ордер в пределах 5 пунктов от текущей цены
         return(true);
   }
   return(false);
}
Причина обращения: