MarketInfo(Symbol(), MODE_TICKVALUE) округляет стоимость пункта до 2-го знака?

 
Хотелось бы спросить разработчиков почему MarketInfo(Symbol(), MODE_TICKVALUE) округляет стоимость пункта до 2-го знака?
Это приводит к неслабой погрешности.

Вот, пример с демо счета (валюта депозита = USD):


Из примера можно получить стоимость 1 пункта: (199.19 - 13.85) USD / 109 пунктов = 1.7003669724770642201834862385321 USD / пункт.

Одновременно со скриншотом было завиксированно значение функции MarketInfo(Symbol(), MODE_TICKVALUE) = 17.01

17.01 - это для лота размером 1.00, у нас лот 0.10, т.е. для нашего случая (17. 01 * 0.10 = 1.701) USD / пункт

Сразу бросается в глаза ошибка округления!!! Значит, кто то неправильное значение показывает, наверно, кто-то запаздывает?

Теперь, зная MarketInfo(Symbol(), MODE_TICKVALUE) и прибыль в пунктах найдем сколько это будет в валюте депозита и сравним с тем, что показывает терминал!

(199.19 - 13.85 = 185.34) USD - эту прибыль показывает терминал без свопа, коммисии, налогов!
     
1,701*109 = 185.409 ~ 185.41 USD - эту прибыль мы бы получили в советнике или скрипте или индикаторе

Конечно, разница не велика, всего 0.07 USD, но это только на одной паре, а на других или в другое время?

Поэтому хотелось бы знать почему так происходит и зачем округлять MarketInfo(Symbol(), MODE_TICKVALUE) до 2 знака? Ведь, округлить никогда не поздно?




 
Вы ведь _в_разное_время_ замеряли MarketInfo(Symbol(), MODE_TICKVALUE) и расчитывали стоимость пипса по сделке?

Так как это сложный кросскурс, то в нем используются дополнительный курс пересчета в доллары. То есть, стоимость пипса в долларах у NZDJPY постоянно плавает. И если Вы будете замерять стоимость пипса NZDJPY в одно время, а рассчитывать стоимость того же пипса в другое время, то получите разницу.

Для проверки используйте вот этот скрипт, который нужно набросить на график с одной открытой позицией по NZDJPY:
int start()
  {
//----
   Print(Symbol()," tickvalue: ",DoubleToStr(MarketInfo(Symbol(), MODE_TICKVALUE),8));
   if(OrderSelect(0,SELECT_BY_POS)) OrderPrint();
//----
   return(0);
  }
Вот результаты запуска с промежутков в несколько минут:

12:56:08 NZDJPY,M1: #4911829 2007.10.15 10:36 buy 1.00 NZDJPY 90.78 0.00 0.00 90.71 0.00 0.00 -119.02  0
12:56:08 NZDJPY,M1: NZDJPY tickvalue: 17.00000000
 
12:36:57 NZDJPY,M1: #4911829 2007.10.15 10:36 buy 1.00 NZDJPY 90.78 0.00 0.00 90.72 0.00 0.00 -101.96  0
12:36:57 NZDJPY,M1: NZDJPY tickvalue: 16.99000000
Как видите - стоимость пункта постоянно плавает.

Для общей информации - при расчетах через кросс-курсы есть правило, используемое в банках:
при конверсионных операциях для правильного отображения сделок в мультивалютных счетах необходимо округлять (промежуточные) результаты до принятой точности (до центов, копеек и тд).
Ошибок в расчетах профитов и курсов в МетаТрейдере нет. Все торговые операции были скрупулезно проверены и согласованы с брокерами и банковской бухгалтерией (в свое время банкиры как раз нашли расхождение в доли цента на конверсиях кросс-курсов) много лет назад.
 
Но по сути, MarketInfo не должна бы урезать стоимость пункта до двух знаков. Сегодня будем разбираться с этим вопросом.
Причина обращения: