Скачать MetaTrader 5

Сравнение профита ордера с числом

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114269
Forex Trader  
При сравнении профита ордера с соответствующим числом
if (OrderTakeProfit() == TPBuy || OrderTakeProfit() == TPSell),
сравнение проходит
правильно при TPSell=0.0555 (т.е. OrderTakeProfit()=0.0555 при сравнении с 0.0555 возвращает True)
не правильно при TPSell=0.6012 (т.е. OrderTakeProfit()=0.6012 при сравнении с 0.6012 возвращает FALSE)

В чем причина?
Forex Trader
114269
Forex Trader  
Причина в десятичных числах )
Попробуй нормализовать TPBuy, TPSell и OrderTakeProfit() перед сравнением - по идее поможет.
И на всякий случай..... TPBuy и TPSell объявлены как double?)
Forex Trader
114269
Forex Trader  
Причина в десятичных числах )
Попробуй нормализовать TPBuy, TPSell и OrderTakeProfit() перед сравнением - по идее поможет.

спасибо

И на всякий случай..... TPBuy и TPSell объявлены как double?)

разумеется

К разработчикам.
Как ПРАВИЛЬНО сравнивать два double?
Forex Trader
114269
Forex Trader  
При сравнении профита ордера с соответствующим числом
if (OrderTakeProfit() == TPBuy || OrderTakeProfit() == TPSell),
сравнение проходит
правильно при TPSell=0.0555 (т.е. OrderTakeProfit()=0.0555 при сравнении с 0.0555 возвращает True)
не правильно при TPSell=0.6012 (т.е. OrderTakeProfit()=0.6012 при сравнении с 0.6012 возвращает FALSE)

В чем причина?


Dumaju, saidiot takoje:


int TPBuy = 100;
int TPSell = 100;

if ((OrderTakeProfit() - OrderOpenPrice()) == TPBuy * Point || (OrderOpenPrice() - OrderTakeProfit()) == TPSell * Point)
...
...



Forex Trader
114269
Forex Trader  
Спасибо.

Хотелось бы получить ответ квотовцев, которые знакомы с этой проблемой и имеют образцовое решение, которым и поделятся со мной (надеюсь сегодня)
Forex Trader
114269
Forex Trader  
Эту проблему уже многократно обсуждали. Например, "Косяки с арифметикой?"
Посмотрите нашу функцию CompareDoubles в библиотеке stdlib.mq4. Может быть, она подойдёт Вам в качестве решения.
MetaQuotes Software Corp.
Модератор
182645
MetaQuotes Software Corp.  
Используйте нормализацию NormalizeDouble перед сравнением или сравнение на дельту:
if( MathAbs(var2-var1) < Point ) ...
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий