AM2
Андрей

 
Уровень 27

  Торгую в компаниях:


Группа "Программирование на MQL"

Рейтинг 270



Разберем самые часто встречающиеся ошибки на MQL4

В программах на 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
  • +6
  • Просмотров: 5550
  • 8 сентября 2016, 11:02
  • AM2
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Программирование на MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Советник с применением ООП. Реальный пример
Следующая запись в группе  
Хитрый усреднитель на MQL5
04 сентября 2016
13 сентября 2016

Комментарии (9)

+
0
Ну первое — «привести в соответствие имена индикаторов в советнике и в папке терминала» — это же ошибка программиста, а не пользователя. (Как и все остальные ошибки)
Пользователь программисту предоставил индикаторы. Зачем программист поменял имена и другие указал в советнике?
P.S. Пару раз с какой целью ты это делал? Путал следы? <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/003.gif' alt=' <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/003.gif' alt=' <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/003.gif' alt=' :D '>&nbsp; '>&nbsp; '>&nbsp; 

Редактирован: 8 сентября 2016, 15:10
avatar

  21  Oxy Сообщений: 3224 - ..ιllιlι.lι.ιllι.ιlι..

  • 8 сентября 2016, 15:07
+
0
это же ошибка программиста, а не пользователя. (Как и все остальные ошибки)

Ну как я понял, АМ2 это и писал для тех, кто пишет на MQL: «В программах на MQL4 часто невольно допускаются различные ошибки»
avatar

  39  Bishop Сообщений: 5339 - АЛЬФАХАМЕЦ-Машковод

  • 8 сентября 2016, 15:52
+
0
Это я поняла, что статья для программистов. Но в первом пункте он же предлагает решение тому, для кого запрограммировали советник.
В таких случаях возмущению пользователей эксперта нет предела: «Советник не работает!» или «Ставлю советник на график и ничего не происходит!» Решение этого вопроса как всегда оказывается простым как все гениальное. Достаточно заглянуть на вкладку «Журнал» терминала… и привести в соответствие имена индикаторов в советнике и в папке терминала.

Он же не пишет, что попросить программиста поправить имена индикаторов в советнике. Косяк же программиста. Почему пользователь должен что-то править? Он предоставил индикаторы, ему запрограммировали советник, который их не видит!
avatar

  21  Oxy Сообщений: 3224 - ..ιllιlι.lι.ιllι.ιlι..

  • 8 сентября 2016, 16:09
+
0
В принципе, это полезные советы и для пользователя (может даже именно для пользователя). Многие думающие люди могут позволить себе покрутить код, проверить журнал, внести коррективы. Для этого писать советники уметь не надо. А вот по статье правки внести можно
avatar

  39  Bishop Сообщений: 5339 - АЛЬФАХАМЕЦ-Машковод

  • 8 сентября 2016, 16:26
+
0
Он же не пишет, что попросить программиста поправить имена индикаторов в советнике. Косяк же программиста. Почему пользователь должен что-то править?

Тут вообще просто. Это бывает сплошь и рядом. Сделали ему советник. И сегодня он работает, а завтра, когда пользователь терминал переставил, папку поменял или просто хочет запустить советник на другом компе, то уже все — не работает. И это уже не косяк программиста. Просто пользователь тоже должен обладать некоторыми навыками. Это в его же интересах
avatar

  39  Bishop Сообщений: 5339 - АЛЬФАХАМЕЦ-Машковод

  • 8 сентября 2016, 16:31
+
+1
На самом деле пользователь обязательно должен обладать навыками. К сожалению, это мало кто понимает.
avatar

  21  Oxy Сообщений: 3224 - ..ιllιlι.lι.ιllι.ιlι..

  • 8 сентября 2016, 16:36
+
0
На самом деле пользователь обязательно должен обладать навыками.

Да.
И вот статья эта — неплохой шаг. Поэтому я ее приветствую.
avatar

  39  Bishop Сообщений: 5339 - АЛЬФАХАМЕЦ-Машковод

  • 8 сентября 2016, 16:37
+
0
Ну первое — «привести в соответствие имена индикаторов в советнике и в папке терминала» — это же ошибка программиста, а не пользователя.

Здесь еще не упомянул один момент, не скомпилировали индикатор, если был в mq4.
avatar

  27  AM2 Автор Сообщений: 8131 - Андрей

  • 8 сентября 2016, 18:10
+
0
Можно еще отметить, что компилировать самому вовсе не обязательно — достаточно всего лишь обновить терминал, нажав на правую кнопку мыши во вкладке Навигатор и выбрав опцию Обновление (компиляция происходит автоматически).
avatar

  12  mattew Сообщений: 31

  • 8 октября 2017, 11:09

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари