Какая-то неясность с оператором отношения ">=".

 

Есть такая проблема. Не пойму почему советник считает равным два одинаковых числа.

ask=Ask;

bid=Bid; 

if (ask<=TP){usp=1; Alert("tip1 usp1");}

 if (ask>=SL){usp=0; Alert("tip1 usp0");} 

 tiptek=(SL-ask)*100;//вычисление разницы значений

 if(ask<SL) Alert("ask<SL! ",tiptek);

 

И вот что выдаёт при тестировании:

2015.11.07 22:54:44.623 2015.10.20 13:12  skalp EURUSD,M30: Alert: ask<SL!  ask 1.1382 SL1.1382 разность 0


 Не пойму почему программа воспринимает значение ask меньше чем SL. 

Помогите пожалуйста кто-нибудь!

 

Проблему ты конечно класно описал!

 А сколько аск ровняется, а какое значение в SL?????

 
vlad69793:

... Не пойму почему советник считает равным два одинаковых числа.

...

 Я пост не дочитал, но, постановка вопроса мне понравилась.

Мне это напоминает, когда в наш призыв, мы писали сочинения, и перлы из них были опубликованы в газете "Вестник ЛГУ"

"До поступления в ФМШ мои знания равнялись нулю. Теперь они стали во много раз больше." 

 
vlad69793:



 Не пойму почему программа воспринимает значение ask меньше чем SL. 


А почему решили что два равных числа?
 

Да скажите уже человеку, что проблема в сравнении даблов! Что нельзя сравнивать два вещественных числа так же, как и целые числа. Зачем голову морочить?

Топикстартеру: для сравнения вещественных чисел нужно либо нормализовать их перед сравнением, либо производить сравнение их абсолютной разницы с DBL_EPSILON

 

Дык.

А что не нормализованые числа плохо сравниваются?

 

Понял о чём вы. 

 
Scriptong:

Да скажите уже человеку, что проблема в сравнении даблов! Что нельзя сравнивать два вещественных числа так же, как и целые числа. Зачем голову морочить?

Топикстартеру: для сравнения вещественных чисел нужно либо нормализовать их перед сравнением, либо производить сравнение их абсолютной разницы с DBL_EPSILON. 

Спасибо. Уже понятнее.

В основном работает нормально, но примерно в 1 из  30 случаев сравнивает не правильно.

Буду пробовать исправлять. 

 

Всё, исправил. Просто прогнал через NormalizeDouble с 5 знаками.

Всём большое спасибо за участие!

Особая благодарность  Scriptong

 
vlad69793:

Всё, исправил. Просто прогнал через NormalizeDouble с 5 знаками.

Значит, Вас ожидает новая встреча с этой проблемой.