NormalizeDouble VS MathRound - страница 2

 
Integer:
kermit:

Дорогой Интегер.

Point является нормализованной величиной - 10 в минус какой-то степени.

NormalizeDouble(OrderOpenPrice(),Digits) - является тоже нормализованной.

И как действия над нормализованными значениями могут дать ненормализованный результат?



А вот так вот! Любые арифметические действия над переменным double дают ненормализованный результат. Лично для меня это очевидно. Брюки поглаженные перед стиркой, после стирки уже никак глаженными не назовешь


Не нормализованный - это значит не фиксированное количество знаков после запятой.

Если 10/3, то понятно, что значение не нормализованное

Но не как не должно получаться 0.50/1= 0.51 или 0.49

 

Если вам нравится думать так... думайте так. тока не удивляйтесь почему у вас что-то неправильно работает

 

Уважаемый Интегер.

Вы мой предыдущий пост читали?

В частности - Можете привести хоть один весомый аргумент, почему цена имеет право быть не кратной Point?

Если ответа нет, то это баг МТ, который должен быть исправлен. Т.е. нормализация цены должна производиться терминалом ещё при "входе" или сервером ещё при "выходе". :)

 
kermit:

В частности - Можете привести хоть один весомый аргумент, почему цена имеет право быть не кратной Point?

Здесь пол форума посвящено этому аргументу и не весомому, я тежеловесному. Переменные double.


Последний пост читал, у вас неправильно понимание нормализации. Норамализуется значение, а не переменная.

 
kermit:

В частности - Можете привести хоть один весомый аргумент, почему цена имеет право быть не кратной Point?

И такое бывает: пример ненормализованных тиков

17:36:31 Old tick USDJPY60 106.55000/106.58000
17:36:31 Old tick GBPJPY1440 209.67999/209.75999
17:36:31 Old tick GBPJPY60 209.67999/209.75999
 
PSmith:
kermit:

В частности - Можете привести хоть один весомый аргумент, почему цена имеет право быть не кратной Point?

И такое бывает: пример ненормализованных тиков

17:36:31 Old tick USDJPY60 106.55000/106.58000
17:36:31 Old tick GBPJPY1440 209.67999/209.75999
17:36:31 Old tick GBPJPY60 209.67999/209.75999


Понятно, что такое бывает. С этим я и столкнулся.

Но разве такое допустимо? Цена должна нормализовываться на уровне терминала или сервера, а не трудами юзера.

Я считаю, что это баг, который MQ должны исправить, а не писать, что кто не использует НормалайзДабл - тот лопух.

 

Народ!!! Ну ёлки палки. Вопрос на сегодня не в типе переменных, их сравнении и явных и не явных привидениях, а почему цена может быть не кратна Point.

"Поднимите руку" кто не считает это багом?


З.Ы. неужели так сложно сделать нормализацию цены на уровне терминала, а не помогать юзерам плодить скрытые ошибки?

или эта ошибка была проплачена? о_О

 

Cкрытых ошибок вагон и маленькая тележка. У меня есть код который проводит очень много параноидальных проверок. Которые могут возникнуть при выполнении функции OrderSend().

Вот тут посмотрите, но это только начало.

'Управление ордерами – это просто'

'Как разработать надежный и безопасный торговый робот на языке MQL4'

'Учёт ордеров в большой программе'


Так что Вы только в начале пути. И не тратьте слова зря (добрые, такие и ласковые :-)). Когда пройдете весь путь. Тогда уж и выскажете все и по полной :-) .


ИХМО не дело когда описание логики торговой системы занимает 20 строчек, а выполнение одной встроенной функции OrderSend() 2000 строк кода. И вместо разработки и тестирования ТС приходиться заниматься ловлей ошибок о которых даже представления не имеешь, т.к. 50% ошибок в тестере никаким образом не проявляется.

 
kermit:

Народ!!! Ну ёлки палки. Вопрос на сегодня не в типе переменных, их сравнении и явных и не явных привидениях, а почему цена может быть не кратна Point.

Думаю, такая цена (с бОльшей точностью) может возникнуть в нескольких случаях:
- при переоткрытии позиции в полночь для начисления свопа (своп не обязательно кратен пункту, и цена становится бОльшей точности);
- при тестировании на импортированных вручную ненормализованных котировках - сам не раз натыкался на ошибку ордерсенд (типа цена Аск - 1.23456 - не подходит для открытия позиции).
Причина обращения: