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

Dmitriy Pashkov  

Добрый день

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

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

BlackTomcat  
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) {...} 
Dmitriy Pashkov  

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

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

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

Maxim Kuznetsov  
Dmitriy Pashkov:

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

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

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

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

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

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

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

Aleksey Vyazmikin  
Dmitriy Pashkov:

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

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

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

Покажите код, в том числе где по принту проверяете....
Dmitriy Pashkov  
-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);}
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 (через принт), если вписываю руками это значение, все нормально, условие не выполняется...

Aleksey Vyazmikin  
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] , потом принтануть и сделать сравнение?
Alexey Viktorov  
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()?
Dmitriy Pashkov  
Alexey Viktorov:
А вы имеете представление как сравниваются строки? Зачем здесь DoubleToStr()?
постом выше выложил код, где значения сравниваются без этой строки, проблема остается. строка добавлена для того, чтобы компилятор меньше ругался на преобразование
Причина обращения: