Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Статьи уже помогли многим трейдерам. Заходи и читай!
Forex Trader
114376
Forex Trader 2006.02.20 19:20 
Хотелось бы обратится к разработчикам.
Открываем на любой валюте (я пробовал на 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.

Forex Trader
114376
Forex Trader 2006.02.21 10:34  
Многократно уже говорили о том, что нельзя просто так сравнивать числа с двойной точностью (типа double).
В Вашем случае произошло вот что. Когда Вы выставили 0.7 лота, в записи об ордере сохранилочь не 0.7, а целое число 70 (количество лотов, умноженное на 100). Это сделано для убыстрения (причём очень значительного) расчётов. Когда Вы вызываете функцию OrderLots, хранящееся в поле количества лотов число сначала делится на 100, а потом уже отдаётся Вам.
Особенности операций с плавающей точкой в процессоре Intel таковы, что после деления 70 на 100 получается число 0.7000000000000001.
Такие дела.
MetaQuotes Software Corp.
Модератор
177069
MetaQuotes Software Corp. 2006.02.21 11:41  
Когда Вы вызываете функцию OrderLots, хранящееся в поле количества лотов число сначала делится на 100, а потом уже отдаётся Вам.

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

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


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