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

 
Dmitriy Pashkov:
постом выше выложил код, где значения сравниваются без этой строки, проблема остается. строка добавлена для того, чтобы компилятор меньше ругался на преобразование
Чтобы компилятор не ругался на преобразование надо это преобразование грамотно сделать. Но на мой вопрос ответа так и нету...
 
-Aleks-:
А если присвоить новой переменной значение zn_RSI3_[2][2] , потом принтануть и сделать сравнение?

обязательно попробую, но у меня 5 подобных условий на бай, и столько же на селл, и только пара из них ведет себя подобным образом, остальные нормально обрабатываются (щас вот одно условие проходит нормально, но у него другие цифры в скобках (массив)) 

 
Dmitriy Pashkov:

обязательно попробую, но у меня 5 подобных условий на бай, и столько же на селл, и только пара из них ведет себя подобным образом, остальные нормально обрабатываются (щас вот одно условие проходит нормально, но у него другие цифры в скобках (массив)) 

От того что значение ячейки массива присвоишь переменной ничего не изменится. Твоя проблема в том, что переменная zn_RSI3_[2][2] имеет тип double которое сравнивается с целочисленным значением 30 тип int

Если написать

if(zn_RSI3_[2][1] < 30.0)
то все проблемы с ругательством компилятора пропадут и сравниваться будут значения, а не строки.
 
Alexey Viktorov:
Чтобы компилятор не ругался на преобразование надо это преобразование грамотно сделать. Но на мой вопрос ответа так и нету...

если Вы подскажите как грамотно делать - буду признателен

на Ваш предыдущий вопрос тогда затрудняюсь ответить, возможно я что то не так делаю 

 
Alexey Viktorov:

От того что значение ячейки массива присвоишь переменной ничего не изменится. Твоя проблема в том, что переменная zn_RSI3_[2][2] имеет тип double которое сравнивается с целочисленным значением 30 тип int

Если написать

if(zn_RSI3_[2][1] < 30.0)
то все проблемы с ругательством компилятора пропадут и сравниваться будут значения, а не строки.

то что я добавляю эту строку, в итоге дает значение 30.00, это не одно и тоже?

я попробую как Вы написали, как начнут выполняться эти условия, спасибо

 
Alexey Viktorov:От того что значение ячейки массива присвоишь переменной ничего не изменится. Твоя проблема в том, что переменная zn_RSI3_[2][2] имеет тип double которое сравнивается с целочисленным значением 30 тип int

 Где это написано, что число само по себе преобразуется в int или double?

По вашей логике 10 и 10,1 нельзя сравнивать между собой, пока 10 не будет выражена в виде 10.0? 

 
-Aleks-:

 Где это написано, что число само по себе преобразуется в int или double?

По вашей логике 10 и 10,1 нельзя сравнивать между собой, пока 10 не будет выражена в виде 10.0? 

Это не моя логика, это ваши фантазии.
 
Alexey Viktorov:
Это не моя логика, это ваши фантазии.
Тогда излагайте,пожалуйста, свою логику четче, что б не было месту моим фантазиям.
 
-Aleks-:
Тогда излагайте,пожалуйста, свою логику четче, что б не было месту моим фантазиям.
Почитайте Документацию, раздел "Основы языка"  - "Типы данных" - "Приведение типов". Кроме основного текста, обратите внимание на примеры кода, они многое проясняют. В деле приведения типов очень много подводных камней.

 
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);}

Вы сравниваете строки, а не значения.

Нужно так:

if(zn_RSI3_[2][1]<30) {
   RSI_TARGET_buy=RSI_TARGET_buy+2;
   RSI_TARGET_D1_1_time=iTime(Symbol(),PERIOD_D1,1);
   }
if(zn_RSI3_[2][1]>70) {
   RSI_TARGET_sell=RSI_TARGET_sell+2;
   RSI_TARGET_D1_1_time=iTime(Symbol(),PERIOD_D1,1);
   }
Причина обращения: