MQL для чайников, программирование на MQL4, MQL5
5 Янв
На первом уроке по изучению языка MQL мы научились запускать редактор MetaEditor и создавать новый скрипт MQL4. Но как мы можем увидеть, созданный нами скрипт MT4 пока не выполняет никаких функций в торговом терминале Metatrader 4.
В данном уроке мы научимся его выполнять какую — нибудь полезную функцию. Для примера, рассмотрим одну из полезных функций, которую мы реализуем на языке MQL4 — «расчет лота в зависимости от имеющихся у нас свободных средств».
Для этого мы должны определится с допустимым риском для нашего депозита на форекс (т.е. какое кол-во средств мы будем задействовать в торговле при использования советника форекс или в нашем случаи — скрипта для Metatrader 4).
Все учебники по форекс и опытные трейдеры рекомендуют: "никогда не рискуйте при заключении сделок на форекс более чем 2−5% от своего депозита". Ну что ж, давайте прислушаемся к их советам. Но т.к. четкой цифры нет, то нам нужно чтобы созданный нами скрипт запрашивал эту цифру.
Теперь давайте реализуем эту функцию на языке MQL4:
Введем в начале скрипта команду: #property show_inputs
У нас получилось:
//±-----------------------------------------------------------------+
//| test.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//±-----------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property show_inputs
//±-----------------------------------------------------------------+
//| script program start function |
//±-----------------------------------------------------------------+
int start()
{
//----
//----
return(0);
}
//±-----------------------------------------------------------------+
команда #property show_inputs означает выводить окно со свойствами перед запуском нашего скрипта MQL.
Попробуем запустить наш получившийся скрипт. Но для этого его нужно предварительно откомпилировать !
Компиляция — это преобразование нашей получившийся программы из языка понятного нам (в данном случаи MQL) в язык понятный компьютеру. Для компиляции скрипта MQL нажмем клавишу «компилировать» — ![]()
При этом в нижней части экрана высветится:

Это сообщение означает, что наш скрипт на языке MQL проверен на отсутствие ошибок и преобразован в код, понятный компьютеру.
Затем переходим в терминал Metatrader 4 из редактора MetaEditor, нажав клавишу "Терминал" - ![]()
Теперь, когда мы уже находимся в торговом терминале Metatrader 4 - в окне «Навигатор» выбираем пунк «Скрипты»:

Ищем в данном списке наш созданный скрипт для MT4 — «test»

И дважды щелкнув мышкой по скрипту «test»- запускаем его !

Но теперь возникает вопрос: «куда же вводить наш процент от депозита для расчета лота на форекс?»
Для этого мы должны задать его предварительно в нашем скрипте. Идем снова в редактор MetaEditor и добавляем в начале скрипта команду: extern int MaxRisk=2;
В итоге наш код должен выглядеть так:
//±-----------------------------------------------------------------+
//| test.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//±-----------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property show_inputs
extern int MaxRisk=2;
//±-----------------------------------------------------------------+
//| script program start function |
//±-----------------------------------------------------------------+
int start()
{
//----
//----
return(0);
}
//±-----------------------------------------------------------------+
Давайте разберемся что мы написали, используя команду - extern int MaxRisk=2;
extern — означает что данный параметр внешний (т.е. его можно изменить при запуске скрипта или советника MT4)
int - тип переменной (компьютеру же надо знать что мы ему передаем: число, текст и т.д.)
MaxRisk — название нашей переменной, которое может быть абсолютно любым — на ваше усмотрение !
=2 — присвоили данной переменной (в данном случаи MaxRisk) значение, которое будет высвечиваться по умолчанию в окне выставления настроек скрипта в терминале Metatrader 4.
; — знак, означающий окончание нашей команды.
Теперь снова компилируем и запускаем наш скрипт «test» (как было описано выше). Если компилятор «ругается» (сообщает) об ошибках — это означает что то мы сделали что-то не правильно и следует проверить правильность кода на языке MQL4 !
Ели ошибок нет, то при запуске скрипта (или советника) в терминале Metatrader 4, появляется следующее окошко:

Как мы теперь можем видеть, при запуске скрипта «test», у нас появилась новая вкладка «Входные параметры».
Переходим на нее:

Вот в данной вкладке мы и видем наш параметр MaxRisk, который служит для расчета лота в MT4 и который мы будем в дальнейшем использовать при создании скриптов и советников на языке MQL !
Если Вы хотите изучать язык MQL или вам понравилась данная публикация - Вы можете подписаться на получение новых материалов сайта mql4you.ru по или по e-mail: |
Отзывов (21) на «Язык MQL — Урок 2 «Первые шаги»»
[...] прошлом уроке “Язык MQL — Урок 2” мы научили наш первый скрипт MT4 — “test“, [...]
Застрял на уроке 2. Нажатие на кнопку Компилировать не дает никаких результатов. Если можете, помогите. Спасибо за ответ и полезные уроки. С уважением.
Что-то все равно должно происходить. Компилятор либо ругается на ошибки, либо сообщает об их отсутствии как на картинке в уроке. К сожалению не видя что происходит, я не могу дать совет. Поэтому присылайте картинку на мою почту (есть на странице Контакты). Получить картинку можно нажав кнопочку PrtScr и потом вставить из буфера обмена например в Word.
Здравствуйте! Хорошо написано Не пробовали делать видео уроки через Camtasia Studio было бы здорово, а то инфы про MQL4 мало, особенно мало примеров по использованию различных функций
Добрый день!
Спасибо за добрые слова всем, кто пишет комментарии. К сожалению с видео я пока не разбирался. В будующем я думаю освоить и этот вид постинга.
[...] функции start() которую будет вызывать терминал MT4. Если откомпилировать данную программу — не будет никаких [...]
это самый лучший обучающий сайт.Спасибо .не выразить словами как я рада что нашла этот сайт.
Скопировал код из урока 2 и вставил в редактор МТ5. При компиляции выдаются ошибки:
'#property' — unknown property Scripttest01.mq5 8 1
'show_inputs' — static or extern declaration without type Scripttest01.mq5 8 11
'extern' — assignment expected Scripttest01.mq5 9 1
'extern' — assignment expected Scripttest01.mq5 9 1
Что необходимо исправить в первоначальном коде, чтобы пример заработал в МТ5?
Рановато Вы начали изучать MT5. Он еще находится в процессе тестирования и не используется ни у одного брокера.
Теперь ответы:
— вместо #property show_inputs необходимо писать: #property script_show_inputs
— вместо функции start() необходимо писать: OnStart()
— вместо extern необходимо писать: input
= Рановато Вы начали изучать MT5. Он еще находится в процессе тестирования и не используется ни у одного брокера. =
На Ваш сайт попал исключительно по поисковым словам «mql5» и «учебник». В заглавии Вашего сайта также обещано «программирование на mql5».
Соответственно, либо Вы также «рановато начали» ссылаться на mql5, либо каждый из нас знает, что делает.
МТ5 доступен для работы на демо-счете в Альпари. Соответственно, при наличии такой возможности у меня нет никакого резона изучать устаревающий морально МТ4. Зато есть желание и возможность уделить внимание изучению МТ5 и пройти курс молодого бойца до выхода первой работоспособной версии МТ5.
За ответы благодарю. Всё заработало. Поскольку свои намерения я изложил выше, предлагаю сразу проработать следующие вопросы:
1) либо дополнить имеющиеся учебные материалы описанием особенностей mql5 применительно к тому или иному примеру;
2) либо создать отдельный учебник по mql5, который в свором времени станет особо востребованным.
В любом случае Вы окажетесь на голову впереди всех авторов будущих учебников по mql5.
Упрек отчасти справедлив. Блог задумывался как учебник по MQL4 и MQL5 (при его официальном выходе). Меня уже в коментариях спрашивали по поводу MQL5
Ну раз Вы хотите начать изучение сразу с MQL5, то спрашивайте в коментариях непонятные моменты. Я буду отвечать. Вот и получиться дополнение к существующему материалу.
Это ни в коем случае не упрёк!
Просто при возникновении непонятных моментов считаю необходимым максимально доходчиво изложить своё видение ситуации. Помогает взаимопониманию и отсеиванию ненужных эмоций.
Спасибо за понимание!
Автор Спасибо за подобный рессурс!!! у меня пожелание, хочется видеть в каждом уроке ссылки на следующие и предыдущие уроки, а то очень не удобно навигацию проводить
Пожалуйста! Задавайте вопросы и отвечая на них я сделаю блог еще лучше. Насчет ссылок — посмотрите в конце каждой статьи есть ссылки на предыдущие и последующие уроки.
Огромное спасибо автору, всё понятно и очень интересно!
Здравствуйте, мне вот непонятно когда печатаю «#property show_inputs» что-то должно измениться?
Я вот написал но ничего не изменился в тексте. Также здесь есть некоторые слова которые не указаны в вашем примере после написания «#property show_inputs»
Все выглядит вот так:
#property show_inputs
//±-----------------------------------------------------------------+
//| test.mq4 |
//| Copyright © 2010. |
//| www.mql4you.ru |
//±-----------------------------------------------------------------+
#property copyright «Copyright © 2010.»
#property link «http://www.mql4you.ru»
//±-----------------------------------------------------------------+
//| expert initialization function |
//±-----------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//±-----------------------------------------------------------------+
//| expert deinitialization function |
//±-----------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//±-----------------------------------------------------------------+
//| expert start function |
//±-----------------------------------------------------------------+
int start()
{
//----
//----
return(0);
}
//±-----------------------------------------------------------------+
Добрый день!
В уроке «Минимально возможная программа на MQL4» рассматривается данный параметр. Если коротко — то в тексте ничего не изменится. Изменения Вы увидите после компиляции и запуска.
Уважаемый,Админ!Спасибо,что Вы взялись раскрыть
тему программирования на MQL4,тема очень востребо-
ванная,поскольку кризис заставляет искать новые источ-
ники дохода.Я не думаю что эра МТ4 быстро закончится,
как пророчит один посетитель,лучше бы он внятно
обьяснил,чем ему не нравится эта платформа.Но это так
к слову.Вообще-то хотелось присоединится к уже писан-
ной просьбе-СДЕЛАЙТЕ ВИДЕО по урокам.Эффект обучения намного выше,чем от чтения материала.Если
откликнитесь на нашу просьбу и создадите видео,мы в
ответ поаплодируем Вам денежными знаками,так как
многие хотят писать понятных советников,скриптов,а
не покупать «кота в мешке»на торговых площадках.
Никто не хочет часами сидеть у монитора и нервно покусывать губы,если это можно доверить написан-
ному тобой и поэтому понятному советнику,а не оче-
редному «сливатору» с торговой площадки,гарантии
на которых никто не даёт.
Начал изучать язык. В программировании ноль. Вопрос...почему в командах: #property copyright, #property link, #property show_inputs ставиться решетка, а в команде extern int MaxRisk=2;...нет? Для чего вообще нужно ставить этот символ, и для чего он служит? Спасибо.
Илья
Описано в статье Урок №3 «Минимально возможная программа на MQL4»
Закачал .Hedge Hog . Работает но всёравно спасибо.! ))
Оставьте отзыв