В программах на MQL4 часто невольно допускаются различные ошибки. В этом топике мы разберем наиболее часто встречающиеся из них.
Первое место в нашем топе ошибок занимает «крик души» терминала: «Потеряли индикатор!»
В таких случаях возмущению пользователей эксперта нет предела: «Советник не работает!» или «Ставлю советник на график и ничего не происходит!» Решение этого вопроса как всегда оказывается простым как все гениальное. Достаточно заглянуть на вкладку «Журнал» терминала и обнаружив там запись вроде:
2016.09.08 09:15:44.957 2016.01.04 00:51 cannot open file 'C:\Users\1\AppData\Roaming\MetaQuotes\Terminal\MQL4\indicators\KELTNER_F12.ex4' [2]
привести в соответствие имена индикаторов в советнике и в папке терминала. Если индикатор отсутствует, добавить его в папку с индикаторами.
Второе место по праву могут разделить ошибки
Zero divide и
Array out of range
Zero divide — Деление на ноль может возникнуть например в таком участке кода:
all=NormalizeDouble(all/count,Digits);
Устраняется ошибка проверкой делителя на корректное значение:
double all=0,count=0;
if(count!=0) all=NormalizeDouble(all/count,Digits);
Ошибка
Array out of range возникнет если в советнике скрипте или индикаторе вы обратитесь к несуществующей ячейке массива:
int a[3]={1,2,3};
void OnStart()
{
int b=a[4];
}
В нашем массиве задано при инициализации 3 элемента:
int a[3]={1,2,3};
Нумерация элементов начинается с нуля: 0,1,2. Когда мы обращаемся к ячейке с номером 3 или 4 мы выходим за пределы массива, отсюда и ошибка. Правильным будет такой вариант:
int a[3]={1,2,3};
void OnStart()
{
int b;
b=a[0];
b=a[1];
b=a[2];
}
Так компилируется без ошибок и показывает что к указанным элементам массива, можно обращаться:
Третье место в нашем рейтинге занимает ошибка подобная первой, но только она возникает когда мы работая над каким то участком кода, скомпилировали его и тут же бросили на график не дождавшись окончания компиляции или не посмотрев результаты компиляции. Программа вот только что работала и теперь ничего!
Причиной может являться спешка или невнимательность. Например случайно задели не ту клавишу:
int a[3]={1,2,3};
void OnStart()
{
int b;
b=a[0];
b=a[1];
b=a[2];6
}
Нажав
CTRL+Z или дождавшись окончания компиляции мы решим и этот вопрос.
И на последок рассмотрим еще одну ошибку которая встретилась мне совсем недавно в одном из топиков в
«Столе заказов MQL»:
zakaz.opentraders.ru/34761.html
Андрей посмотри не компилируется.Пишет ошибка 'MathMod' — illegal switch expression type.
Это ошибка использования оператора
switch.
В коде выражение:
switch(MathMod(day_48, 10))
возвращало дробное значение. В новых версиях компилятора выражения и константы оператора
switch должны быть целыми числами, поэтому такая запись помогла решить ошибку:
switch((int)MathMod(day_48, 10))
Желающие посмотреть более объемный материал по этой теме могут пройти по ссылке:
www.mql5.com/ru/articles/1391
Комментарии (9)
Пользователь программисту предоставил индикаторы. Зачем программист поменял имена и другие указал в советнике?
P.S. Пару раз с какой целью ты это делал? Путал следы?
Редактирован: 8 сентября 2016, 15:10
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Ну как я понял, АМ2 это и писал для тех, кто пишет на MQL: «В программах на MQL4 часто невольно допускаются различные ошибки»
45 Bishop Сообщений: 5811 - АЛЬФАХАМЕЦ-Машковод
Он же не пишет, что попросить программиста поправить имена индикаторов в советнике. Косяк же программиста. Почему пользователь должен что-то править? Он предоставил индикаторы, ему запрограммировали советник, который их не видит!
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
45 Bishop Сообщений: 5811 - АЛЬФАХАМЕЦ-Машковод
Тут вообще просто. Это бывает сплошь и рядом. Сделали ему советник. И сегодня он работает, а завтра, когда пользователь терминал переставил, папку поменял или просто хочет запустить советник на другом компе, то уже все — не работает. И это уже не косяк программиста. Просто пользователь тоже должен обладать некоторыми навыками. Это в его же интересах
45 Bishop Сообщений: 5811 - АЛЬФАХАМЕЦ-Машковод
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Да.
И вот статья эта — неплохой шаг. Поэтому я ее приветствую.
45 Bishop Сообщений: 5811 - АЛЬФАХАМЕЦ-Машковод
Здесь еще не упомянул один момент, не скомпилировали индикатор, если был в mq4.
35 AM2 Автор Сообщений: 16384 - Андрей
18 mattew Сообщений: 31
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий