Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
сейчас попробую все это в цикл загнать с разными базовыми уровнями, чтобы посмотреть при каких значениях это происходит, может это прояснит ситуацию
Похоже, нужно обнулить переменные counter02, counter03 в start(). Иначе выход за пределы массива с непредсказуемыми результатами.
Mislaid:
Похоже, нужно обнулить переменные counter02, counter03 в start(). Иначе выход за пределы массива с непредсказуемыми результатами.
Насколько я понимаю, эти переменные инициализируются нулем при запуске скрипта. При выходе за пределы массива, возникает ошибка 4002 индекс массива вне диапазона.
Раньше она возникала, сейчас я это исправил и массивы не переполняются.
Сделал цикл, где перебираются базовые уровни. Цикл глючит подобным образом, сначала уровни вверх и вниз считаются нормально, а начиная с определенных значений перестают и скрипт выдает нули, причем до конца цикла. Если сделать начало цикла с другого базового уровня, то там, где были нули идут нормальные вычисления. Погоняв различные базовые уровни выяснил, что сбои происходят при следующих значениях:
1.3053
1.3054
1.3073
1.3074
1.3093
1.3094
1.3114
1.3134
1.3135
1.3154
1.3155
1.3174
1.3175
1.3194
1.3195
1.3214
1.3215
функция MathMod() при определенных значениях base_level почему то выдает не нули а десятки, хотя остаток от деления на 10 не может быть равным 10. Вот скрипт, в цикле оставил только одну строку, которая выводит остаток от деления и делимое. При значении base_level 1.3114 получается, что остаток от деления 13120 на 10 равен 10 (здесь какая то ошибка), а при значении base_level 1.3115 остаток от того же самого деления уже равен 0.
Округли, и будет тебе щастье.
(NormalizeDouble(MathMod(MathRound(base_level*MathPow(10, Digits))+counter01, size_of_step),0) == ostatok)
А NormalizeDouble() убери вапче. Оно тут ни к чему, только вредит твоему здоровию.
(MathMod(MathRound(base_level*MathPow(10, Digits))+counter01, size_of_step) == ostatok)
Округли, и будет тебе щастье.
(NormalizeDouble(MathMod(MathRound(base_level*MathPow(10, Digits))+counter01, size_of_step),0) == ostatok)
А NormalizeDouble() убери вапче. Оно тут ни к чему, только вредит твоему здоровию.
(MathMod(MathRound(base_level*MathPow(10, Digits))+counter01, size_of_step) == ostatok)
огромное спасибо, все получилось.
Наверное, как раз про эту особенность говориться в этой: https://www.mql5.com/ru/articles/1561 статье последним пунктом, пожалуй надо бы добавить в качастве примечания в справку функции MathMod.
Такое вот пожелание.