Неправильный 0,7

 
Хотелось бы обратится к разработчикам.
Открываем на любой валюте (я пробовал на EURUSD) позицию в 0,7 лота и пишем советник, состоящий из следующего кода.
OrderSelect(0,SELECT_BY_POS);
   if ( OrderLots()>0.7 )
      Alert("BAD LOT!!!");
   if ( OrderLots()==0.7 )
      Alert("GOOD LOT");
   Comment(OrderLots());


Очевидно коде представлено, что если число, которое дает MT>0.7, то выдаст сообщение BAD LOT!!!, если =0,7 - GOOD LOT.
Присоединяем советник к графику, и что видим?
Не правильно - видим BAD LOT!!!
Такое замтно только на 0,7.

 
Многократно уже говорили о том, что нельзя просто так сравнивать числа с двойной точностью (типа double).
В Вашем случае произошло вот что. Когда Вы выставили 0.7 лота, в записи об ордере сохранилочь не 0.7, а целое число 70 (количество лотов, умноженное на 100). Это сделано для убыстрения (причём очень значительного) расчётов. Когда Вы вызываете функцию OrderLots, хранящееся в поле количества лотов число сначала делится на 100, а потом уже отдаётся Вам.
Особенности операций с плавающей точкой в процессоре Intel таковы, что после деления 70 на 100 получается число 0.7000000000000001.
Такие дела.
 
Когда Вы вызываете функцию OrderLots, хранящееся в поле количества лотов число сначала делится на 100, а потом уже отдаётся Вам.

Похоже, что нам надо самостоятельно делать нормализацию до второго знака при выдаче OrderLots().
 
Похоже, что нам надо самостоятельно делать нормализацию до второго знака при выдаче OrderLots().
....и других параметров ордеров - было бы очень неплохо
 
Когда Вы вызываете функцию OrderLots, хранящееся в поле количества лотов число сначала делится на 100, а потом уже отдаётся Вам.

Похоже, что нам надо самостоятельно делать нормализацию до второго знака при выдаче OrderLots().


Наконец-то.
Желательно и во всех других случаях (Бид, Аск и пр).
И на сервере.