Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Dmitriy Pashkov
154
Dmitriy Pashkov  

Добрый день

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

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

BlackTomcat
245
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
154
Dmitriy Pashkov  

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

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

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

Maxim Kuznetsov
10171
Maxim Kuznetsov  
Dmitriy Pashkov:

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

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

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

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

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

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

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

-Aleks-
7092
-Aleks-  
Dmitriy Pashkov:

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

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

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

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

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