Здравствуйте, Уважаемые! Так правильно будет?

 
int start()
  {
   double A=NormalizeDouble(Ask,Digits);
   double B=NormalizeDouble(Bid,Digits);

   if(OrdersTotal()>0) // Если уже совершена покупка или продажа.
     {
      if(Fun_New_Bar()==false) // Если нет нового бара выходим.
        {
         return(0);
        }
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))// Если есть новый бар выбираем ордер (он у нас должен быть всего один).
        {       
         if(OrderType()==OP_BUY && MagicNumber) // Если это Buy..
           {
            if(OrderClose(OrderTicket(),OrderLots(),B,0)) // ..закрываем его.
               return(0);
           }
         if(OrderType()==OP_SELL && MagicNumber) // Если это Sell..
           {
            if(OrderClose(OrderTicket(),OrderLots(),A,0)) // ..закрываем его.
               return(0);
           }
        }
     }
 }

bool Fun_New_Bar() // Ф-ия обнаружения нового бара
  {                                             
   if(Prev_Time!=Time[0])
     {
      return(true);
     }
   return(false);
  }
Есть функция закрытия ордеров по открытию нового бара. Все отлично в ней работает. Проблема в том, что на рынке есть маленькие свечи, у которых цена открытия близка или равна цене закрытия. Нужно добавить условие, чтобы закрытие происходило только в случае когда цена открытия нового бара ушла бы от цены закрытия предыдущего бара на N-ое количество пунктов, неважно в плюсе ордер или в минусе. Помогите кому не сложно. Заранее спасибо.
 
if(MathAbs(Open[0]-Close[1])>=Point*X){закрытие}
 
Dmitry Fedoseev:
Дмитрий, функцию сюда поставить, правильно понимаю? Перестал закрывать ордера вообще...
   if(OrdersTotal()>0) // Если уже совершена покупка или продажа.
    {
      if(MathAbs(Open[0]-Close[1])>=Point*X)
        {
 
Александр:
Правильно. Наверно большое значение X. Для проверки поставьте X=0, должно работать как исходный вариант.
 
Dmitry Fedoseev:
Правильно. Наверно большое значение X. Для проверки поставьте X=0, должно работать как исходный вариант.

Поставил Х=0, работает.

if(MathAbs(Open[0]-Close[1])>=Point*X) 
MathAbs-Возвращает значение по модулю больше 0(тут написано еще что это целое число,а целое число без знаков после запятой, может в этом проблема?!!!)

Open[0]-цена открытия текущего бара
Close[1]-цена открытия предыдущего бара
Point - цена одного пункта
Например :  (113,60-113,66=|-0,06|>=0,01*Х)     =    0,06>=0,01*5    =    0,06>=0,05 
Множитель Х по идее должен быть целым числом 1,2,3...15 , 
но почему то условие с множителем не работает..чего то я не понимаю...
 
Потому-что цена открытия обычно отличается от цены закрытия предыдущего бара на 1 пункт. Надо что-то с условиями думать. Может цену открытия нового бара сравнивать с ценой открытия бара на котором был открыт ордер,  или проверять размер предыдущего бара - MathAbs(Close[1]-Open[1])  
 
Dmitry Fedoseev:
Потому-что цена открытия обычно отличается от цены закрытия предыдущего бара на 1 пункт. Надо что-то с условиями думать. Может цену открытия нового бара сравнивать с ценой открытия бара на котором был открыт ордер,  или проверять размер предыдущего бара - MathAbs(Close[1]-Open[1])  
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))// Если есть новый бар выбираем ордер (он у нас должен быть всего один).
        {
         if(MathAbs(Open[1]-Close[1])>=(Point*X))//Условие удаления шума маленьких свечей
           {
            if(OrderType()==OP_BUY && MagicNumber) // Если это Buy..
Вот так работает, только в открытие добавил функцию, чтобы следующий ордер не открывался, пока текущий не закроется.
   if(OrdersTotal()==0) // Если нет открытых ордеров.
 
Огромное Вам спасибо Дмитрий!  Если вопросы были туповаты, прошу прощения, только начинаю...
Причина обращения: