![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
VBAG посмотрите этот скрипт
цена = 1.1111
ма = 1.11110001
При норамализации на 8 знаков ма>цены - правильно. При нормализации на меньшее количество знаков получится что равны - неправильно. Такми образом достигается максимальная точность.
Вообще без нормализации ма > цены - тоже, ведь, правильно. Зачем достигать максимальной точности, если она уже есть, и уже заведомо больше достижимой?
Нормализация до 9 знаков не работает. Такое впечатление что у цены вроде как 9 знаков, а у индиктаора 8 или наоборот (не помню), короче покрыто тайной неизвестности.
Да, скорее всего, это в самой NormalizeDouble счетчик только до 8 знаков. Говорю же, нелепая функция, как ее не крути.
А в упрощенном виде она работает так же быстро как и ComparePrice:
А в исходном виде просто песня :)
Или ComparePrice тоже подходит для сравнения любых чисел с любой заданной точностью?
Или ComparePrice тоже подходит для сравнения любых чисел с любой заданной точностью?
Ну конечно! Если точность известна, что как раз и имеет место при работе с торговыми величинами. Fixed point.
Только объяснять это надо многочисленным авторам тем "о сравнении double-ов".
Поэтому я и предложил _универсальный_ (но далеко не оптимальный) вариант сравнения.
И он работает. Медленно, но надежно. И во всех случаях.
А когда появится тема "Об оптимизации сравнения double-ов", тогда можно будет развить тему ;)
Нужна ли нормализация цен где-нибудь?
В документации написано, что цены в торговых заявках обязательно должны быть нормализованы.
В ветке 'Ненормализованная история и открытие позиций' же написано следующее:
Irtron, выбрал для себя Ваш вариант, ну очень он мне понравился. Чутка подправил для общих случаев, проверил - работает как часы:
int ComparePrice(double a, double b, double digit)
{
a -= b;
b = digit;
if (a > b)
return (1);
if (a < -b)
return (-1);
return (0);
}
Спасибо.
При digit=0 будут проблемы.
При любом digit будут проблемы. Я вообще не понял, что такое digit, и в чем смысл модификации.
Ктому же функция работает медленнее, чем однократный вызов NormalizeDouble()
Что за тема сравнивать функции с разной функциональностью? То equal упрощенный (неработоспособный, правда), теперь вот NormalizeDouble.
Что и кому Вы хотите доказать такой откровенной... (слово поставьте сами)?