Ошибки, баги, вопросы - страница 2820
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Тут есть ещё нюансы.
Вещественное число, умноженное на 0.5 может не сравниться с тем же числом, разделённым на 2.0
Все так. Но вопрос заключался в том, почему число 1.79435 не является нормализованным до 5-го знака после запятой?
ЗЫ Предыстория вопроса.
Сработал SL в Тестере. DEAL_PRICE = 1.79435, ORDER_PRICE_OPEN = 0 (так принято в MT5), DEAL_COMMENT = "sl 1.79435".
Нужно было понять, было скольжение при исполнении SL или нет? Поэтому просто сравнил DEAL_PRICE и цену из комментария. Глазами вижу, что цены одинаковые, а MQL говорит, что нет. В итоге докопался до исходного сравнения.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2020.08.10 09:04
Все так. Но вопрос заключался в том, почему число 1.79435 не является нормализованным до 5-го знака после запятой?
ЗЫ Предыстория вопроса.
Сработал SL в Тестере. DEAL_PRICE = 1.79435, ORDER_PRICE_OPEN = 0 (так принято в MT5), DEAL_COMMENT = "sl 1.79435".
Нужно было понять, было скольжение при исполнении SL или нет? Поэтому просто сравнил DEAL_PRICE и цену из комментария. Глазами вижу, что цены одинаковые, а MQL говорит, что нет. В итоге докопался до исходного сравнения.
Извините, но слышать это от вас как-то странно.
Извините, но слышать это от вас как-то странно.
Повторяю свой вопрос.
почему число 1.79435 не является нормализованным до 5-го знака после запятой?
Все так. Но вопрос заключался в том, почему число 1.79435 не является нормализованным до 5-го знака после запятой?
нормализация это не округление
@Slava пишет о том, что внутренне представление double отличаются:
2020.08.10 13:33:37.737 tst_normalize (EURUSD,H1) NORM_DOUBLE = 1.79435
2020.08.10 13:33:37.737 tst_normalize (EURUSD,H1) LongToHex(tmp.ul_value) = 3FFCB5A858793DDA
2020.08.10 13:33:37.737 tst_normalize (EURUSD,H1) CONST_DOUBLE = 1.79435
2020.08.10 13:33:37.737 tst_normalize (EURUSD,H1) LongToHex(tmp.ul_value) = 3FFCB5A858793DD9
ЗЫ: где то был хороший пост @Nikolai Semko , он очень качественно описал работу с double, может найду ссылку выложу
UPD: https://www.mql5.com/ru/forum/1111/page2623#comment_14473837
нормализация это не округление
На пять с плюсом знаю теорию, как работать с double и прочее. Алгоритм NormalizeDouble содержит ошибку. Поднятая тема только косвенно касается сравнения даблов.
Повторяю свой вопрос.
На снимке видно значение не нормализованной переменной n и нормализованной m и на сколько они отличаются. Но если вы хотите сравнивать стринги, то это уже ваше предпочтение.
На пять с плюсом знаю теорию, как работать с double и прочее. Алгоритм NormalizeDouble содержит ошибку. Поднятая тема только косвенно касается сравнения даблов.
Алгоритм NormalizeDouble содержит ошибку.
да
кажется A100 писал об этом
но разработчики с момента появления MQL придерживаются этой "особенности", увы
Если поправят, ошибка исчезнет.
думаю появятся другие баги и будет очень много шума )))
Не появятся, т.к. почти все сравнивают даже нормализованные даблы через нормализацию. Т.е. ставят ее куда попало.
Правильная нормализация всегда должна давать true в этом условии.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2020.08.10 11:37
Это единственная проверка правильности нормализации. Если будет выдавать всегда true, то ничего сломаться не сможет.
NormalizeDouble - это просто определенный алгоритм, который применяется к double-числу. К сожалению, в нем ошибка. Если поправят, ошибка исчезнет. От этого double-представления всех остальных никак не поменяются.