English Deutsch 日本語
preview
Введение в MQL5 (Часть 1): Руководство по алготрейдингу для начинающих

Введение в MQL5 (Часть 1): Руководство по алготрейдингу для начинающих

MetaTrader 5Тестер | 28 марта 2024, 08:22
783 4
Israel Pelumi Abioye
Israel Pelumi Abioye

Введение

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

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

Кроме того, обучение бывает более эффективным, если оно сопровождается практическими примерами. Поэтому я буду приводить примеры и сценарии из реальной жизни, чтобы показать, как MQL5 используется для алготрейдинга. А чтобы сделать весть процесс еще более эффективным, мы будем мотивировать вас на интерактивное обучение. Читателям будет предложено попрактиковаться в написании кода, поэкспериментировать с примерами и применить свои знания на практике. По сути, эти статьи должны дать людям, не имеющим никакого опыта программирования, возможность уверенно ориентироваться в парадигме MQL5 и при этом раскрыть для себя преимущества алгоритмической торговли.

В этой статье мы рассмотрим следующие темы:

  • Введение в программирование
  • Виды программ на MQL5
  • MetaEditor IDE
  • Основы языка MQL5
Сразу скажу, чем мы займемся в следующих статьях:
  • Предопределенная переменная
  • Общие функции
  • Операторы потока управления
  • Массивы и циклы
  • Создание советников
  • Тестер стратегий

1. Введение в программирование

Вы когда-нибудь задумывались, как созданы ваши любимые игры и приложения? Как получается так, что игровые персонажи выполняют ваши команды? Все это возможно благодаря программированию. То есть за всем этим стоит код, написанный как раз для того, чтобы сделать возможным общение человека и компьютера.

Что такое язык программирования? Слово «программирование» означает процесс установления правил или инструкций, которым необходимо следовать для достижения конкретной цели. Слово «язык» означает систему общения, которая позволяет людям выражать идеи, эмоции и мысли. Но компьютеры не понимают человеческий язык. Так как нам передать набор инструкций для достижения наших целей? Здесь на помощь приходит язык программирования — он служит посредником между людьми и компьютерами, позволяя людям общаться с компьютером.

1.1. Типы языков программирования

В мире существуют разные человеческие языки. Точно так же существуют и разные языки программирования. Их можно разделить на две большие группы:

  • Язык программирования высокого уровня — они ближе к человеческому языку и легко понятны. Примерами таких языков служат MQL4, MQL5, Python и JavaScript
  • Язык низкого уровня — они ближе к машинному коду, и людям сложнее его писать и понимать. Например, это язык ассемблера, и он ближе к железу компьютера.

Классификация языков по назначению

  • Языки программирования общего назначения — предназначены для выполнения широкого спектра функций. Это Pythons, Java, C++ и др.
  • Предметно-ориентированные языки — такие языки специализированы для конкретной области применения. К таким относится и MQL5 — язык программирования для разработки торговых стратегий.

1.3. Важные термины в программировании

  • Интегрированная среда разработки IDE — программное приложение, предоставляющее программистам комплексные возможности для разработки программного обеспечения. Именно здесь все и происходит: вы пишете код, тестируете, проводите отладку и проводите развертывание вашей программы. Примерами IDE являются Visual Studio, Code::Blocks и MetaEditor 5. В этих статьях мы будем работать именно в MetaEditor 5 — это встроенная среда разработки для написания программ на MQL5.
  • Отладчик — инструмент, который помогает находить и исправлять ошибки в коде, позволяя разработчикам пошагово выполнять код, устанавливать точки останова и проверять переменные во время выполнения.
  • Компилятор/Интерпретатор — многие IDE имеют встроенные инструменты для компиляции и запуска кода непосредственно в среде. Они могут выполнять код, проверять наличие ошибок и отображать результат.
  • Типы данных — категории данных, которыми может оперировать язык программирования. Эти типы integer (целочисленный), float (числа с плавающей запятой), string (строки), bool (логический). Типам данных мы посвятим отдельный раздел, в котором и рассмотрим их.
  • Синтаксис — набор правил, определяющих комбинации символов и слов в языке программирования. Каждый язык программирования имеет свой уникальный синтаксис.
  • Алгоритм — набор четко определенных инструкций, предназначенных для решения конкретной проблемы или выполнения задачи.
  • Функция — блок кода, выполняющий определенную задачу. Такой блок кода можно использовать повторно, т.е. его можно вызывать несколько раз в программе.
  • Библиотека — коллекция предварительно написанного кода, функций и процедур, которые можно использовать для выполнения конкретных задач. Благодаря использованию библиотек программисту не нужно каждый раз изобретать велосипед.
  • Инструкции — конструкции типа if-else или switch-case, позволяющие программам принимать решения на основе определенных условий. Если нужное условие истинно, компьютер должен выполнить указанный код.
  • Цикл — структура, которая повторяет блок кода до тех пор, пока не будет выполнено определенное условие. Наиболее распространены типы циклов for, while и do-while. Например, цикл while будет продолжать выполнять блок кода, пока выполняется определенное условие.
  • Переменная — контейнер, используемый для хранения данных. У переменной есть имя, и она может содержать различные значения, которые могут меняться во время выполнения программы.

Примечание: к некоторым их этих терминов мы еще вернемся и рассмотрим их подробнее в ходе этой статьи.


 2. MQL5-программы

MQL5 (MetaQuotes Language 5) — это специализированный С++-подобный язык объектно-ориентированного программирования высокого уровня. С точки зрения области применения это предметно-ориентированный язык, используемый для решения задач, связанных с трейдингом. MQL5 позволяет автоматизировать торговые стратегии, разрабатывать торговых роботов и писать технические индикаторы.

Таким образом, на MQL5 можно писать различные типы программ для автоматизации торговли, анализа рынков и общей оптимизации трейдинга. Основные типы программ, с которыми мы сталкиваемся в MQL5:

  • Советники (торговые роботы, Expert Advisors, EA) — это типы программ, которые используются для автоматизации торговых стратегий. Они предназначены для автоматического совершения сделок на основе предопределенных правил. Советники привязаны к графику и ждут наступления конкретного события. При этом может для выполнения команды может потребоваться сколько угодно времени.
  • Скрипты — у них есть сходства и отличия от советников. Скрипты предназначены для однократного исполнения программы сразу после активации. При этом, если соблюдены определенные условия, программа выполнится.
  • Пользовательские индикаторы — в отличие от советников, пользовательские индикаторы не могут совершать сделки. Это аналитические программы, которые могут указать, что на рынке произошло определенное событие, на основе заложенных в них правил.
  • Библиотека — коллекция предварительно написанного кода, функций и процедур, которые можно использовать для выполнения конкретных задач. Благодаря использованию библиотек программисту не нужно каждый раз изобретать велосипед.
  • Включаемый файл include — это отдельный файл, содержащий код или объявления, которые вы хотите повторно использовать в разных частях вашей программы. Для включения содержимого другого файла в основной файл программы используется директива #include. Include-файлы обычно используются для организации и модуляризации кода, обеспечивая повторное использование кода и удобство сопровождения.

3. MetaEditor IDE

MetaEditor — это среда разработки, используемая для создания программ на MQL5. По сути IDE — это редактор, где вы можете писать, отлаживать, компилировать и тестировать свои коды. Редактор MetaEditor 5 поставляется в стандартном пакете с платформой MetaTrader 5 и устанавливается на компьютер при установке платформы.

  • Чтобы открыть редактор MetaEditor, нажмите кнопку IDE в MetaTrader 5.

    Рисунок 1. Открыть MetaEditor из терминала MetaTrader 5

  • В разделе «Навигатор» (Ctrl+D) отображаются все типы MQL5-программ. Разные типы программ сгруппированы по соответствующим папкам.

    Рисунок 2. Раздел навигатора

  • Для удобного создания собственных программ MetaEditor предлагает встроенный Мастер MQL. Чтобы создать собственную программу, в редакторе нажмите кнопку «Создать» (или Ctrl+N на клавиатуре) — это откроет Мастер MQL5. В мастере выберите необходимый тип программы и нажмите «Далее >».

    Рисунок 3. Выбор типа создаваемой программы

  • Откроется страница для указания основных настроек вашей программы. Заполните поля и нажмите кнопку «Готово» в разделе мастера MQL.

    Рисунок 4. Ввод необходимой информации

  • Поздравляем! Вы прошли первый шаг и теперь готовы начать писать собственный код в редакторе.

    Рисунок 5. MetaEditor 5


  • Сразу же в редакторе вы увидите данные, которые ввели на предыдущем шаге.

    Рисунок 6. Подробности

  • OnStart() — это функция, которая вызывается в программах-скриптах. Она обеспечивает выполнение кодов в фигурной скобке {} один раз и сразу после активации скрипта.

    Рисунок 7. OnStart()

  • Давайте напишем наш первый код. Создадим скрипт, который при активации отобразит надпись «Hello MQL5».

    void OnStart()
      {
    
       Alert("Hello MQL5");
    
      }
    


Примечание: далее в статье мы подробнее разберем, что происходит в этом коде.


  • Компилятор проверяет правильность кода. Он также может подсказать, что исправить или улучшить в коде. Итак, после того, как мы написали код, нажимаем на кнопку компилятора Compile. Далее проверим сообщения компилятора — в них не должно быть ошибок и предупреждений.

    Рисунок 8. Компилятор


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

  • Чтобы протестировать программу, нажмите на зеленую кнопку воспроизведения.

    Рисунок 9. Тестирование кода


  • Скомпилированная программа запускается прямо в платформе MetaTrader 5.

    Рисунок 10. Запуск программы в MetaTrader 5


Итак, это были наши небольшие, но такие важное первые шаги в понимании основ программирования и среды MetaEditor. Мы заложили основу для понимания MQL5 и познакомились с редактором MetaEditor — средой для написания кода. Редактор MetaEditor — это не просто инструмент, это возможность преобразовать ваши идеи в осуществимые стратегии. Давайте теперь немного углубимся в детали программирования на MQL5. Путешествие в алготрейдинг только началось.

4. Основы языка MQL5

Прежде чем приступить к разработке MQL5-программ, важно понять некоторые основные моменты, из которых состоит программа. Рассмотрим базовые понятия — типы данных, функции, переменные, комментарии и синтаксис MQL5.

4.1. Синтаксис

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

Ключевые аспекты синтаксиса:

4.1.1. Окончание операторов

Операторы в MQL5 обычно заканчиваются точкой с запятой («;»). Этот знак сообщает компилятору, что один оператор закончился и начинается следующий.

Пример:

void OnStart()
  {

   Alert("Hello MQL5");  // the semicolon means the end of the code line

  }

4.1.2. Комментарий

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

Однострочные комментарии. Однострочным комментариям предшествует символ «//». Они используются для кратких пояснений.

Примеры:

void OnStart()
  {

   Print("Hello MQL5");   // Эта строка кода выведет “Hello MQL5” при запуске

  }

Примечание: компилятор полностью игнорирует все, что написано после //

Многострочные комментарии

Многострочные комментарии начинаются символами /* и заканчиваются символами */ . Они подходят для более развернутых объяснений. Такие комментарии могут быть полезны для записи планов или пошаговых инструкций при разработке программы.

Пример:

void OnStart()
  {

   /* Во многих языках программирования, включая MQL5,
    точка с запятой “;” используется для обозначения конца оператора.
   Это важнейший элемент, он позволяет компилятору понять структуру программы.
   */
   
  }

Компилятор полностью игнорирует все, что находится между /* и */.

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


4.1.3. Идентификаторы

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

Правила именования

Идентификаторы должны соответствовать определенным правилам именования. Они должны начинаться с буквы (A-Z или a-z), а далее могут следовать буквы, цифры (0–9) или символы подчеркивания (_).

Учет регистра

В MQL5 при именовании учитывается регистр, то есть прописные и строчные буквы различаются. Так, myVariable и MyVariable считаются разными идентификаторами.

Пример:

int myage = 25; 
int MyAge = 25;  // идентификаторы myage и MyAge разные.


Значимые имена

Выбирайте осмысленные и описательные имена для идентификаторов. Это повышает читаемость кода и поможет другим (или вам в будущем) понять назначение переменных или функций.

Зарезервированные слова

Не используйте зарезервированные слова в качестве идентификаторов. Зарезервированные слова — это слова, которые имеют особое значение в языке программирования и не могут использоваться для других целей. Например, это Alert, Print и Comment. Подробнее о зарезервированных словах модно почитать в документации.

Пример:

    int Age = 25;      
    Print(Age);   
    /*
    Int это тип данных, целое число 25.
    Age это идентификатор
    Print это зарезервированное слово в MQL5, исполняет определенную функцию. Его нельзя использовать в качестве идентификатора
    */


4.2. Основные типы данных

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

Integer (int)

Этот тип можно представить как коробку, в которой хранятся только целые числа. Такой тип может хранить числа типа 1, 5 или 10, но не числа с десятичной точкой.

Пример:

int myInteger = 10;

Double

Этот тип представляет числа с десятичной точкой.

Пример:

double myDouble = 3.14;

Character

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

Пример:

 // Объявляем символьную переменную 
      char myChar = 'A';

 // Выводим символ в консоль 
      Print(myChar);

Тип String

String — строка, представляет собой последовательность символов, обычно используется для текста.

Пример:

string myString = "Hello, MQL5!";

Alert(myString);

Тип Bool (логический)

Логические типы представляют истинные или ложные значения.

Пример:

bool iam25 = true;

Arrays (массивы)

Массивы в MQL5 позволяют хранить несколько значений одного типа данных под одним именем переменной. Это очень удобный способ работы с коллекциями данных. Основные аспекты работы с массивами в MQL5:

1. Объявление массива — вы объявляете массив, указывая его тип данных и имя, за которыми следуют квадратные скобки «[]», обозначающие массив.

Пример:

Объявляем целочисленный массив

int numbers[5];


2. Инициализация — инициализировать массив можно во время объявления, предоставив список значений, заключенный в фигурные скобки '{}'.

Пример:

// Инициализация целочисленного массива

   int numbers[] = {1, 2, 3, 4, 5};



3. Доступ к элементам массива осуществляется по их индексу, начиная с 0. Например, в массиве numbers первым элементом является numbers[0]. Массив в MQL5 можно использовать, например, для получения цен закрытия и открытия.

Пример:

// Доступ к элементам массива

   int firstNumber = numbers[0];  // Доступ к первому элементу


Здесь представлены всего несколько из всевозможных типов данных. Мы рассматриваем только основные моменты, чтобы познакомить вас с основополагающими концепциями на четких примерах, пока не вдаваясь в более мелкие и сложные подробности.


Заключение

Итак, в этой статье мы с вами совершили первые шаги в понимании основ программирования на MQL5. Мы начали с общего введения в программирование, перешли к типам MQL5-программ и познакомились со средой программирования MetaEditor IDE, в которой мы дальше будем создавать торговые алгоритмы. Все эти базовые знания должны послужить основой для дальнейшего изучения и создания более сложных программ. Помните, что это только начало, и по мере продвижения возможности программирования на MQL5 будут раскрываться. Следите за статьями и учитесь создавать надежные и эффективные торговые стратегии на MQL5!



Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/13738

Последние комментарии | Перейти к обсуждению на форуме трейдеров (4)
Lou1973
Lou1973 | 1 дек. 2023 в 13:59

Отличная статья (серия статей)!

Слишком много авторов погружаются в тяжелые, умные темы, но нет материала для начинающих, чтобы объяснить основы. Та небольшая информация, которая есть об основах, устарела для MQL4.

С нетерпением жду следующей статьи из вашей серии, спасибо еще раз.

Israel Pelumi Abioye
Israel Pelumi Abioye | 1 дек. 2023 в 17:35
Lou1973 #:

Отличная статья (серия статей)!

Слишком много авторов погружаются в тяжелые, умные темы, но нет материала для начинающих, чтобы объяснить основы. Та небольшая информация, которая есть об основах, устарела для MQL4.

С нетерпением жду следующей статьи из вашей серии, спасибо еще раз.


Уважаемый Lou1973,

Большое спасибо за теплые слова! Мне очень приятно слышать, что вам понравилась статья. Ваша поддержка много значит, и я с нетерпением жду, когда смогу поделиться с вами новыми знаниями в предстоящей серии статей. Следите за новостями и не стесняйтесь обращаться ко мне, если у вас есть какие-то конкретные темы, которые вы хотели бы осветить.

С наилучшими пожеланиями,

Абиое Исраэль Пелуми

JMBerlu
JMBerlu | 4 дек. 2023 в 22:21
Браво! Это очень полезная статья для новичков. Я умираю от желания прочитать следующие части, и я уверен, что я не один такой!
Заранее спасибо за то, что делитесь своими знаниями и энергией, которую вы потратите на это!
С наилучшими пожеланиями,
JMB
Israel Pelumi Abioye
Israel Pelumi Abioye | 6 дек. 2023 в 01:49
JMBerlu #:
Браво! Это очень полезная статья для новичков. Я умираю от желания прочитать следующие части, и я уверен, что я не один такой!
Заранее спасибо за то, что делитесь своими знаниями и энергией, которую вы потратите на это!
С наилучшими пожеланиями,
JMB

Большое спасибо, JMB! Я рад слышать, что вы нашли статью полезной. Ваша поддержка много значит, и мне не терпится поделиться с вами новыми идеями в ближайших частях. Следите за новостями, и если у вас есть какие-то конкретные темы, которые вы хотели бы затронуть, не стесняйтесь, дайте мне знать!

С наилучшими пожеланиями,

Абиое Исраэль Пелуми

Возможности Мастера MQL5, которые вам нужно знать (Часть 08): Перцептроны Возможности Мастера MQL5, которые вам нужно знать (Часть 08): Перцептроны
Перцептроны, сети с одним скрытым слоем, могут стать хорошим подспорьем для тех, кто знаком с основами автоматической торговли и хочет окунуться в нейронные сети. Мы шаг за шагом рассмотрим, как их можно реализовать в сборке классов сигналов, которая является частью классов Мастера MQL5 для советников.
Разрабатываем мультивалютный советник (Часть 6): Автоматизируем подбор группы экземпляров Разрабатываем мультивалютный советник (Часть 6): Автоматизируем подбор группы экземпляров
После оптимизации торговой стратегии мы получаем наборы параметров, на основе которых можно создать несколько экземпляров торговых стратегий, объединённых в одном советнике. Раньше мы делали это вручную, а теперь попробуем автоматизировать этот процесс
Кластеризация временных рядов в причинно-следственном выводе Кластеризация временных рядов в причинно-следственном выводе
Алгоритмы кластеризации в машинном обучении — это важные алгоритмы обучения без учителя, которые позволяют разделять исходные данные на группы с похожими наблюдениями. Используя эти группы, можно проводить анализ рынка для конкретного кластера, искать наиболее устойчивые кластеры на новых данных, а также делать причинно-следственный вывод. В статье предложен авторский метод кластеризации временных рядов на языке Python.
DoEasy. Сервисные функции (Часть 2): Паттерн "Внутренний бар" DoEasy. Сервисные функции (Часть 2): Паттерн "Внутренний бар"
В статье продолжим рассматривать ценовые паттерны в библиотеке DoEasy. Создадим класс паттерна "Внутренний бар" формаций Price Action.