Модификация SL

 

Добрый день уважаемые форумчане! Проблема такая: 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 к должному значению??? Прошу помощи - мозг кипит.

 
znoi_237:

Добрый день уважаемые форумчане!Проблема такая: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???
 
znoi_237:
Спасибо, собственно говоря понятно откуда берется 00000000001. Вопрос №2 - как нормализовать данное значение с числа 0.9728300000000001 до 0.97283???

ВОПРОС - функция NormalizeDouble( (OrderOpenPrice() - (50*Point)), Digits) будет работать?

 
znoi_237:

ВОПРОС - функция NormalizeDouble( (OrderOpenPrice() - (50*Point)), Digits) будет работать?


Огромное спасибо за помощь! А ларчик просто открывался... В прочем как всегда...
 
znoi_237:

ВОПРОС - функция NormalizeDouble( (OrderOpenPrice() - (50*Point)), Digits) будет работать?


Зачем лишние скобки?

NormalizeDouble(OrderOpenPrice() - 50*Point, Digits); 
 
borilunad:

Зачем лишние скобки?


Незачем... Это мусор... Наставил в процессе поиска решения проблемы и разделения частей кода... Так удобно было проверять отдельные части строки на ошибки. В общем просто мусор.