Добрый день уважаемые форумчане!Проблема такая:if(OrderType() == 1 && Bid <= (OrderOpenPrice() - 400*Point) && (OrderStopLoss() == (OrderOpenPrice() - (50*Point))))В указанной выше строке как то неправильно обрабатывается часть (OrderStopLoss() == (OrderOpenPrice() - (50*Point)))То есть OrderStopLoss() получается верно, OrderOpenPrice() тоже получается верно, (50*Point) тоже множит правильно,
НО вот целиком выражение (OrderOpenPrice() - (50*Point)) получается бредовым, а именно:
стоплосс 0.97183
50*point 0.0005
STOPLOSS-50*Point 0.9728300000000001
Как так то??? Откуда появляются эти 00000000001 к должному значению???Прошу помощи - мозг кипит.
Появляется это из-за того, что вся информация в компьютере хранится в двоичном, а не в десятичном, виде. Многие десятичные числа при переводе в двоичный вид записываются как бесконечная дробь.
Для информации:
http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB
и
https://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D1%81_%D0%BF%D0%BB%D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B9_%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%BE%D0%B9
Спасибо, собственно говоря понятно откуда берется 00000000001. Вопрос №2 - как нормализовать данное значение с числа 0.9728300000000001 до 0.97283???
ВОПРОС - функция NormalizeDouble( (OrderOpenPrice() - (50*Point)), Digits) будет работать?
ВОПРОС - функция NormalizeDouble( (OrderOpenPrice() - (50*Point)), Digits) будет работать?
ВОПРОС - функция NormalizeDouble( (OrderOpenPrice() - (50*Point)), Digits) будет работать?
Зачем лишние скобки?
NormalizeDouble(OrderOpenPrice() - 50*Point, Digits);
Зачем лишние скобки?

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день уважаемые форумчане! Проблема такая: if(OrderType() == 1 && Bid <= (OrderOpenPrice() - 400*Point) && (OrderStopLoss() == (OrderOpenPrice() - (50*Point)))) В указанной выше строке как то неправильно обрабатывается часть (OrderStopLoss() == (OrderOpenPrice() - (50*Point))) То есть OrderStopLoss() получается верно, OrderOpenPrice() тоже получается верно, (50*Point) тоже множит правильно,
НО вот целиком выражение (OrderOpenPrice() - (50*Point)) получается бредовым, а именно:
стоплосс 0.97183
50*point 0.0005
STOPLOSS-50*Point 0.9728300000000001
Как так то??? Откуда появляются эти 00000000001 к должному значению??? Прошу помощи - мозг кипит.