int start() { //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< double porog=MathAbs(Open[0]-Close[1])/Point; string st=DoubleToStr(porog,8); int stop=StrToInteger(st); int rezultat=porog; if(stop==1) Print("porog= "+porog+" + st= "+st+" + stop= "+stop+" + rezultat= "+rezultat); //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> }
действительно. вот что выводит:
porog= 1.00000000 + st= 1.00000000 + stop= 1 + rezultat= 0
то есть porog в строку нормально переводится
затем строка в целое число тоже нормально,
но потом О ЧУДО!!!! double в целое переводится НУЛЁМ!!!
хороший глючок.
Если использовать нормализацию, то глюк исчезнет.
Это уже обсуждалось.
вот если написать так:
double porog=NormalizeDouble(MathAbs(Open[0]-Close[1])/Point, 8);
то и результат адекватный
porog= 1.00000000 + st= 1.00000000 + stop= 1 + rezultat= 1
НОРМАЛИЗАЦИЯ избавит вас от проблем в будущем.
Если перевести шаманство с переменной stop на нормальный язык, получится
Естественно оно не обязано быть равным преобразованному в целое без нормализации.Да, это по правилу да!
Но:
т.е. допустим если константу(double) porog сравнить с числом 1.0000000, то равенство не получается, вот это мне показалось странным, т.к. сравнение происходит double с double...
Да дело не в этом, я сравнивал porog с еденицей со столки нулями сколки было напечатано в журнале, т.е. 1(пункт)/point, получается 4 нуля после запятой, тобишь 1,0000 равенство не выполняется(иногда выполняется), и даже когда сравниваю с 15 нулями

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравстуйте!
Заметил странную ошибку(может я туплю, но по результатам скорее МТ), из-за которой чуть голову не сломал.
Запустите ниже приведенный эксперт, модель необходимо выбрать: по ценам открытия, тф от минуток до часовика, далее обратите внимание на сообщения в журнале экспертов.
Ошибка в том, что если константа с плавающей точкой:
double porog=MathAbs(Open[0]-Close[1])/Point =1;
и присвоив ее целой константе:
int rezultat=porog;
то эта константа(rezultat) почему то иногда= 0(что не есть правильно), а иногда =1(что есть правильно).
Да и вообще сравнив константу porog с 1, почему то также равенство не выполняется...
Проверял на версиях терминалов не выше 223.
У меня единственный вопрос: ПОЧЕМУ?