MQL4 - устраняем простые ошибки своими силами


gravity

Бывалый
Решил вот создать тему. Как-то хотел выучить MQL4, прочел весь справочник и видеоуроки смотрел. Но времени, чтобы практикаваться как-то пожалел. Но польза всё таки была и мало-мальскими знаниями я овладел. Думаю будет полезно, за одно и сам чего-нибудь нового узнаю. Глядишь и нормально разбираться начну:)
 

gravity

Бывалый
Ошибки со старых билдов.

Исправляем ошибку char .

1) Попался индикатор под названием @Ratio_MACD_v3.mq4
2) Кидаем его на график и видим ошибку во вкладке "Эксперты"

334755

3) В навигаторе щелкаем правой кнопкой мыши по нашему индикатору и выбираем "Изменить",щёлкаем левой кнопкой мыши.

334756

4) После этого у нас откроется MetaEditor - это программка предназначена для написания, редактирования кода.
5) Нажимем кнопку "Компилировать"

334757

6) Внизу во вкладке "Ошибки" увидим следующую картину

334758

7) Наводим курсор на первую ошибку и два раза щелкаем левой кнопкой мыши. При этом мы переместимся на строку этой ошибки.

334759

8) Если хотим узнать, почему возникла эта ошибк, нажимаем F1. При нажатии этой клавиши открывается справочник, где в нашем случае мы увидим следующее.

334760

Из этого следует, что (так скажем) слово char выражает, показывает нам какой тип данных перед нами. Иными словами, это слово занято программой и его использовать нельзя.
Вот что по этому поводу говорят на сайте самого mql

h_ttps://www.mql5.com/ru/articles/1391 (уберите черточку после h, чтобы перейти на сайт)

334762

9) Меняем это слово на любое другое, или просто добавляем какой-нибудь символ к нему.
На картинке выше, добавили 1. Я обычно добавляю букву p.

334764

При этом слово становится черного цвета, а не синего как раньше.
В нашем примере всего 9 слов надо исправить.

10) Снова нажимаем кнопку компилировать. Внизу видим, что никаких ошибок нет.

334765

11) Закрываем метаэдитор. Заходим в терминал, кидаем индикатор на график и видим что он работает.

334767
 
Последнее редактирование модератором:

Ugar

Эксперт
Перед тем как использовать переменную нужно её объявить (захвалить как в игре 1000).
При объявлении надо указать тип и имя переменной, можно сразу присвоить значение.
Типы переменных заданы в языке и определяет свойство переменной (диапазон значений и точность), имя сочиняет программист на своё усмотрение.
Формат: тип имя; или тип имя=значение. Например: int peremennaya=0;
Здесь int тип переменной. Означает что она целочисленная и её значения от -2 147 483 648 до 2 147 483 647. Это можно посмотреть в справочнике. peremennaya это имя переменной. =0 присвоенное значение.
char то же тип целочисленной переменной и её значения от -128 до 127.
Проблема оказалась в том что нельзя в качестве имени переменной использовать тип переменной. В старом языке не было такого типа как char, по этому программист спокойно использовал это имя переменной. В ново языке такое имя использовать нельзя. Именно по этому переименование этих переменных помогло.
 

Dersu

Бывалый
В силу разных причин основная масса подходит к штанге, пробует и не поднимает
Перед купанием многие стоят в воде
Простые надобности на примерах
1. Ошибки со старых билдов
2. Толщина и цвет линии
3. Ограничение истории
4. Выставление стрелки и отступ
5. Вывод в настройки
6. Как найти буфер сигнала
7. Сообщения
8. Вывод сигнала или обьединение в другой индюк или сов
Это навскидку
Мона дополнять
 

BorisSedov

Участник
При изучении любого языка программирования, на начальном этапе, очень полезно решать простейшие задачки.
Напишите скрипт который выводит все числа от 1 до 1000, которые отвечают хотя бы одному условию.
  • Число четное
  • Число оканчивается цифрой 1 (пример 771).
 

gravity

Бывалый
При изучении любого языка программирования, на начальном этапе, очень полезно решать простейшие задачки.
Напишите скрипт который выводит все числа от 1 до 1000, которые отвечают хотя бы одному условию.
  • Число четное
  • Число оканчивается цифрой 1 (пример 771).
Да все это хорошо и по карйней мере мне интересно. И я благодарен всем кто участвует.
Но как мне кажется, вот эти задачки надо все же перекинуть в тему вопросы по MQL4. А тут оставить конкретные примеры,ситуации, которые возникают у большинства обычных пользователей, как предложил Dersu.

Оставить только посты по делу, а то темы разрастаются, как снежный ком, где чтобы найти нужную инфу, нужно перечитать кучу страниц.
 

BorisSedov

Участник
Да все это хорошо и по карйней мере мне интересно. И я благодарен всем кто участвует.
Но как мне кажется, вот эти задачки надо все же перекинуть в тему вопросы по MQL4. А тут оставить конкретные примеры,ситуации, которые возникают у большинства обычных пользователей, как предложил Dersu.

Оставить только посты по делу, а то темы разрастаются, как снежный ком, где чтобы найти нужную инфу, нужно перечитать кучу страниц.
Хорошо.
Начинающих изучение языка программирования MQL4, приглашаю в специально созданную ветку для обучения.
 

gravity

Бывалый
Ошибки со старых билодов.

Ошибка '.' - semicolon expected - другими словами, недопустимый символ.

334840

1) Открываем индикатор в метаэдиторе, нажимаем "компилировать", видим в окне ошибки. Щелкаем по первой два раза левой кнопкой мыши, попадаем на строку ошибки.
2) Выделяем точку в этой строке, нажимаем "поиск" - "заменить".
334841

3) Откроется окошко. Где в поле "Найти" будет вписана точка, в поле "Заменить на" вписываем какой-либо символ кроме запрещенных $ @ . Нажимаем "Заменить".

334842

Так заменяем точку в строках 40, 43-48

334843

Как вариант, можно вообще просто удалить точку в этих строках, но с заменой быстрее.

4) Далее курсор перейдет на строку, где точка находится между цифрами.
334845

Там и далее пропускаем замену, нажав на кнопку "Найти далее".
5) Далее делаем замену во всех предложенных случаях, в строках от 170 до 227.
6) Все последующие строки, где точка является частью дробного числа, пропускаем.
Просматриваем точки до конца кода, после этого курсор перейдет на начало документа.
7) Нажимаем "Компилировать", если увидим такую картину, то все сделали правильно.
Желтый треугольник это предупреждение, и оно не является критической ошибкой, его можно пропустить.
334850

8) Если там все еще есть ошибки, то значит что-то пропустили. Исправляем.
9) Закрываем редактор и пользуемся индикатором.
334851

Нерабочий индикатор прикрепляю.
 

Вложения

Последнее редактирование модератором:

BorisSedov

Участник
В данном примере лучше использовать замену Bars.Count на Bars_Count, чтобы не попадать на точки в числах.
В поле "Найти" вставляем Bars.Count, а в поле "Заменить на" вставляем Bars_Count, это удобнее.
 

gravity

Бывалый
В данном примере лучше использовать замену Bars.Count на Bars_Count, чтобы не попадать на точки в числах.
В поле "Найти" вставляем Bars.Count, а в поле "Заменить на" вставляем Bars_Count, это удобнее.
Там дело в том, что не только в Bars.Count надо заменить точку, там разных имен еще штук 5.

Чтоб не запутаться где надо,а где нет. Можно щелкать по каждой ошибке в окне ошибок и исправлять по отдельности. Но долго)
 

BorisSedov

Участник
Там дело в том, что не только в Bars.Count надо заменить точку, там разных имен еще штук 5.
Чтоб не запутаться где надо,а где нет. Можно щелкать по каждой ошибке в окне ошибок и исправлять по отдельности. Но долго)
В этих вещах всегда нужно искать золотую середину.
 

Ugar

Эксперт
Нельзя бездумно уничтожать точки. Так можно не исправить, а натворить ошибок. Точки могут не только разделять дробную часть числа, при использовании структур и классов то же точки. При том в структурах они похожи на неправильную переменную. Например in.dist может быть переменной из старого языка, новый компилятор будет ругаться, а может быть элементом структуры in из нового языка и компилятор не будет ругаться. По этому, надо обязательно ориентироваться на компилятор пока не знаете как отличить.
 

gravity

Бывалый
Ограничение истории (подвал, гистограмма)

В теме "Доработка ботов" попросили добавить историю отображения.
Попробовал разобраться, именно в этом индикаторе, сделать это оказалось просто.
Но думаю, не все случаи такие простые. Так как я до этого хотел попробовать сделать это в индикаторе, который выложил Dersu и я не додумался, как это делается.

1) Открываем индикатор в метаэдиторе и находим выведенные настройки индикатора. Они начинаются со слова extern (англ. "внешний")
2) Так как нам тоже надо вывести историю в настройки, мы пишем строку
extern (выводим во внешние настройки)
int (так как количество баров у нас целое число)
CountBars (задаем имя для выводимого параметра, оно и будет видно в настройках)
335084
3) Идем ниже, находим функцию int start ,
(эта функция осталась в индикаторах написанных раньше, на старых билдах.На новыйх функция int OnInit() )
335103
4) И меняем переменную Bars (количество баров на текущем графике) на имя, которое мы задали в строке 33. Меняем его только в выражении Bars-counted_bars. Компилируем.
335104



Вообще я сам только разбираюсь в этих делах. И если где-то накосячил, прошу товарищей поопытнее поправить. И может они приведут примеры добавления этой функции в других типах индикаторов.
 
Последнее редактирование:

gravity

Бывалый
Привет.
Я пересылал тебе советник для вставки кода через файлообменник и пропал
Вернулся
Могу получить советник?
Привет! Честно, я не смог в нем разобраться, копался дня 2, замудрено это пока для меня. Некторые комментарии только в код внёс, что для чего. И на этом остановился. Могу скинуть обратно. Обратись лучше к опытным программистам.
 

Онлайн статистика

Пользователи онлайн
55
Гости онлайн
105
Всего посетителей
160

Статистика

Гостевая
Help Users
  • No one is chatting at the moment.
  • oleksandr333:
    Прислал уже, модератор думает пропускать или нет! Денег мне не надо, так как год собирал сам и хочу помочь, кто хочет заработать и немного завалить рынок!
    Цитата
  • oleksandr333:
    Мое сообщение не пропустят модераторы для Вас! Завтра зайду, даже интересно!!!!
    Цитата
  • Тяпляпыч:
    А что вы такого тут умудрились наэнергетить, что уже в ветку "Делюсь Граалем" ваши сообщения подвержены премодерации? Я вот тут всякие ебуки (e-books) в различных ветках рассказываю, и то на предварительное препарирование моих постов попасть совсем не довелось. Иногда даже раздаю людям эти конкретные ебуки! Это всякие книжки по нашей теме интересные. Или помню людей, которые раньше их раздавали, это значит, что у них они есть и пришло время снова подраздать :D
    Цитата
  • oleksandr333:
    Когда заходят крупные игроки "всякие ебуки (e-books) " не работают( в том числе и теория вероятности, которая не дает ответа орел или решка!) Подборка, сделана так, чтобы игнорировать(по-возможности на H15) . Однако, это не исключает потери (лоты должны быть разумными). Повторюсь, даже предложенная система не дает более чем 90% выигрыша! Хороших торгов, Вам!
    Цитата
  • Тяпляпыч:
    oleksandr333 сказал(а):
    Когда заходят крупные игроки "всякие ебуки (e-books) " не работают
    Данунах!!! Есть такой правитель виртуального пространства. Призываю его в свидетели, что вы мало отдаёте себе отчёт в том, о чём пытаетесь говорить. Не надо выигрышей, помилуйте, мы не в казино, а в чётком алгоритме. Не пытайтесь быть гибче него, а гнитесь, как он. И его брат Анунах тоже не против.
    Цитата
  • Тяпляпыч:
    Точнее, учитесь гнуться, как гнётся под текущую ситуацию в мире он- гораздо больше пользы будет, нежели пытаться в это играть. Правила входа, правила расстановки стоплоссов, всё, что вам удалось нарыть- в студию! Можете быть уверены- это модераторы пропустят. Уж если вам так захотелось поделиться или совместно допилить систему и в ней действительно есть достаточно ценные зёрна...
    Цитата
  • oleksandr333:
    Данунах — древнегреческий Бог недоверия и удивления! Вас на рынке не милуют (особенно на финансовом), и Вы там отдаете свои деньги, а на финансовом рынке Вы покупаете свои ошибочные теории (Известно, что теория мертва без практики(это сказал человек, а не бог))! Раз Вам нужен Бог в свидетели, значит Вы тоже не все понимаете, и не есть абсолютной истиной, даже в том что пишите! Теперь ясно, почему успешные трейдеры молчат, хотя они живые люди(а не боги) и деньги любят тишину!!! Помог чем смог! Прощайте!
    Цитата
  • Тяпляпыч:
    С ума сойти, какие тут уникумы водятся. Но это вы там отдаёте деньги, я не потратил на форекс ни копейки, не покупал никаких теорий и практик. И да, я не успешный трейдер, более того, я вообще не трейдер, тем более не успешный, ага. И да, ещё, я пока ещё живой человек,, хочу иногда говорить. Хотя я, наверно, уже бог. Спасибо, Данунах!!!
    Цитата
  • Тяпляпыч:
    @Cash777, Анунах?
    Цитата
  • Тяпляпыч:
    Хватает двух фраз.
    Цитата
  • Тяпляпыч:
    @Cash777, да говори здесь, или ты свет увидел и решил что ты среди зрячих, слепец??
    Цитата
  • Тяпляпыч:
    В них нет ничего ценного.
    Цитата
  • Тяпляпыч:
    Уберите этот спам
    Цитата
  • Тяпляпыч:
    Этот чат когда- нибудь оживёт? Или я прилагаю усилия по оживлению какого- то мёртвого?
    Цитата
  • maxfxt:
    It looks like you talk in parables, say one more time please?
    Цитата
  • maxfxt:
    I need a programmer who understands the English is there one here ?
    Цитата
  • Тяпляпыч:
    All in our progers undst Eng Lang. Prepare your $$$ exellent release your task, Барбамбия кергуду :D
    +1
    Цитата
  • genolom:
    hello
    Цитата
  • fraud:
    Привет всем! Граальщики в чате есть? :D
    Цитата
  • IRIP:
    есть
    Цитата
  • Тяпляпыч:
    Конечно есть, да ещё и со своим граалем. Только хер поделятся- я вот например не поделюсь однозначно. Разве что ситуационно- брит долл бай до 1.25800 минимум, можно на всю котлету жарить. "Не мелочись, швыряй свои гроши. Воды и хлеба дай, официант".
    Цитата
  • fraud:
    У каждого трейдера - есть свой Грааль. Он существует. Ждёт, когда его в поиске страданий, мучений и слитых депо, наконец-то найдет трейдер.
    Цитата
  • fraud:
    Только далеко не все его найдут. Это естественный процесс эволюции. Кто-то опускает руки, кто-то психует и забивает на всё это трейдерское дело с обидой и злостью, большинство (99,9%) никогда его не найдут и перестанут верить в его существование.
    Цитата
  • fraud:
    Рад за тех, кто нашел. И сил тем, кто его ищет. Профита всем стабильного!
    Цитата
  • Цитата
    Верх