Видеоуроки по программированию на MQL5 - страница 3

 

MQL5 - Пишем советник на внешнем индикаторе


MQL5 - Пишем советник на внешнем индикаторе

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

  • 00:05:00 Спикер демонстрирует, как создать внешний индикатор на MQL5. Они начинают с определения индикатора и указания количества знаков после запятой. Затем они определяют символы, которые будут использоваться для стрелок вверх и вниз. После настройки параметров индикатора переходят к функции расчета, где проверяют размер входного массива временных рядов. Если размер меньше 30, они не выполняют никаких вычислений. Они также проверяют количество баров, обработанных в предыдущем расчете. Если он меньше 7, устанавливаются лимиты на работу. Наконец, они инициализируют необходимые переменные для буферов и очищают их для дальнейшей обработки.

  • 00:10:00 Спикер объясняет процесс написания пользовательского индикатора на языке программирования MQL5. Код вращается вокруг определения тенденций путем сравнения цен закрытия последовательных свечей. Если цена закрытия текущей свечи выше, чем у предыдущей и предыдущей свечи, это считается восходящим трендом. И наоборот, если цена закрытия текущей свечи ниже, чем у предыдущей и предыдущей свечи, это считается нисходящим трендом. Затем код записывает соответствующие значения тренда в буфер на основе заданных условий. Спикер подчеркивает важность понимания логики кода для его эффективной реализации в пользовательских индикаторах.

  • 00:15:00 Спикер обсуждает условия инициализации пустых значений и копирует код в другой раздел. Затем они объясняют функцию ВанФлека и необходимую скорость возврата. Индикатор под названием «Тренд» тестируется на графике и показывает только красные точки. Чтобы сделать их более заметными, динамик добавляет смещение и присваивает ему значение 30 пикселей. Они также меняют знак и снова компилируются, наблюдая за достижением желаемого результата. Спикер продолжает дальнейшие настройки и делает вывод, что индикатор работает правильно. Следующим шагом будет разработка советника на основе этого индикатора.

  • 00:20:00 Спикер объясняет, как создать советник с помощью внешнего индикатора. Они начинают с сохранения шаблона для советника, а затем переходят к добавлению функций и модулей для упрощения процесса торговли. Также упоминается важность использования библиотек и внешних параметров для советника. Далее докладчик объявляет переменные для информации о позиции, торговых параметров и уровней стоп-лосса и тейк-профита. Они также объясняют разницу между входными и внешними переменными и объявляют переменные типа double для расчета необходимых уровней стоп-лосса и тейк-профита.

  • 00:25:00 Спикер рассказывает, как работать с внешними индикаторами в MQL5. В отличие от MQL4 и MQL5, которые работают с авторами этих индикаторов, MQL5 требует использования внешнего индикатора. Для этого в блоке OnInit создается указатель на индикатор, с которым мы и будем работать. Затем спикер переходит к заполнению необходимых данных для указателя, начиная с магического числа и типа учетной записи. Также они упоминают о необходимости создания функции для определения типа учетной записи и объявления необходимых переменных.

  • 00:30:00 Спикер рассказывает о параметрах и инициализации внешнего индикатора, который будет использоваться в советнике. Они проверяют значения символов и цифр, чтобы определить подходящий множитель для уровней стоп-лосса и тейк-профита. Они также инициализируют указатель и дескриптор индикатора, гарантируя успешное создание индикатора. Если нет, появится сообщение об ошибке.

  • 00:35:00 Докладчик знакомит с концепцией использования внешнего индикатора в MQL5 для разработки советника (EA). Обсуждаются необходимые переменные и массивы для определения трендов на основе текущих и предыдущих минимальных и максимальных цен. Они также объясняют, как копировать значения индикатора в назначенные буферы. Спикер подчеркивает важность правильного копирования значений и приводит пример, как это сделать.

  • 00:40:00 Спикер обсуждает процесс копирования значений и проверки размера буфера. Если копирование буфера не удалось, значение переменной last time устанавливается равным 0. Тот же процесс повторяется для другого буфера. Затем спикер устанавливает флаг, указывающий, что индексация массива будет выполняться на основе временного ряда. Локальные переменные объявляются и им присваиваются пустые значения для поиска экстремумов. Затем записывается цикл для поиска этих экстремумов, что поможет определить сигналы покупки или продажи. Цикл повторяется до тех пор, пока условие не будет выполнено, и в конце значение переменной «последний адвокат» соответствующим образом корректируется.

  • 00:45:00 Докладчик продолжает цикл и проверяет наличие непустых значений, чтобы начать поиск конкретных условий. Они объявляют цикл и начинают проверять, не является ли значение пустым. Затем они собирают значения нижнего и верхнего буфера и сохраняют их в отдельных переменных. Спикер подчеркивает необходимость быть осторожным с копированием и вставкой кода. Они переходят к проверке условий входа в рынок, конкретно по сигналам на покупку. Если условия соблюдены, они откроют позицию на покупку. Спикер также упоминает о необходимости функции закрытия позиций на продажу и функции проверки открытых ордеров на покупку. Они планируют сделать эти функции универсальными. Наконец, они рассчитывают локальную целевую цену для ордеров на покупку.

  • 00:50:00 Спикер обсуждает использование уровней стоп-лосс и тейк-профит в торговых стратегиях. Они объясняют, как рассчитать значения для этих уровней, умножая минус стоп-лосс на значение пункта и плюс тейк-профит на значение пункта. Также они упоминают о написании функции для открытия ордеров, как на покупку, так и на продажу, и обсуждают использование переменных и циклов в коде. Спикер объясняет, что функция будет проверять позицию и тип сделки перед ее исполнением. В заключение они упоминают, что продолжат писать необходимые функции для торговой стратегии.

  • 00:55:00 Спикер рассказывает о процессе написания универсального индикатора на MQL5. Они объявляют тип позиции, настраивают цикл и указывают условия открытия и закрытия позиций. Они объясняют, как закрыть позицию с помощью функции закрытия торговой позиции(). Затем они переходят к написанию функций opentype и apencil, где объявляют и нормализуют параметры стоп-лосса и тейк-профита. Они также включают оператор if, чтобы проверить, была ли сделка успешно открыта, и предоставить сообщение об ошибке, если это не так.

  • 01:00:00 Докладчик вносит изменения в код торгового советника на MQL5. Они меняют имена и комментарии, а также добавляют скобки и исправляют ошибки. Затем они компилируют код и тестируют его в тестере стратегий MetaTrader, но сталкиваются с проблемами на платформе. Спикер предлагает написать функцию под названием «частота обновления» для обновления котировок, что является обычной функцией в МТ4. Они также добавляют проверку ошибок для нулевых значений.

  • 01:05:00 Спикер обсуждает код советника и вносит некоторые коррективы, в том числе добавляет оператор return false и проверяет совместимость валютных пар. Они также обновляют котировки и обновляют данные. Затем они компилируют и запускают код, и хотя советник вроде работает правильно, это не выгодно. Спикер поясняет, что целью было не заработать, а разработать индикатор и написать на его основе советник. Они предполагают, что для прибыльности может потребоваться дальнейшая оптимизация или корректировка. Они завершают видео, поблагодарив зрителей за внимание.
 

MQL - пишем универсальный советник для MT4 и MT5


MQL - пишем универсальный советник для MT4 и MT5

Приветствую вас, друзья! Согласитесь, очень неудобно, когда есть два терминала - MetaTrader 4 и MetaTrader 5, и вы хотите написать советник для каждого из них, тестировать на обоих, запускать и так далее. Было бы здорово, если бы можно было написать один советник, один файл, который подходил бы и к MetaTrader 4, и к MetaTrader 5.

Сегодня мы с вами постараемся написать такой советник. Я не буду вкладывать какую-то серьезную стратегию, просто покажу сам принцип, как писать под оба терминала одновременно, чтобы советник работал и на MetaTrader 4, и на MetaTrader 5.

Итак, начнем. В MetaEditor встроен такой механизм, как условная компиляция, то есть компиляция в зависимости от версии языка. Определим ордер "stop" для MQL5, соответственно, при помощи условной компиляции мы сможем формировать различные части кода для разных версий. Например, записываем это следующим образом:

#if defined(__MQL4__)
// Код для MQL4
#elif defined(__MQL5__)
// Код для MQL5
#endif
Дальше объявляем необходимые переменные и переходим к методу, который получает текущую цену стоп-лосс и тейк-профит и отвечает за открытие ордеров в покупку. Таким образом, мы сначала устанавливаем условие для MQL4 и пишем обычный код для открытия ордеров в покупку. Затем, используя условную компиляцию для MQL5, пишем код для открытия ордеров в покупку на языке MQL5.

Аналогично, пишем код для открытия ордеров в продажу для обоих терминалов.

Далее у нас стандартный метод "OnTick". Здесь мы выполняем нашу логику открытия ордеров. Затем передаем в метод "Buy" параметры цены стоп-лосс и тейк-профит будущего ордера. Аналогично передаем параметры для метода "Sell". В блоке кода для MQL4 у нас тип сигнала определяется случайно, если число делится на 2 без остатка, то у нас тип "Sell", иначе тип "Buy". В блоке кода для MQL5 также генерируем сигнал, используя метод "GetTickCount()".

Вот такой простой алгоритм для примера. Давайте скомпилируем. Если компиляция прошла успешно без ошибок, мы можем протестировать советник в терминале MetaTrader 4.

Для тестирования в MetaTrader 5 создаем пустой шаблон советника в MetaEditor и просто копируем весь текст. Компилируем без ошибок.

Теперь давайте протестируем его в тестере стратегий в MetaTrader 4 и MetaTrader 5. Выбираем валютную пару, устанавливаем параметры тестирования и запускаем тест.

Таким образом, мы с вами написали советник, который одинаково хорошо компилируется и работает в терминале MetaTrader 4 и MetaTrader 5.

Спасибо за внимание, всем пока!

 

MQL5 - использование экономического календаря в MT5


MQL5 - использование экономического календаря в MT5

  • 00:00:00 Спикер вводит тему экономического календаря в МetaТrader 5 и объясняет, что к нему можно получить доступ и получить данные из него с помощью функций платформы. Упоминают, что в МТ4 тоже есть новостные индикаторы, но МТ5 интереснее из-за возможности вызывать нужные функции и использовать новости для торговых целей. Затем докладчик обсуждает функцию «CalendarValue», которая извлекает массив значений для всех событий в указанном временном диапазоне с фильтрами по стране или валюте. Они поясняют параметры и упоминают, что если некоторые параметры не будут заполнены, будут получены новости всех стран и валют. Спикер продолжает писать функцию под названием «GetNewsCount», которая будет возвращать количество новостных событий в заданном временном диапазоне, используя код страны в качестве параметра.

  • 00:05:00 Спикер обсуждает использование экономического календаря в МТ5. Они объясняют, что переменные нужно инициализировать для подсчета, а также для указания периода, из которого будут получены новости. Они упоминают о необходимости массивов для календаря и новостей, а также переменной для файла календаря для конкретного новостного события. Спикер упоминает, что границы диапазона, из которого будут браться события, будут основываться на текущем времени терминала. Они вычитают один час из текущего времени, чтобы получить время новостного события и передать параметры функции календаря. Они также упоминают, что если параметр даты и времени не указан, в календаре будут отображаться все заранее запланированные новостные события. Наконец, они обсуждают код параметра кода страны и его важность в этом процессе.

  • 00:10:00 Спикер обсуждает использование экономического календаря в платформе MetaTrader 5 (MT5). Они объясняют, что выпуски новостей из разных стран могут оказывать влияние на валютные пары и их обменные курсы. Докладчик демонстрирует, как извлекать данные новостей из календаря и отфильтровывать ненужную информацию. Они также показывают, как обрабатывать ошибки в случае неудачного извлечения данных новостей. В целом спикер дает пошаговое руководство по использованию экономического календаря в МТ5.

  • 00:15:00 Спикер объясняет, как пользоваться экономическим календарем в МТ5. Они демонстрируют, как получать новостные события, вызывая функцию fnews.com и указывая код страны. Если новостных событий больше нуля, новости будут отображаться на экране с помощью функции показа новостей. Спикер также объясняет, как собирать и отображать новости, используя цикл и переменную строкового типа. Они упоминают, что интерес представляют только время и дата события, а другую информацию, такую как исправления и фактические значения, можно игнорировать. Советник предлагает установить период в 10-15 минут для сбора новостей для торговых целей.

  • 00:20:00 Спикер рассказывает, как использовать экономический календарь в МТ5 для выставления стоп-приказов перед выходом новостей. Они упоминают функциональность и преимущества этой функции, а также необходимость корректировки времени в календаре в соответствии со временем сервера. Также спикер рассказывает о необходимости получать название новости отдельно с помощью пользовательской функции и о том, как выводить новость на экран с помощью функции комментариев. Они вводят функцию «получить и назвать», чтобы получить название новостного события. Раздел завершается тем, что спикер компилирует код и готовится протестировать его на терминале.

  • 00:25:00 Пользователь столкнулся с ошибкой и не может получить новости из экономического календаря. Они анализируют календарь и обнаруживают, что до 22:30 новостей нет, поэтому решают подождать или указать более длительный период для тестирования. После компиляции они видят, что комментарии к новостям точно соответствуют календарю. Они упоминают, что было бы лучше подождать несколько часов, чтобы увидеть новости в терминале. Далее они обсуждают возможность создания советника для этих новостных событий и упоминают о необходимости использования модулей для ускорения процесса.

  • 00:30:00 Докладчик представляет несколько переменных, связанных с торговой информацией, таких как «info» и «m_order». Они обсуждают использование внешних параметров для стоп-приказов и времени истечения, а также указание параметров для объема, тейк-профита и стоп-лосса. Спикер также упоминает о необходимости «волшебной» переменной, которой присваивается определенное значение. Кроме того, они упоминают о важности обновления котировок для торгуемой валютной пары и предоставляют сообщение об ошибке в случае сбоя обновления. В целом, этот раздел посвящен настройке необходимых переменных и обеспечению правильной работы торговой программы.

  • 00:35:00 Докладчик рассказывает об использовании экономического календаря в платформе MetaTrader 5 (MT5). Они демонстрируют, как объявлять переменные и вычислять позиции на основе количества цифр. Спикер также объясняет процесс открытия ордеров на основе количества новостных событий и рассчитывает цены для стоп-ордеров. В целом, в этом разделе приведены инструкции по эффективному использованию экономического календаря в МТ5.

  • 00:40:00 Спикер обсуждает использование экономического календаря в МТ5. В них упоминаются некоторые конкретные параметры и расчеты, которые необходимо произвести для открытия торгового ордера. Также предлагают отключить эксперт и удалить некоторые строки кода. Затем спикер объясняет создание функции частоты обновления и важность проверки нулевых цен перед возвратом желаемых значений.

  • 00:45:00 Спикер обсуждает использование экономического календаря в MQL5. Они демонстрируют, как настроить новостной трейдер, и объясняют, как рассчитать время и условия для открытия стоп-ордеров на основе новостных событий. Однако в коде есть ошибки, и спикер проходит через процесс их выявления и исправления. Также упоминают о необходимости добавить проверку на количество отложенных ордеров и объявить переменные для их подсчета. В целом, в этом разделе представлена практическая демонстрация использования экономического календаря в МТ5 в торговых целях.

  • 00:50:00 Спикер обсуждает использование экономического календаря в МТ5. Они объясняют, как проверить валютную пару и количество отложенных ордеров, а также как включить автоматическую торговлю. Также упоминается, что торговая стратегия на основе новостей может быть протестирована только в режиме реального времени, так как функция истории не работает в тестере стратегий. Спикер предлагает сохранить данные новостей в отдельную базу данных и использовать ее в процессе тестирования.
 

MQL5 - Пишем мультивалютный советник для MetaTrader 5



MQL5 - Пишем мультивалютный советник для MetaTrader 5

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

  • 00:00:00 Ведущий рассказывает о разработке мультивалютного советника в MetaTrader 5. Начнем с определения исходных параметров работы советника, таких как объем и проскальзывание ордеров. Так как советник мультивалютный, на данном этапе решили не включать уровни стоп-лосс и тейк-профит. Затем они определяют валютные пары для торговли и вводят параметр для включения или отключения торговли для каждой пары. Они также обсуждают входные параметры для индикатора сигнала входа. Ведущий подчеркивает важность читаемости кода и предлагает использовать цену закрытия в качестве входного параметра для индикатора.

  • 00:05:00 Спикер рассказывает о процессе создания мультивалютного советника для MetaTrader 5. Спикер проходит этапы копирования настроек для каждой валютной пары, установки параметров для каждой пары и объявления массивов для хранения информации о сигналах на покупку и продажу. Затем спикер объясняет необходимость определения переменной для определения количества используемых валютных пар и переходит к определению массивов для сигналов покупки и продажи. Спикер также упоминает об использовании функции для получения этих сигналов и параметров для каждой валютной пары, а также о том, как определяются сигналы на основе заданных параметров.

  • 00:10:00 Спикер рассказывает о создании мультиязычного советника для MetaTrader 5. В них приведены ссылки на массивы, содержащие сигналы на покупку и продажу, которые затем используются для открытия и закрытия позиций. Спикер также представляет новую функцию под названием «торговый сигнал», которая управляет сделками, открывая и закрывая их. Затем код копируется и модифицируется для разных валютных пар. Раздел завершается началом разработки функций торгового сигнала и торгового бота, которые принимают входные параметры, такие как валютные пары, периоды и цены, и используют логические параметры для включения или отключения определенных действий. Спикер также упоминает использование массивов для хранения сигналов на покупку и продажу.

  • 00:15:00 Докладчик обсуждает объявление и инициализацию массивов на языке программирования MQL5. Они упоминают, что статические переменные могут использоваться для хранения хэндлов индикаторов, а счетчики используются для отслеживания значений. Докладчик демонстрирует, как изменять размер массивов с помощью функции resize, и упоминает о важности инициализации и очистки массивов перед использованием. Они также объясняют процесс использования данных индикатора в виде временного ряда.

  • 00:20:00 Докладчик объясняет второй параметр, который является флагом индексации в обратном порядке. Они обсуждают хэндл индикатора для каждой валютной пары и способы передачи параметров символа и таймфрейма. Они также вводят новую функцию под названием «isNewBar», которая определяет, есть ли новый бар или нет, и объявляют переменные и массивы для хранения размера массива. Они обсуждают изменение размеров массивов и сообщения об ошибках.

  • 00:25:00 Спикер объясняет код, связанный с обработкой ошибок и проверкой новых баров в платформе MetaTrader 5. Они демонстрируют, как использовать функцию печати для выявления ошибок и их обработки путем установки соответствующего размера массива для отрицательных значений. Они также показывают, как сравнить текущий бар с предыдущим баром, чтобы определить, является ли он новым баром или нет. Наконец, они обсуждают, как использовать индикаторы для генерации сигналов на покупку и копирования их значений в массив индикаторных буферов. Спикер подчеркивает важность внимательности и осторожности при кодировании.

  • 00:30:00 Спикер объясняет код определения торговых сигналов по значениям индикаторов. Код проверяет, больше или меньше значение индикатора нуля, и при выполнении определенных условий выдает сигнал либо на покупку, либо на продажу. Спикер также упоминает о необходимости дополнительных функций, связанных с открытием и закрытием ордеров. Кроме того, спикер обсуждает включение проверки, разрешающей или запрещающей торговлю определенной валютной парой.

  • 00:35:00 Спикер рассказывает о торговых ограничениях для определенных валютных пар и о том, как их обрабатывать в коде. В них представлена функция "трейдер" и необходимые параметры, включая массивы сигналов. Затем они проверяют, есть ли открытые позиции, и при необходимости закрывают их. Спикер также упоминает о необходимости открытия нового ордера на основе сигнала и направления сделки. Они дают обзор общего алгоритма и упоминают, что конкретные функции будут написаны позже.

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

  • 00:45:00 Спикер обсуждает процесс вывода сообщений об ошибках при выполнении некоторых функций. Они объясняют, что вместо тщательной проверки различных кодов ошибок они предлагают просто вывести основное сообщение об ошибке. Они демонстрируют это, показывая, как отображать сообщение об ошибке при открытии ордера на покупку. Также упоминается возможность создания более универсальной функции с параметрами для разных типов ордеров, но для целей данного туториала они решили сосредоточиться на конкретных функциях для ордеров на покупку и продажу. Они продолжают объяснять, как создавать функции для закрытия ордеров, подчеркивая важность правильного именования и объявления переменных.

  • 00:50:00 Спикер рассказывает о процессе закрытия ордера в MetaTrader 5. Объясняют, что если ордер не удается закрыть, нет смысла тратить время на бесполезные операции. Получена цена символа, и ордер закрывается по цене покупки. Спикер подчеркивает важность заполнения необходимых параметров, таких как объем и проскальзывание. Они также упоминают о необходимости логирования закрытия ордера. При неудачном закрытии ордера выводится сообщение об ошибке и возвращается ложное значение. В противном случае возвращается истинное значение, указывающее на успешное закрытие ордера.

  • 00:55:00 Спикер рассказывает о процессе компиляции и тестирования мультивалютного советника в MetaTrader 5. Просматривают код и вносят исправления для исправления таких ошибок, как пропущенные скобки и неверный возврат функции. После успешной компиляции кода они переходят к терминалу для запуска тестера стратегий. Они выбирают пару евро/доллар и настраивают некоторые параметры перед запуском теста. Однако они сталкиваются с проблемой, когда ордер на покупку открывается, но не закрывается. После дальнейшего изучения они понимают, что пропустили оператор возврата в коде, из-за чего функция не закрывает ордер на покупку должным образом. Они исправляют ошибку и перекомпилируют код, а затем снова успешно запускают тест.

  • 01:00:00 Спикер рассуждает об оптимизации параметров на языке программирования MQL5 для мультивалютного советника на MetaTrader 5. Пытаются скорректировать начальное значение периода с шагом от 10 до 100 в надежде на повышение доходности, но приходят к выводу, что есть еще потери. Затем они исследуют функцию, отвечающую за открытие и закрытие ордеров, вносят некоторые коррективы и перекомпилируют код. После дальнейшего тестирования они обнаружили, что советник стал более прибыльным и подходящим для торговли на нескольких валютных парах. В заключение спикер заявляет, что они достигли своей цели по созданию мультивалютного советника, и благодарит зрителей за внимание.
 

MQL5 Для начинающих Введение


MQL5 Для начинающих Введение

Всем привет! Меня зовут Антон и сегодня я представляю вам видео курс MQL5 для начинающих. Полное название курса - "От самых азов до готового робота". Название было выбрано не зря, так как я сам не люблю учиться на абстрактных примерах типа "Hello, world", а также всяческих там животных или студентах. Поэтому после небольшой теории, мы сразу же начнем создавать рабочий код, который можно будет использовать как самостоятельно, так и в составе других более комплексных решений.

Данное видео является вводным, и в нем я коротко расскажу следующее:

  • О чем этот курс и для кого он рассчитан;
  • Что такое MQL5 и зачем он нужен;
  • Кратко пройдусь по плану выпуска видео.

Итак, начнем по порядку. MQL5 - это внутренний язык программирования торгового терминала MetaTrader 5, который разработала сама компания MetaQuotes. Он добавлен в торговый терминал для того, чтобы пользователи могли автоматизировать нужные им рутинные действия, а также самостоятельно расширять функциональность терминала, не прибегая к использованию сторонних решений.

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

Переходим ко второй части, или в этой части немного о том, откуда вообще взялся MQL5 и что он такое. Этот язык программирования создавался не с нуля, а на основе C++. Если в предыдущей версии MQL4 уши C++ торчали из каждого второго куста, то в 5 версии уже никто никого не стесняется, если у функции из MQL5 есть аналог на C++, но его приводят прямо в справочном руководстве. Таким образом, все основополагающие составляющие из плюсов перекочевали в MQL5, а именно: синтаксис, структура кода, типы переменных и особенности работы с функциями. Вот тут правда с оговорками функционал ООП.

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

Единственное фундаментальное отличие MQL5 от С++ заключается в том, что на последнем можно писать самостоятельные приложения, а MQL5 позволяет создавать только мини и не очень программки, которые будут работать только внутри торгового терминала MetaTrader 5. По аналогии с плагинами для браузеров.

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

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

Сам курс будет поделен на две глобальные части. В первой части, примерно с 1 по 9 урок включительно, будем изучать основы. А во второй части приступим уже непосредственно к созданию рабочего кода для торгового терминала.

Итак, поехали! В первом уроке рассмотрим окно редактора кода, как его вызывать из торгового терминала, пройдемся по настройкам и узнаем, как пользоваться справкой и его особенностями.

На втором занятии мы познакомимся с правилами написания кода и основами любого языка программирования, а именно с переменными. Рассмотрим их типы, как их создавать и какими свойствами они обладают.

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

На пятом занятии познакомимся с массивами и перечислениями. Шестое занятие будет посвящено циклам и как с их помощью можно легко усложнить себе жизнь.

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

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

И наконец, 9 урок будет посвящен математическим функциям, которые были встроены в MQL5 создателями. Рассмотрим те из них, которые пригодятся нам в типичных случаях их применения, чтобы облегчать повседневный труд MQL5 программиста.

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

На 11 уроке мы придумываем в кавычках торговый алгоритм, который впоследствии реализуем сначала в виде кода, а об окончании всего курса на готовом роботе. Почему придумаем в кавычках? Потому что будет использована торговая стратегия, которая известна чуть больше, чем всем, кто в теме.

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

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

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

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

MQL5 Для начинающих #0 Введение
MQL5 Для начинающих #0 Введение
  • 2021.08.25
  • www.youtube.com
С этого видео начинается первая часть курса по освоению языка программирования MQL5 с нуля. Эта часть курса начнется с основ программирования в MQL5, а закон...
 

MQL5 Для начинающих #1. Интерфейс и настройки


MQL5 Для начинающих #1. Интерфейс и настройки

Всем привет! Сегодня приступаем к изучению языка MQL5. Начну с интерфейса окна редактора кода. Кратко пробежимся по настройкам и рассмотрим справочное руководство.

Итак, поехали! Как и любую Windows программу, MQL5 Editor можно открыть с ярлыка на рабочем столе или через меню "Пуск", если таковое есть. Но поскольку сам торговый терминал нам все равно будет постоянно нужен, то я предпочитаю вызывать Editor из самого терминала. Это делается кнопкой на панели инструментов терминала или горячей клавишей F4. Также этой клавишей можно переключаться между окном редактора и окном терминала.

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

Теперь перейдем к настройкам. Они находятся в меню "Сервис" - "Настройки". Итак, приступим. Начнем с вкладки "Общее". Выставляем пробелы. Если эта настройка включена, то при нажатии клавиши TAB вместо служебного символа табуляции будет вставлено некое количество пробелов, которое определяется в соответствующем окне.

Далее, "Автоподстановка скобок". Если настройка включена, то торговый терминал автоматически добавляет соответствующую закрывающую скобку сразу после открывающей.

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

Подсветка текущей строки. При включении этой настройки текущая строка редактора будет подсвечиваться серым цветом.

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

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

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

Дальше вкладка "Шрифт". Думаю, все понятно без слов. Единственное, что я увеличил размер шрифта на 16, чтобы вам было удобнее читать с экрана.

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

На вкладке "Компиляторы" показаны те из компиляторов, которые установлены в системе и которые MQL5 Editor может использовать в своих целях. У меня, например, установлена Visual Studio от Microsoft, и соответственно, путь к компилятору указан в соответствующем разделе. У вас эта вкладка может выглядеть по-другому.

"Плагины и профилирование" - честно, я ни разу не видел в MQL5 таких проектов, где подобный функционал был бы реально востребован. Так что насчет удобства использования сказать ничего не могу. Но учитывая, что мы имеем дело не с полноценной интегрированной средой разработки, типа той же Visual Studio, ожидать много от местного инструментария я бы не стал.

"community" - через нее можно подключиться к вашему аккаунту на сайте MQL5.com. Это сайт создателей как торгового терминала MetaTrader5, так и языка программирования MQL5. У меня такой аккаунт есть, но, как видите, я его здесь не подключу и вообще его не разу не подключал и никак по этому поводу не страдаю.

С настройками все, я нажал "Отменить". Вы же, если что-то изменили, нажимаете "ОК".

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

Написание программы начнем с создания нового проекта. Выберем скрипт, нажмем "Далее". В поле "Имя" зададим имя нашего скрипта, пусть будет "тест". Больше ничего не меняем, нажимаем "Готово".

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

Вот собственно перед нами шаблон проекта типа скрипт. Это самая простая программа, которую позволяет создать MQL5. Давайте пробежимся по этому шаблону.

Сверху мы видим несколько строк, начинающихся с символа решетка (#). Строки с решетками это директивы. Они отвечают за глобальные свойства всему проекту. Их существует довольно много, и мы будем добавлять собственные директивы в наши проекты, но это произойдет несколько позже.

Теперь о том, что значит запись "void OnStart() {}". Вот, сама функция "OnStart". Эта функция "OnStart" - это главная функция в любой программе, не только в MQL5. Вместо "OnStart" имя может быть другим, но смысл всегда один и тот же: выполнение этой функцией начинается выполнение программы. Из нее уже ведется управление выполнением программы, т.е. передается управление программой в другие участки кода, если они есть. Всю программу можно разместить в самой главной функции, но восприятие кода при этом может сильно пострадать. После того, как эти участки будут отработаны, управление снова возвращается в главную функцию. Завершение главной функции без ошибок считается успешным выполнением программы.

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

Теперь по поводу справки. Вызывается она стандартно для Windows приложений горячей клавишей F1. Если вы впервые открываете справку MQL5, то увидите раздел "Оглавление". И вот, так это будет выглядеть. У меня открылась последняя просмотренная страница, но лучше вызывать ее не просто так, а из конкретного места кода. Сейчас я закрою это окно. Вот, поставим курсор на директиву "#include" и нажмем F1. Как видите, мы попали в раздел справки, посвященный именно этому ключевому слову.

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

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

MQL5 Для начинающих #1. Интерфейс и настройки
MQL5 Для начинающих #1. Интерфейс и настройки
  • 2021.08.25
  • www.youtube.com
В первом занятии кратко пройдемся по интерфейсу редактора кода, рассмотрим его настройки, создадим первый проект и заглянем в справочную документацию.Уголок ...
 

MQL5 Для начинающих #2. Синтаксис и переменные. Часть 1


MQL5 Для начинающих #2. Синтаксис и переменные. Часть 1

Всем привет! Продолжаем изучать MQL5 и тему данного видеоурока - переменные, а также попутно изучим основы синтаксиса, то есть правила написания кода языка MQL5.

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

Для начала откроем скрипт, который мы создали на прошлом занятии. Делается это через окно навигации. Из вкладки MQL5, двойным щелчком открываем файл "test.mq5". Если у вас скрипта по какой-то причине нет, то создадим его заново. Через кнопку "Создать", выбираем скрипт, нажимаем "Далее", дописываем в поле "Имя" имя скрипта "test" в нашем случае, и нажимаем "Готово". У меня он просит перезаписать уже существующий файл, у вас, если его не было, попросить, естественно, ничего не будет. Я тоже пересоздан, в конце концов, я еще ничего в него не добавлял.

В прошлом занятии я забыл упомянуть, что торговый терминал MT5 будет искать каждый тип программы в соответствующих этому типу папках торгового терминала. Для скриптов эта папка "Scripts", для индикаторов - "Indicators", для роботов (или как их тут зовут - "экспертов") - "Experts".

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

Давайте наконец дадим переменной! Делается это с помощью записи:

char a;

Что означает эта запись? Начну с конца: точка с запятой (;) говорит об окончании оператора. А оператор в свою очередь может содержать в себе одну или несколько операций. В нашем случае это операция создания (или, как принято говорить в программировании, объявление) переменной типа "char" с именем "a".

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

Что значит фраза "объявление переменной типа 'char'"? Тут дело в том, что MQL5 унаследовал от Си++ строгую типизацию переменных. Выражаясь проще, когда в программе создается переменная, под нее сразу выделяется некий объем памяти, который зависит от типа значения, которое будет храниться в этой переменной. И в языке MQL5, однажды задав тип переменной, в нее нельзя запихнуть данные другого типа. Как нельзя в принципе. Можно, но только в строго определенной форме, а иначе результаты могут варьироваться от просто неправильной работы нашего робота и до того, что он наторгует нам черти-что.

Чем же такое разнообразие, спросите вы? А я отвечу - вот количество памяти, выделяемое под каждый тип переменной, и соответственно зависимость от количества выделенной памяти. Диапазон значений в каждой переменной будет разным. Например, тип "char" выделяется 1 байт памяти, и диапазон его значений от минус 128 до плюс 127 включая. Тип "short" выделяет уже 2 байта памяти, и диапазон его значений от минус 38 тысяч кажется 80 76 до 38 тысяч 875.

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

Тип "int" имеет в своем распоряжении четыре байта и его диапазон от минус 2 миллиардов с копейками до плюс 2 миллиардов с теми же копейками минус 1. А самый жирный у нас "long", ему досталась аж 8 бит памяти и диапазон от числа, которое начинается с девятки и имеет за ней еще 18 знаков, и до плюс такого же нецензурного числа минус 1.

Также у них у всех есть беззнаковый вариант, то есть не допускаются отрицательные значения. Вот как они объявляются: "uchar", "ushort" и "ulong". Таким образом, диапазон "uchar" будет от 0 до 255, и памяти ему выделят столько же, сколько и обычному "char". Для остальных беззнаковых, диапазон меняется по тем же правилам.

Небольшая ремарка: английская "u" перед указанием типа, в данном случае, означает "unsigned", то есть беззнаковый. Вы используете их в тех случаях, когда какое-либо значение в программе не может быть отрицательным, например, для подсчета количества ордеров и позиций на торговом счете.

Если поместить в переменную значение, которое выходит за его диапазон, то результат непредсказуем. Точнее, он будет в пределах заданного для переменной диапазона, но при этом каким угодно.

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

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

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

Иногда совсем мизерно. Могу привести свой пример: я являюсь счастливым владельцем виртуальной машины в программе Oracle Always Free. Там у меня запущен терминал MT5 и робот на 3 валютных парах. Так вот, с минимально необходимым для запуска терминала обвесом там бесплатно дали только Linux. Это все хозяйство жрет чуть больше 90 процентов выделенной под виртуальную машину оперативки. Вот где нужно было бы поработать с экономией памяти. О нет, потому что с другой стороны в MQL5 встроена очень много функций, заточенных на связку торговый терминал - торговый сервер, и переделать эти функции нельзя.

А используют они строго определенные типы переменных. Соответственно, для использования этих функций, нам нужно создавать и передавать в них переменные такого же типа. И никуда от этого не деться.

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

В нашем случае позитив заключается в том, что пользоваться всем этим зоопарком нам не придется, так как некоторые типы переменных во встроенных функциях не задействованы. От слова совсем. Это "char", "short" и "ushort". И забегая вперед, один из двух типов вещественных числовых данных "double" используется в очень специфических случаях. "Float" используется чуть чаще, но попадаться в ходе все равно будет редко. А в основном используется "ulong".

Так что получается, что есть 10 представленных нам на выбор числовых типов переменных, а именно 4 целочисленных и 4 беззнаковых вариантов + 2 вещественных. 4 будут невостребованными совсем, а два из целочисленных настолько редко, что делят между собой последнее место в рейтинге популярности.

Теперь перейдем к вещественным типам, или их ещё называют числами с плавающей точкой. А по простому - это дробные числа.

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

Разница между ними в том, что максимальная точность для float не превышает двадцать четыре знака после точки, а для double - 53 знака. Соответственно, float занимает в памяти четыре байта, а double - два больше.

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

Так что я буду первым, насколько я помню. Все дело в особенности хранения вещественных чисел в памяти компьютера. А она рассчитана на работу с целыми числами, и дробные числа хранятся в ней виде степеней целых чисел, иногда далеко не всегда, в виде бесконечных дробей. Например, число 0.25, то есть 0.25, хранится правильно, так как является степенью числа 2 в минус 2 степени, если не ошибаюсь. А вот число 0.3 уже хранится не так хорошо, и при "доставании" его из памяти, у него где-то в восьмом знаке после точки появляется единичка.

Даже для наглядности я пропишу эти числа нашим переменным, соответственно float будет 0.25, double будет 0.3.

Этот недостаток проявляется в тех случаях, когда вы пытаетесь сравнить напрямую 2 вещественных числа. Сам я столкнулся с этой проблемой в мае этого года, когда писал того самого сеточного робота, о котором говорил немного выше, и который сейчас стоит на мощностях Oracle.

Справки приводятся два способа обойти эту проблему, но только из тех, кто не прокрутил страницу до конца, решение в итоге было найдено. Но при этом впустую было потрачено 2 дня и две тонны нервов.

В итоге, всё сводится к тому, чтобы не просто проверять равенство одного вещественного числа другому, а задать более сложные условия.

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

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

А если возникли какие-то вопросы или какой-то нюанс нужно рассказать подробнее, пишите в комментариях. Также буду рад вашим оценкам и конструктивной критике. Пока!

Содержание:

00:00:00 - Вступление

00:00:23
- Открываем скрипт

00:01:07
- Структура файлов торгового терминала

00:01:29
- Что такое переменная

00:02:12 - Синтаксис объявления переменных

00:02:45
- Правила именования переменных

00:03:09 - Что такое тип переменной

00:03:59 - Какие типы переменных есть в MQL5

00:04:41
- Типы целочисленных переменных

00:06:53 - Беззнаковые целочисленные типы переменных

00:07:45
- Переполнение возможного диапазона значений

00:08:09 - Зачем так много целочисленных типов?

00:10:15 - Какие типы переменных используются чаще всего

00:11:09
- Вещественные типы переменных

00:12:15 - Особенности хранения в памяти вещественных чисел

00:14:11 - Заключение

MQL5 Для начинающих #2. Синтаксис и переменные. Часть 1
MQL5 Для начинающих #2. Синтаксис и переменные. Часть 1
  • 2021.08.25
  • www.youtube.com
Это первая часть видео-урока, посвященного переменным и основам синтаксиса языка программирования MQL5.Содержание:00:00:00 - Вступление00:00:23 - Открываем с...
 

MQL5 Для начинающих #2. Синтаксис и переменные. Часть 2


MQL5 Для начинающих #2. Синтаксис и переменные. Часть 2

Всем привет! Это вторая часть видеоурока о переменных в MQL5. В первой части мы разобрали вещественные типы данных, а теперь продолжим с типом string или строковой переменной.

Таким образом, объявим строковую переменную и дадим ей имя. В переменной типа string хранится строка текста, которая представляет собой последовательность символов в формате Unicode.

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

Теперь перейдем к специальным типам переменных, начнем с типа bool. Этот тип данных занимает 1 байт в памяти и представляет собой логическую переменную, которая может принимать два значения - true (истина) или false (ложь).

Далее объявим несколько переменных типа bool и присвоим им значения. Чтобы присвоить значение переменной, используется операция присвоения, обозначаемая символом равно. Числовая константа представляет собой значение, которое не может быть изменено в процессе выполнения программы.

Для присвоения значения переменной типа float используется числовая константа. Мы можем изменить значение числовой константы, но это уже будет другая константа, а не изменение значения переменной.

Теперь по первым двум переменным были присвоены значения при помощи ключевых слов "true" и "false" соответственно. Не помню, говорил ли я что-то о ключевых словах, но если говорил, то не грех повторить еще раз.

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

Теперь перейдем к типу "bool". Он занимает 1 байт в памяти и представляет собой логическую переменную, которая может принимать два значения - "true" (истина) или "false" (ложь). В нашем случае, переменные "bu1" и "bu2" были присвоены значения "true" и "false" соответственно.

Ключевое слово "true" означает, что результат некоего действия является истиной, а "false" - ложью. Переменные типа "bool" можно использовать для создания флагов и переключателей, для проверки правильности какого-либо действия и многое другое.

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

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

Теперь давайте исправим ошибки в коде, чтобы программа стала рабочей. Чтобы закомментировать строку кода, нужно поставить перед ней два слеша. Таким образом, ошибки будут исправлены, и программа будет работать без проблем.

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

Блочные комментарии позволяют за комментировать не только набор строк, но и часть кода в середине одной строки. Вид блочного комментария выглядит так: /* ... */. Все, что находится между этими символами, будет являться комментарием.

Теперь давайте объявим еще один специальный тип переменной - "datetime". Дату и время хранятся в этой переменной в виде количества секунд, прошедших с 0 часов 1 января 1970 года. Переменные этого типа предустановлены в MQL5 и могут быть использованы для определения момента открытия нового бара, задания торгового времени и времени перерывов в торговле.

И последний из специальных типов переменных - "color". Он представляет собой описание цвета и может быть присвоен тремя разными способами: с использованием ключевых слов для именованных цветов, в виде набора трех десятичных чисел или одного шестнадцатеричного числа.

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

Так что будьте внимательны и правильно инициализируйте переменные перед их использованием. В следующей части урока мы вернемся к типам переменных и более детально разберем перечисления. Пока все, спасибо за внимание! Если понравилось видео, ставьте лайк, комментируйте и не пропустите следующую часть. Пока!

MQL5 Для начинающих #2. Синтаксис и переменные. Часть 2
MQL5 Для начинающих #2. Синтаксис и переменные. Часть 2
  • 2021.08.25
  • www.youtube.com
Окончание, как я наивно полагал, видео-урока о переменных, синтаксисе и особенностях с ними связанных в языке программирования MQL5.Уголок компетентного диле...
 

MQL5 Для начинающих #2. Синтаксис и переменные. Часть 3


MQL5 Для начинающих #2. Синтаксис и переменные. Часть 3

Всем привет! Сегодня я завершающее видео про синтаксис и переменные в языке программирования MQL5. Начну с того, что обещал показать, но так и не показал в предыдущем видео - как вставлять блочные комментарии в середину выражения. Делается это просто: открываем блочный комментарий /* и закрываем его */. Все, что находится между этими символами, становится комментарием.

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

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

Для демонстрации работы с переменными используем функцию print, которая выводит информацию в журнал торгового терминала. Вызов функции выглядит так: print(значение). Можно указать несколько значений через запятую, чтобы выводить разную информацию.

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

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

Теперь скомпилируем наш скрипт. Как видим, мы получили два предупреждения о том, что переменные "b" и "c" не инициализированы. Но забегая вперед, скрипт отработает корректно.

Предлагаю еще вызвать аналогичные функции для переменных "b" и "c", чтобы наглядно увидеть, как инициализируется переменная, которой мы явно не присвоили значение.

Теперь снова компилируем программу. Как видим, предупреждение все еще осталось, поскольку мы использовали переменные в функции "print".

Теперь переходим в торговый терминал. Запускаем наш скрипт. Как видите, все три переменные вернули "5", хотя переменные "b" и "c" мы никаких значений явно не задавали.

Для чистоты эксперимента предлагаю немного поиграться с нашими переменными. Возвращаемся в терминал и теперь переменную "а" мы явно не инициализируем, переменную "b" инициализируем значением "10", а переменной "c" ставим, как было.

Еще раз компилируем программу, переключаемся в терминал, очищаем журнал, чтобы не было лишнего, и опять запускаем наш скрипт.

Как видите, результаты немного изменились. Теперь переменная "а" вернула нечто совсем удаленное от реальности, а переменные "b" и "c" вернули "10" и "5".

И чтобы завершить наш эксперимент, вернемся в код и еще раз изменим значение наших переменных. На этот раз переменные "а" и "b" не будут иметь никаких значений, а переменной "c" мы присвоим значение "15".

Перед компиляцией программы еще раз вернемся в терминал, очистим журнал и запустим наш скрипт.

Как видим, результаты снова изменились. Теперь переменные "а" и "b" не имеют значений, а переменная "c" вернула "15".

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

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

Перейдем в терминал, почистим журнал. Давайте я немножко даже расширю его окно и запустим тест на выполнение.

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

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

А сейчас первое я покажу. Давайте присвоим нашей переменной "с" значение переменной "а". Делается это вот так:

Теперь опять скомпилируем нашу программу. Переходим в терминал и запускаем наш скрипт.

Как видите, переменная "с" вернула значение "5", точно такой же как и у переменной "а". Теперь это не случайность, а прописанная нами истина.

Но если мы попытаемся сделать то же самое, поменяв переменные "а" и "с" местами, то у нас ничего не выйдет. Возвращаемся в редактор и попробуем вернуть нашей переменной "с" ее значение "15", а переменной "а" присвоим значение переменной "с".

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

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

Немного теории. Преобразование одного типа данных в другой называется приведением типов и производится он двумя способами - неявным и явным. Первым уже познакомились, функции "print", если вы заметили, передаем мы не числа, прочего, переменную типа "int", а компилятор уже без наших указаний преобразуют ее содержимое в текст и выводит в журнал. Вообще, неявное приведение стоит использовать только тогда, когда мы идем от простого к сложному. В других случаях компилятор нас честно предупредит. Давайте все-таки присвоим нашей переменной "d" какое-то значение, например 120. И следующим действием переменной "a" присвоим значение переменной "d". Вот так.

И скомпилируем всю программу. Как видите, у нас нет ни ошибок, ни предупреждений. Почему так? Потому что тип "чар" имеет меньший диапазон допустимых значений, чем тип "int", и поэтому любое правильное значение типа "char" будет правильным и для типа "int". Давайте проверим. Переходим в торговый терминал и запускаем наш скрипт на выполнение.

Как видите, переменная "a" теперь равна 120. А вот если попробуем в обратном порядке, все будет уже не так радужно. Возвращаемся в наш редактор и меняем переменные "a" и "d" местами. Запускаем компиляцию.

Как видите, появилось предупреждение, которое говорит нам о том, что возможна потеря данных в процессе конвертации. В нашем случае все пройдет гладко, потому что 5 входит в диапазон допустимых значений для "char". Но если мы изменим значение нашей переменной "a", скажем, на миллион, и после этого скомпилируем нашу программу, мы все равно получим лишь предупреждение. А вот на результат сейчас смотрим.

Предварительно немного подправив нашу функцию "print", компилируем программу. Переходим в терминал и запускаем.

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

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

Явное приведение типов избавит нас от ненужного предупреждения при компиляции. Давайте на это посмотрим. Здесь мы пока что закомментируем явное приведение, корректируем наше значение "d" - да, допустим 7.25. Затем вместо переменной "a" используем нашу переменную "d". Похоже, где-то пользуемся типами "char" и "float". Теперь компилируем нашу программу.

Как видите, та же самая ошибка. В данном случае мы лишились дробной части, и осталась только семерка. Давайте посмотрим.

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

И предупреждение исчезает, а результат при этом остается прежним.

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

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

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

MQL5 Для начинающих #2. Синтаксис и переменные. Часть 3
MQL5 Для начинающих #2. Синтаксис и переменные. Часть 3
  • 2021.08.26
  • www.youtube.com
Третья (и последняя) часть видео-урока о переменных и основах синтаксиса языка программирования MQL5Уголок компетентного дилетанта в Телеграмм: https://t.me/...
 

MQL5 Для начинающих #3. Арифметические действия


MQL5 Для начинающих #3. Арифметические действия

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

В ходе начнём с самого простого арифметических действий, всего 4: сложение, вычитание, умножение и деление. До меня доходил слух о том, что с недавних пор арифметическим действиям относятся возведение в степень и извлечение корня, но в логике MQL5 все по-прежнему.

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

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

Теперь можно сразу переменным "a" и "b" присвоить значения. Пусть "a" будет 10, а "b" будет 5. И в дальнейшем переменной "c" мы будем присваивать результаты действий над переменными "a" и "b".

Но для начала, кое-что о правилах. Как и во всей математике в MQL5 арифметические действия выполняются последовательно, слева направо. Выше приоритет имеют действие в скобках, затем умножение и деление, и только потом сложение и вычитание. Кстати, как записываются арифметические действия? Также, как и обычно: "+" - это сложение, "-" - это вычитание, "*" - это умножение, и "/" - это деление. А еще есть "%", который означает остаток от деления. Давайте все их рассмотрим по очереди.

Наверное, нужно подготовиться немного по-другому. Сейчас я это и сделаю, это нам пригодится чуть позже. Итак, начнем. Сначала присваиваем переменной "c" результат сложения переменных "a" и "b", и выводим результат в журнал. Затем переменной "c" мы присваиваем разницу между "a" и "b" и опять же выводим ее в журнал. И наконец, переменной "c" мы присваиваем результат умножения переменных "a" и "b", и снова функции print выводим это в журнал.

Чуть сложнее нам понадобится еще одна переменная, назовем ее "abu", и в нее мы будем выводить результат деления "a" на "b". Я тоже поставил лирический символ. Все готово, можно компилировать, что и сделаем.

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

А теперь попробуем извлечь остаток от деления в переменную.

Переходим обратно, опять же используем самый распространенный метод программирования - звездочку (*). У меня им на процент (%). Вот так. Соответственно, корректируем нашу функцию print.

Компилируем. Как видите, предупреждение мы не получили, так что возвращаемся в терминал, очищаем журнал и запускаем наш скрипт на выполнение. Как видите, мы получили то, что должны были получить - а именно 0, потому что 10 делится на 5 без остатка, и соответственно, остаток этот равен нулю.

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

Давайте представим себе такую картину: мы хотим присвоить новое значение не переменной "c", а переменной "a", и при этом нам нужно использовать текущее значение переменной "a". Мы можем сделать это вот так. И соответственно, исправив функцию print, чтобы она выводила новое значение переменной "a".

Компилируем. Нам выдало предупреждения по поводу того, что переменная "c" нигде не используется, но мы пока что его проигнорируем. Переходим в терминал, очищаем наш журнал и запускаем наш скрипт на выполнение. Как видите, мы получили то, что должны были получить - а именно 15.

Но это же выражение можно записать и по-другому. Давайте вернемся в терминал и запишем его, как правильно у программистов, а именно вот так: "a += b". И соответственно, ставим функцию print.

Компилируем, возвращаемся в терминал и опять запускаем тест. Как видите, опять получаем ровно то же самое. То же самое верно и для других арифметических действий, только плюс мы меняем на тот символ, который нам нужен.

Где это можно использовать? Например, при подсчете прибыли по нескольким позициям. Давайте перейдем в редактор и я распишу, как это будет выглядеть.

Допустим, у нас есть переменная "total_profit", в которой мы будем ходить нашу прибыль. И каждый раз, когда мы находим нужную нам позицию, из которой нам нужно изъять показатели прибыли, мы не пишем что-то наподобие "total_profit = total_profit + profit;". А делаем эту запись проще, а именно вот так: "total_profit += profit;". Вот как это будет выглядеть.

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

Еще один арифметический фокус: что если нам просто нужно увеличить или уменьшить значение переменной на единичку? Для такой операции есть своя запись. Давайте попробуем. Это для того, чтобы увеличить переменную на единицу.

Соответственно, сейчас я разкомментирую "a" и "b" вручную. Сделал вот так. Соответственно, поставлю нашу функцию "print" при записи "a++" - именуется как инкремент, а при записи "b--" - декремент. Чуть было вероятным "экскременты", но это был бы наглый проход. Так как операции на самом деле крайне полезны. Давайте посмотрим, как они выглядят и давайте посмотрим, как выглядят результаты этих операций.

Компилируем полный обратно в терминал и запускаем наш скрипт. Как видите, переменная "a", которая была равна 10, превратилась в 11 - так мы и инкрементируем. Переменная "b" из пяти превратилась в 4, так как мы декрементируем.

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

Дальше по вкусу, насмотритесь и, я уверен, даже проникнитесь. Для умножения и деления и остатка от деления аналогичных климентов нет.

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

И под конец расскажу, почему же нельзя делить на 0. Все-таки это программирование, а не обыкновенная математика. На самом деле и в математике у каждого действия должно быть проверочное действие. Поэтому вот такая вот запись "c = 4 / 2" будет проверяться соответствующей записью "4 = 2 * c". В данном случае это не программный код, а просто математическая запись. И если вдруг вместо "c" окажется 0, то 4 мы в итоге не получим никогда, так как свойства числа 0 однозначно при умножении на него, чтобы то ни было, всегда получается 0. Программирование тоже приходит именно с эту сторону, но делает заход с другого фланга.

Любой программный код рано или поздно переводится в двоичную систему счисления, так как центральный процессор понимает только ее. А в двоичной математики нет таких действий, как вычитание и деление. Следовательно, рано или поздно наша запись придет вот к такому виду. Свойства числа 0 везде одинаковы.

Вот такие пирожки с котятами. Как видите, арифметика это просто. Тут скорее дело в опыте, с которым приходит понимание, что и где из представленного использовать эффективнее.

На данный момент все. Если вам понравилось видео, ставьте палец вверх. Чтобы не пропустить следующие, звоните в колокол. А в комментариях пишите свое мнение об увиденном и услышанном, и не забывайте подписаться на канал. Ведь чем нас больше, тем искать ответы на постоянно возникающие вопросы легче. Всем пока!

MQL5 Для начинающих #3. Арифметические действия
MQL5 Для начинающих #3. Арифметические действия
  • 2021.08.27
  • www.youtube.com
В этом видео пойдет речь об арифметических операциях и особенности их реализации в MQL5. Также в конце есть объяснение правилу, почему делить на 0 нельзя.Уго...