Округление чисел в МТ4 через NormalizeDouble - страница 15

 
pavlick_:
Некоторые числа можно представить только в виде бесконечной дроби, например,  1/3 в десятичной системе. Но 1/3 имеет не является бесконечной дробью в третичной системе, там она == 0,1. Т.е. в разных системах счисления свои бесконечные дроби. Следовательно, небесконечная дробь в десятичной может быть таковой в двоичной. Например: 0.1, 0.2, 0.3, 0.4, ... не имеют точного представления в двоичном виде. Хоть десять раз вызовите NormalizeDouble, там будет либо 0.199999999..1, либо 0.200000...1. Не знаю, может является новостью.

Истину глаголите!. Уточню, ND нужен ТОЛЬКО для сравнения, не представления. И давно устарел.

 
pavlick_:
Некоторые числа можно представить только в виде бесконечной дроби, например,  1/3 в десятичной системе. Но 1/3 имеет не является бесконечной дробью в третичной системе, там она == 0,1. Т.е. в разных системах счисления свои бесконечные дроби. Следовательно, небесконечная дробь в десятичной может быть таковой в двоичной. Например: 0.1, 0.2, 0.3, 0.4, ... не имеют точного представления в двоичном виде. Хоть десять раз вызовите NormalizeDouble, там будет либо 0.199999999..1, либо 0.200000...1. Не знаю, может является новостью.

это я помню но ведь в данном случае имеется 0+0 а получается не 0

 
transcendreamer:

это я помню но ведь в данном случае имеется 0+0 а получается не 0

В каком данном случае? Приведите пример, когда у вас так получается.
 
fxsaber:

Истину глаголите!. Уточню, ND нужен ТОЛЬКО для сравнения, не представления. И давно устарел.

NormalizeDouble нужен только для нормализации цены при выставлении отложенных ордеров и стопов. И больше ни для чего.

Об этом явно сказано в документации

Рассчитываемые значения StopLoss, TakeProfit, а также значения цены открытия отложенных ордеров, должны быть нормализованы с точностью, значение которой можно получить функцией Digits().

 
Sergei Vladimirov:
В каком данном случае? Приведите пример, когда у вас так получается.

такое случается когда в переменной был 0 и к ней прибавляется 0 

(подозреваю что на самом деле там не 0)

 
Slawa:

NormalizeDouble нужен только для нормализации цены при выставлении отложенных ордеров и стопов. И больше ни для чего.

Об этом явно сказано в документации

а как же сравнение вещественных чисел...
 
transcendreamer:

такое случается когда в переменной был 0 и к ней прибавляется 0 

(подозреваю что на самом деле там не 0)


Именно. "Настоящие" нули при сложении-вычитании нулями и остаются. Потому и предложил вам пример привести.

 
Alexander Bereznyak:
а как же сравнение вещественных чисел...

Сопутствующий побочный эффект.

Оказалось удобно. Но на такое использование изначально не рассчитывали

Для вывода вещественного числа на печать с нужной точностью есть специальные функции.

Скажите, зачем нужно округлять вещественные числа в процессе вычислений? Ведь в этом случае теряется точность вычислений!

 
Sergei Vladimirov:

Именно. "Настоящие" нули при сложении-вычитании нулями и остаются. Потому и предложил вам пример привести.

я уже начал догадываться что NormalizeDouble(new_lot-sum_lots,Lots_Digits); не выдает точно 0 а сохраняет какой-то хвост
 
Slawa:

NormalizeDouble нужен только для нормализации цены при выставлении отложенных ордеров и стопов. И больше ни для чего.

Об этом явно сказано в документации

Устарел

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Альтернативные реализации стандартных функций/подходов

Renat Fatkhullin, 2016.09.02 00:55

Так перегружать нельзя. Одинаковые сигнатуры функций.

Но мысль понятна - функция нормализации с учетом грануляции тика.

Причина обращения: