глюк mql4 при работе с массивами, или я где ошибся ??? - страница 2

 
сейчас попробую все это в цикл загнать с разными базовыми уровнями, чтобы посмотреть при каких значениях это происходит, может это прояснит ситуацию
 
molotkovsm:
сейчас попробую все это в цикл загнать с разными базовыми уровнями, чтобы посмотреть при каких значениях это происходит, может это прояснит ситуацию

Похоже, нужно обнулить переменные 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
 

Файлы:
 
в общем надо на каждом этапе вычислений print всех переменных делать, щас буду заниматься
 
функция MathMod() при определенных значениях base_level почему то выдает не нули а десятки, хотя остаток от деления на 10 не может быть равным 10. Вот скрипт, в цикле оставил только одну строку, которая выводит остаток от деления и делимое. При значении base_level 1.3114 получается, что остаток от деления 13120 на 10 равен 10 (здесь какая то ошибка), а при значении base_level 1.3115 остаток от того же самого деления уже равен 0.
Файлы:
 
molotkovsm:
функция 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)

 
MetaDriver:

Округли, и будет тебе щастье.

(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)



огромное спасибо, все получилось.
 
Спасибо всем, кто помогал. Я считаю, что это ошибка функции MathMod, ведь остаток от деления на 10 не может быть равен 10. Разработчикам надо бы исправить, ведь еще люди мучиться будут.
 

Наверное, как раз про эту особенность говориться в этой: https://www.mql5.com/ru/articles/1561 статье последним пунктом, пожалуй надо бы добавить в качастве примечания в справку функции MathMod.

Такое вот пожелание. 

Причина обращения: