Просто такова реальность.
NormalizeDouble() приводит число в норму, но вывод принтом все портит. Число нормальное, но нет возможности это увидеть.
Просто такова реальность.
NormalizeDouble() приводит число в норму, но вывод принтом все портит. Число нормальное, но нет возможности это увидеть.
То есть если проверить 0.2*3==0,6000000000000000, то будет true?
Насколько я помню такие случаи из практики, то вроде бы "ДА"
То есть если проверить 0.2*3==0,6000000000000000, то будет true?
Насколько я помню такие случаи из практики, то вроде бы "ДА"
NormalizeDouble(0.2*3,2)==0,60
Скажите почему при volume=0.2*3 получается вот такое число 0,6000000000000001?????????
Пробовал NormalizeDouble(volume,2)- та же песня, WTF????
Причем терминал выдает сообщение про установку ордера с лотом 0,6 а мой принт 0,6000000000000001. Это что - глюк принта?
Нормализацию нужно проводить только (непосредственно) при сравнении/выводе.
для принта использовать DoubleToString
ps. англичане вот вообще пишут "никогда не используйте эту функцию" )https://www.mql5.com/en/forum/146370#comment_3693988
...
ps. англичане вот вообще пишут "никогда не используйте эту функцию" )https://www.mql5.com/en/forum/146370#comment_3693988
Он не прав.
return( MathRound(p/ts) * ts );
Нормализация по размеру тика это хорошо, но результат этого вычисления надо нормализовать обычным образом.
С точки зрения программирования подобные вопросы любопытны. И таких проблем жизнь подкидывает множество. Когда же бедному алготрейдеру, к таком случае, заниматься проблемами торговли на форексе? Это вопрос риторический. И когда начинают безапелляционно утверждать, что алготрединг более эффективен чем ручной трейдинг...!? Я, мягко говоря, очень сильно сомневаюсь. (Я - сам программист, я всё это могу оценить) Вот поэтому какого советника ни возьми - они все сливают. А вот ручная торговля - действительно встречается очень качественной. Посмотрите в пункте меню Сигналы - некоторые сигналы - очень даже ничего. Особенно я аплодирую тем из них, кто работает со стоп-лоссом.(Я к таким не отношусь).
так округление происходит в MathRound, по идее результат выходит без хвостов...
После этого округления делается умножение.
для того чтоб понять что такое число в формате double необходимо вспомнить архитектуру процессора и как он представляет эти числа.
вспоминаем (кто изучал) что такое число в понимании компа, это последовательность 0 и 1 например число 4 он видит как 0100 а число 8 как 1000. как следствие он не может видеть число 0.6 в чистом виде как мы, а видит его как 2 в какой то степени, для него 4=2^2 , а 8=2^3 , а 125=2^6+2^5+2^4+2^3+2^2+2^0. из этого следует что написание 0.6 для нас понятно, так как это десятичная система исчисления, а у компа двоичная и он будет представлять себе число 0.6 по битно так, как это заложено в его структуре памяти.и вывод в чистом виде как 0.60000001 для него приемлемо. а вот для того чтоб видеть нормальный результат в принте или в другой функции и существуют разные стандарты для работы.
/* if(SredTPBuy!=OrderTakeProfit())ТАКАЯ ПРОВЕРКА С ЧИСЛАМИ DOUBLE НЕ ВЕРНА */ if(MathAbs(SredTPBuy-OrderTakeProfit())>=_Point)//правильная проверка на соответствие условию Result=OrderModify(OrderTicket(),OrderOpenPrice(),0,SredTPBuy,0);
это пример правильного сравнения чисел в формате double, в алгоритмах работающих с ними, из предыдущего моего комментария в другом ветке.
if(MathAbs(SredTPBuy-OrderTakeProfit())>=_Point)
Не, просто она используется в таком месте, где незаметна ее неправильная работа и не важна. Модификация будет где-то на пункт ближе, где-то на пункт дальше - не сильно важно.
Еще, если цена не нормализована, можно получить ошибку 129
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Скажите почему при volume=0.2*3 получается вот такое число 0,6000000000000001?????????
Пробовал NormalizeDouble(volume,2)- та же песня, WTF????
Причем терминал выдает сообщение про установку ордера с лотом 0,6 а мой принт 0,6000000000000001. Это что - глюк принта?