Ошибка в неравенствах?

 

Столкнулся с проблемой - при использовании в коде индикатора неравенств, после прикрепления к графику МТ пропускает некоторые описаные в коде сигналы. Вот, набросал для примера:

    for(int b=0; b<limit; b++)
      {
        if(Close[b+1] > Open[b+1] &&
           Close[b+1] - Open[b+1]   >= 6*Point &&
           (High[b+1] - Close[b+1]) <= 1*Point)
           {
             ExtMapBuffer1[b+1]=10;
           }
      }

при проверке в терминале видно, что не отмечаются некоторые свечи, равные 6 пунктам, также пропускаются некоторые с тенями в 1 пункт. По крайней мере, у меня. Что может быть не так?

 

Почему


ExtMapBuffer1[b+1]

а не


ExtMapBuffer1[b]

?

 
if(Close[b+1] > Open[b+1] &&
   Close[b+1] - Open[b+1]   >= 6*Point &&
   (High[b+1] - Close[b+1]) <= 1*Point)

Какое-то бредовое выражение.

Вторая часть вообще не нужна, она лишь частный случай первой. А в третьей части вместо знака <= нужно поставить ==. Или у вас High бывает меньше Close? :))

 
Meat писал (а) >>

А в третьей части вместо знака <= нужно поставить ==. Или у вас High бывает меньше Close? :))

Они бывают равны.

 

А ну да, я ошибся насчёт третьей части условия. Там всё нормально

 

В if() - проверка одной свечи:

if(Close[b+1] > Open[b+1] &&                       - свеча белая
Close[b+1] - Open[b+1] >= 6*Point &&        - не менее 6п высотой
(High[b+1] - Close[b+1]) <= 1*Point)           - верхняя тень не более 1п

Что не так?? Какие ноутбуки вверх ногами? Я это для примера написал, простенькое условие. Может кто всетаки подскажет, почему работает неправильно? Был бы очень признателен.



 

Не надо нервничать, Shdo. Не надо....

Осталось, "чтоб не думалось", добавить скобки . Вот сюда

( Close[b+1] - Open[b+1]) >= 6*Point && ...

Как знать, может после этого всё правильно заработает?

 

У меня так неоднократно было. Вроде бы и можно без скобок в таких и подобных случаях. Но бывает, что без скобок некорректно код работает. А со скобками, - работает как надо !

 
без разницы. Приоритет сравнения ниже приоритета вычитания. К тому же уже давно проверил. Неужели никто с этим не сталкивался?
 
Рекомендую вместо High-Low просчитать через iHigh() - iLow(), было такое дело, но иногда пробегало деление на ноль, хотя нулем и близко не пахло
 
xrust  спасибо, попробую.
Причина обращения: