Нашел некорректность в тестере. Иногда, результат вычитания числа из самого себя равен минус ноль. Явление плавающее. Логика эксперта становится неоднозначной. Прилагаю эксперт, ловящий и демонстрирующий это. Запускать на минутках.
Билд здесь ни причем. Нужно менять логику сравнения.
Это очень плохая идея проверять полное равенство двух вещественных чисел. К тому же, OrderOpenPrice() не обязано возвращать нормализованное число. В документации про это ничего не сказано. Поэтому при вашем вычитании
NormalizeDouble(OrderOpenPrice(),Digits) - OrderOpenPrice() Вы получаете, как правило, "потерю точности", но не ноль.
Билд здесь ни причем. Нужно менять логику сравнения.
Это очень плохая идея проверять полное равенство двух вещественных чисел. К тому же, OrderOpenPrice() не обязано возвращать нормализованное число. В документации про это ничего не сказано. Поэтому при вашем вычитании
NormalizeDouble(OrderOpenPrice(),Digits) - OrderOpenPrice() Вы получаете, как правило, "потерю точности", но не ноль.
Отложенник четыре знака. преобразовался в позицию, те же четыре знака. Все цифры в цене совпадают. При нормализации убираются лишние, а в не нормализованной - лишних изначально не былою Откуда неравенство? Или арифметику отменили?
А по поводу проверки равенства двух вещественных чисел, что 2 != 2 или 1,2345 != 1,2345 ?
И еще одно : эффект то плавающий, то есть, то нету.
Я думаю, где-то некорректно чистится мусор.
Хотелось-бы патчик на этот косяк.
Отложенник четыре знака. преобразовался в позицию, те же четыре знака. Все цифры в цене совпадают. При нормализации убираются лишние, а в не нормализованной - лишних изначально не былою Откуда неравенство? Или арифметику отменили?
А по поводу проверки равенства двух вещественных чисел, что 2 != 2 или 1,2345 != 1,2345 ?
И еще одно : эффект то плавающий, то есть, то нету.
Я думаю, где-то некорректно чистится мусор.
Хотелось-бы патчик на этот косяк.
А как Вы убедились что все цифры в цене совпадают?
Например 3.0 это на самом деле 2.9999999999 или же 3.00000001. При сравнении они естественно друг другу не равны. И их разность может равняться нуль, может быть положительной, и может быть отрицательной. Для получения корректного результата нужно нормализировать цены, о чем Вам выше писали.
А как Вы убедились что все цифры в цене совпадают?
Например 3.0 это на самом деле 2.9999999999 или же 3.00000001. При сравнении они естественно друг другу не равны. И их разность может равняться нуль, может быть положительной, и может быть отрицательной. Для получения корректного результата нужно нормализировать цены, о чем Вам выше писали.
Т.е. если я выставляю ордер по 1,2345, то на самом деле его цена 1,234499999999999 или 1,2345000000000001, так что ли.
А как же тогда MarketInfo(Symb,MODE_DIGITS)==4 ?
Т.е. если я выставляю ордер по 1,2345, то на самом деле его цена 1,234999999999999 или 1,2345000000000001, так что ли.
А как же тогда MarketInfo(Symb,MODE_DIGITS)==4 ?
Вы б че-нить по программированию и информитике прочитали то - Вы ж элементарных вещей не знаете. И научились пользоваться поиском - это сотню раз обсуждалось.
Это каждый может поставить себя на пьедестал и оттуда вещать.
Лично вы не владеет вопросом о моих познаниях в программировании и информатике, но беретесь делать заключения на пустом месте.
Для трейдинга не нужно представлять разницу цен с точностью, не различимой в одиннадцатом знаке после запятой. С учетом свопов, достаточно семи знаков.
Остальное - мусор, который надо корректно вычищать после вычислений. Тогда бы не возникла эта тема.
Кстати, Владислав, это не вы написали программы, которыми пользуется весь мир. (В смысле - не учите меня жить)
Это каждый может поставить себя на пьедестал и оттуда вещать.
Лично вы не владеет вопросом о моих познаниях в программировании и информатике, но беретесь делать заключения на пустом месте.
Для трейдинга не нужно представлять разницу цен с точностью, не различимой в одиннадцатом знаке после запятой. С учетом свопов, достаточно семи знаков.
Остальное - мусор, который надо корректно вычищать после вычислений. Тогда бы не возникла эта тема.
Кстати, Владислав, это не вы написали программы, которыми пользуется весь мир. (В смысле - не учите меня жить)
Ты хоть почитай, как представляются вещественные числа в памяти.
И для чего нужен NormalizeDouble (в поиск).
Потом уж обвиняй всех в некомпетентности
Для трейдинга не нужно представлять разницу цен с точностью, не различимой в одиннадцатом знаке после запятой. С учетом свопов, достаточно семи знаков.
Остальное - мусор, который надо корректно вычищать после вычислений.
2 Diamant && 2 goldtrader.
Что-то не помню, ребята, чтоб мы с вами вместе водку пили. Драгоценные вы мои.
Эк вы как все дружно ! Я понимаю - новенький. всякий, там, корпоративный дух, и т.д.
Вашу позицию в рассматриваемом вопросе понял. Для прогера она правильная, согласен. Но для нормального человека, с реальным (вещественным) восприятием мира, которому по сараю, как в памяти компьютера представляется
количество яблок в его авоське, она противоречит здравому смыслу.
Кто хотел услышать, услышал.
Считаю тему исчерпанной.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования