Dmitriy Pashkov: постом выше выложил код, где значения сравниваются без этой строки, проблема остается. строка добавлена для того, чтобы компилятор меньше ругался на преобразование
Чтобы компилятор не ругался на преобразование надо это преобразование грамотно сделать. Но на мой вопрос ответа так и нету...
-Aleks-: А если присвоить новой переменной значение zn_RSI3_[2][2] , потом принтануть и сделать сравнение?
обязательно попробую, но у меня 5 подобных условий на бай, и столько же на селл, и только пара из них ведет себя подобным образом, остальные нормально обрабатываются (щас вот одно условие проходит нормально, но у него другие цифры в скобках (массив))
обязательно попробую, но у меня 5 подобных условий на бай, и столько же на селл, и только пара из них ведет себя подобным образом, остальные нормально обрабатываются (щас вот одно условие проходит нормально, но у него другие цифры в скобках (массив))
От того что значение ячейки массива присвоишь переменной ничего не изменится. Твоя проблема в том, что переменная zn_RSI3_[2][2] имеет тип double которое сравнивается с целочисленным значением 30 тип int
Если написать
if(zn_RSI3_[2][1] < 30.0)
то все проблемы с ругательством компилятора пропадут и сравниваться будут значения, а не строки.
От того что значение ячейки массива присвоишь переменной ничего не изменится. Твоя проблема в том, что переменная 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-: Тогда излагайте,пожалуйста, свою логику четче, что б не было месту моим фантазиям.
Почитайте Документацию, раздел "Основы языка" - "Типы данных" - "Приведение типов". Кроме основного текста, обратите внимание на примеры кода, они многое проясняют. В деле приведения типов очень много подводных камней.
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);}
постом выше выложил код, где значения сравниваются без этой строки, проблема остается. строка добавлена для того, чтобы компилятор меньше ругался на преобразование
А если присвоить новой переменной значение zn_RSI3_[2][2] , потом принтануть и сделать сравнение?
обязательно попробую, но у меня 5 подобных условий на бай, и столько же на селл, и только пара из них ведет себя подобным образом, остальные нормально обрабатываются (щас вот одно условие проходит нормально, но у него другие цифры в скобках (массив))
обязательно попробую, но у меня 5 подобных условий на бай, и столько же на селл, и только пара из них ведет себя подобным образом, остальные нормально обрабатываются (щас вот одно условие проходит нормально, но у него другие цифры в скобках (массив))
От того что значение ячейки массива присвоишь переменной ничего не изменится. Твоя проблема в том, что переменная zn_RSI3_[2][2] имеет тип double которое сравнивается с целочисленным значением 30 тип int
Если написать
Чтобы компилятор не ругался на преобразование надо это преобразование грамотно сделать. Но на мой вопрос ответа так и нету...
если Вы подскажите как грамотно делать - буду признателен
на Ваш предыдущий вопрос тогда затрудняюсь ответить, возможно я что то не так делаю
От того что значение ячейки массива присвоишь переменной ничего не изменится. Твоя проблема в том, что переменная zn_RSI3_[2][2] имеет тип double которое сравнивается с целочисленным значением 30 тип int
Если написать
то что я добавляю эту строку, в итоге дает значение 30.00, это не одно и тоже?
я попробую как Вы написали, как начнут выполняться эти условия, спасибо
Где это написано, что число само по себе преобразуется в int или double?
По вашей логике 10 и 10,1 нельзя сравнивать между собой, пока 10 не будет выражена в виде 10.0?
Где это написано, что число само по себе преобразуется в int или double?
По вашей логике 10 и 10,1 нельзя сравнивать между собой, пока 10 не будет выражена в виде 10.0?
Это не моя логика, это ваши фантазии.
Тогда излагайте,пожалуйста, свою логику четче, что б не было месту моим фантазиям.
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);}
Вы сравниваете строки, а не значения.
Нужно так:
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);
}