Не правильно выполняется условие if

 

Добрый день

прошу помочь, проблема в следующем:

пишу советника, и тут заметил что неправильно он мне сигнал один выдает. Есть условие: if (zn_RSI3_[2][1])>70 ... , которое выполняется, когда  zn_RSI3_[2][1] равно 9 (на данный момент), т.е. оно меньше, а не больше 70. а если меняю знак условия (if (zn_RSI3_[2][1]) < 70 ...) то перестает выполняться условие в скобках {}.  почему он может работать наоборот?

 
Dmitriy Pashkov:

Добрый день

прошу помочь, проблема в следующем:

пишу советника, и тут заметил что неправильно он мне сигнал один выдает. Есть условие: if (zn_RSI3_[2][1])>70 ... , которое выполняется, когда  zn_RSI3_[2][1] равно 9 (на данный момент), т.е. оно меньше, а не больше 70. а если меняю знак условия (if (zn_RSI3_[2][1]) < 70 ...) то перестает выполняться условие в скобках {}.  почему он может работать наоборот?

Ну может потому, что скобки неправильно стоят? Должно быть так: if (zn_RSI3_[2] [1] > 70) {...} 
 

Извиняюсь, неправильно написал, просто сидел уже по разному менял значения и перебирал варианты почему так может быть

 изначально строка вот так выглядит: if (zn_RSI3_[1][1]<DoubleToStr(30,2)) {  

проблема сохраняется 

 
Dmitriy Pashkov:

Извиняюсь, неправильно написал, просто сидел уже по разному менял значения и перебирал варианты почему так может быть

 изначально строка вот так выглядит: if (zn_RSI3_[1][1]<DoubleToStr(30,2)) {  

проблема сохраняется 

Наверное имелся в виду NormalizeDouble, а то вы строку сравниваете на больше/меньше
 
Maxim Kuznetsov:
Наверное имелся в виду NormalizeDouble, а то вы строку сравниваете на больше/меньше

DoubleToStr подставлял, т.к. думал что поможет в этом проблема, значение получается 30,00

без нее значение просто 30. выражение слева на момент публикации моего вопроса было 9,7, т.е. должно было выполнится условие в скобках, чего не происходило

(выводимые значения проверял через вывод Print(...)) 

 
Dmitriy Pashkov:

DoubleToStr подставлял, т.к. думал что поможет в этом проблема, значение получается 30,00

без нее значение просто 30. выражение слева на момент публикации моего вопроса было 9,7, т.е. должно было выполнится условие в скобках, чего не происходило

(выводимые значения проверял через вывод Print(...)) 

Покажите код, в том числе где по принту проверяете....
 
-Aleks-:
Покажите код, в том числе где по принту проверяете....
Print (DoubleToStr(30,2));
Print (DoubleToStr((zn_RSI3_[2][1]),2));

if (DoubleToStr((zn_RSI3_[2][1]),2)<(DoubleToStr(30,2))){
      RSI_TARGET_buy=RSI_TARGET_buy+2;
      RSI_TARGET_D1_1_time=iTime(Symbol(),PERIOD_D1,1);}
if (DoubleToStr((zn_RSI3_[2][1]),2)>(DoubleToStr(70,2))){
      RSI_TARGET_sell=RSI_TARGET_sell+2;
      RSI_TARGET_D1_1_time=iTime(Symbol(),PERIOD_D1,1);}
 

на данный момент начало выполняться условие:

   if (zn_RSI3_[2][2]>70){
      RSI_TARGET_sell=RSI_TARGET_sell+2; Print (zn_RSI3_[2][2]);
      RSI_TARGET_D1_1_time=iTime(Symbol(),PERIOD_D1,1);}


 хотя значение zn_RSI3_[2][2] = 9,91 (через принт), если вписываю руками это значение, все нормально, условие не выполняется...

 
Dmitriy Pashkov:

на данный момент начало выполняться условие:

   if (zn_RSI3_[2][2]>70){
      RSI_TARGET_sell=RSI_TARGET_sell+2; Print (zn_RSI3_[2][2]);
      RSI_TARGET_D1_1_time=iTime(Symbol(),PERIOD_D1,1);}


 хотя значение zn_RSI3_[2][2] = 9,91 (через принт), если вписываю руками это значение, все нормально, условие не выполняется...

А если присвоить новой переменной значение zn_RSI3_[2][2] , потом принтануть и сделать сравнение?
 
Dmitriy Pashkov:
Print (DoubleToStr(30,2));
Print (DoubleToStr((zn_RSI3_[2][1]),2));

if (DoubleToStr((zn_RSI3_[2][1]),2)<(DoubleToStr(30,2))){
      RSI_TARGET_buy=RSI_TARGET_buy+2;
      RSI_TARGET_D1_1_time=iTime(Symbol(),PERIOD_D1,1);}
if (DoubleToStr((zn_RSI3_[2][1]),2)>(DoubleToStr(70,2))){
      RSI_TARGET_sell=RSI_TARGET_sell+2;
      RSI_TARGET_D1_1_time=iTime(Symbol(),PERIOD_D1,1);}
А вы имеете представление как сравниваются строки? Зачем здесь DoubleToStr()?
 
Alexey Viktorov:
А вы имеете представление как сравниваются строки? Зачем здесь DoubleToStr()?
постом выше выложил код, где значения сравниваются без этой строки, проблема остается. строка добавлена для того, чтобы компилятор меньше ругался на преобразование
Причина обращения: