Не правильно выполняется условие 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()?
постом выше выложил код, где значения сравниваются без этой строки, проблема остается. строка добавлена для того, чтобы компилятор меньше ругался на преобразование