Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
NormalizeDouble(x-y,Digits) - в этой конструкции нормализация используется, исходя из её сути. То что предлагаете вы во втором варианте - это искусственно созданная ситуация, интересная скорее всего просто из каких-то любознательных соображений, нежели в практическом применении.
Некорректно. Округление до целого.
Это будет равно нулю, так так 1.1-1.2 даст -0.1, которое округлится до НУЛЯ знаков и станет 0.0
Это будет равно нулю, так так 1.2-1.6 даст -0.4, которое округлится до НУЛЯ знаков и станет 0.0 Вы программист или как?
Вы программист или как?
Если в в программе делаю присвоение явно
double dVar = 1.3
то отладчик показывает значение dVar 1.299999999....
Если же
float fVar = 1.3
то вижу в отладчике, что значение fVar 1.30000
Так может быть разработчикам MT использовать просто тип float тогда нормализовать не надо вообще и математические операции с типом float будут быстрее происходить нежели с double. А точности float, на сколько я знаю, вполне хватает для представления котировок различных инструментов.
А почему разработчики выбрали тип double. Я посмотрел в отладчике VS и увидел такую штуку
Так может быть разработчикам MT использовать просто тип float тогда нормализовать не надо вообще и математические операции с типом float будут быстрее происходить нежели с double. А точности float, на сколько я знаю, вполне хватает для представления котировок различных инструментов.
ну к примеру
double dev = (double)Close[1]/Close[5];
где float Close[] то есть массив флотов
В этом случае вы не потеряете точность если будете делить два double, а может быть даже потерятете из-за не точного представления чисел как вот в примере
1.30000 становится 1.2999999 в double. Делить и умножать и прочие сложные мат операции вы будете совершать изначально над числами с начальной погрешностью
1.2999999... или 1.300.....01 . Просто после сложных расчётов вы сможете привести значение цены снова к типу float.
Значение индиктора вообще приводить к float и не потребуется.
Зато сравнение и вычитание можно делать без всяких нормализаций значения цен, что увеличит скорость работы эксперта.
И потом, зачем вам супер точность в расчёте индикторов, если как вы говорили они должны быть толстокожими и такие мелочные погрешности не должны сказываться
на корректную работу эксперта. На разнице котировок от различных брокеров вы уже допускаете не хилую погрешность
А вообще, за использование float вместо double нас бы трейдеры и программисты давно бы запинали.
1.3 я взял как пример а представления значения цен с погрешностью я уже давно замечал. собственно для этого и использовать желательно повсеместно NormolizeDouble за что пользователи вашего софта или просто не догадываются что его стоит использовать при открытии позиций и сравнении цен или забывают. И вообще нормолайз замедляет работу эксперта.
Если делим два float то можем получить double и дальше с ним работать уже с точностью double. Так же и другие мат операции и мат функции могут принимать как вход float
который изначально не даёт погрешности а дальше идёт преобразование к double и работа с ним в расчётах.
Я думаю стоит преобразовать массивы цен к float. Можно голосование на форуме разместить кто за массивы цен типа double и normalizeDouble а кто за массивы цен типа float и без всяких там нормалайз
... Так же и другие мат операции и мат функции могут принимать как вход float который изначально не даёт погрешности а дальше идёт преобразование к double и работа с ним в расчётах.
(A*B)/B!=A
(A+B)+C!=(A+C)+B.
К тому же если использовать тип float, то проблемы с погрешностями начнутся раньше, чем при использовании double, так как под float отведено меньше байт, соответственно и вещественное число хранится во float с бОльшей погрешностью.
А почему разработчики выбрали тип double. Я посмотрел в отладчике VS и увидел такую штуку
Если в в программе делаю присвоение явно
double dVar = 1.3
то отладчик показывает значение dVar 1.299999999....
Если же
float fVar = 1.3
то вижу в отладчике, что значение fVar 1.30000
Так может быть разработчикам MT использовать просто тип float тогда нормализовать не надо вообще и математические операции с типом float будут быстрее происходить нежели с double. А точности float, на сколько я знаю, вполне хватает для представления котировок различных инструментов.
Успехов.