Введение в программирование на языке MQL4 для MetaTrader

14.12.2016 в 0:04
admin
Регистрация: 17.02.2011
Сообщений: 4510
Рейтинг: 3144

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

Клиентский терминал представляет из себя часть информационной торговой системы, в состав которой входит и сервер брокера. Сервер брокера в свою очередь подключен к серверам поставщиков ликвидности (в них “правильный” брокер перекрывает клиентские позиции, а за эту услугу клиент уплачивает брокеру комиссию и маркап к спреду).

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

В терминале имеются встроенные средства, позволяющие проводить технический анализ рынка форекс и осуществлять торговые операции: продавать и покупать по рынку, выставлять отложенные ордера, задействовать трейлинг стоп (трал) и пр. Все эти торговые операции доступны в ручном режиме для чего есть соответствующие средства – панель ордеров (по F9, например, доступно окно “Ордер”, где можно выставить рыночный либо отложенный ордер, установить объем ордера, уровни стоп лосс и тейк профит). По всем торговым операциям в клиентском терминале формируются наборы команд, которые отправляются для исполнения на сервер брокера. Сервер брокера отправляет соответствующие команды серверам поставщиков ликвидности. По результатам выполнения команд серверами, они формируют ответы: от поставщика к серверу брокеру, от сервера брокера к терминалу клиента.

Как в клиентском терминале MetaTrader, так и на сервере брокера ведутся соответствующие журналы (вкладка “Журнал” в окне “Терминал”), где фиксируются запросы на сервер и ответы на них (фиксируется время и сообщение). Например, если открыть позицию по текущей цене по паре EURUSD, то в журнале терминала мы увидим две записи такого вида:

2016.12.13 21:33:40.845 '155382': order was opened : #12902424 sell 0.01 EURUSD at 1.06249 sl: 0.00000 tp: 0.00000
2016.12.13 21:33:40.525 '155382': order sell market 0.01 EURUSD sl: 0.00000 tp: 0.00000

В справке “Клиентский терминал — Руководство пользователя” (доступно по F1) можно подробно изучить функции и возможности клиентского терминала.

Наряду с ручными торговыми операциями доступны и программные средства терминала, которые позволяют осуществлять те же самые торговые операции, но не в ручном режиме, а с помощью специальных программ. Такие программы создаются на языке программирования MQL4, прародителем которого выступает хорошо известный миру язык программирования C++. Причем, начиная с билда 600 (кстати, для многих печально известного билда в силу потери совместимости с рядом старых dll и ex4 из-за различий в форматах данных RateInfo), этот язык был существенным образом переработан и достиг уровня более продвинутого MQL5. Также последние обновления MQL4 значительно сблизили MQL4 и C++ не только благодаря введению новых типов данных (char, short, long, uchar, ushort, uint, ulong и double), но и в плане объектно-ориентированного программирования. Так, MQL4 теперь поддерживает все стандарты объектно-ориентированного программирования: инкапсуляцию и расширяемость типов, наследование, полиморфизм, перегрузку, виртуальные функции. Эти возможности позволяют писать “на чистом” MQL4 большие и сложные программы. К стандартам языка C приведен и приоритет операций.

Благодаря программированию на языке MQL4 технический анализ рынка и торговые операции в клиентском терминале MetaTrader могут осуществляться без участия трейдера, а по алгоритму, который он заложил в программу. Этот алгоритм будет анализировать рыночную ситуацию и принимать решения о проведении тех или иных торговых операций. Причем, эта программа на MQL будет работать день и ночь напролет “без перерыва для приема пищи и отдыха”.

Для терминала MetaTrader доступны 3 вида программ:

  • Пользовательские индикаторы. Программы для графического отображения каких-либо расчетных данных исходя из рыночной ситуации. Через эту программу возможна передача данных (через индикаторный буфер) в программу-эксперта. Для программы-индикатора не доступны торговые функции;
  • Скрипты. Программы т.н. одноразового действия, которые запускаются только один раз при их исполнении на графике финансового инструмента. Для повторного исполнения необходимо повторно “кинуть” программу-скрипт на график финансового инструмента. Для программы-скрипта доступны торговые операции. Применяется часто для быстрого выполнения некоторых повторяющихся операций, например, вход в рынок по текущей цене с заданными уровнями стоп лосса и тейк профита;
  • Эксперты (советники, роботы, АТС и т.п.). Эти программы позволяют полностью автоматизировать торговлю. Например, с помощью пользовательского индикатора трейдер разглядел торговую ситуацию, из которой, исходя из принципа ретроспекции, вытекает перспективная сделка, и с помощью программы-скрипта открыл длинную позицию. Так вот, программа-эксперт способна с помощью программных средств сама “разглядеть” такую ситуацию и войти в рынок безо всякого участия трейдера, но строго по его алгоритму, заложенному в программу.
  • И здесь я хочу отметить, что все программы на MQL4 выполняются на стороне клиента, т.е. в клиентском терминале. На сервере брокера этих программ нет. Т.е. для стабильной работы торговых советников (экспертов) в круглосуточном режиме необходим либо круглосуточный режим работы домашнего компьютера и надежный доступ в интернет, либо арендованный сервер с установленным терминалом в датацентре с высоким аптаймом (100% аптайм недостижим в принципе). И чем агрессивнее торговая стратегия, тем выше требования к надежности соединения с сервером. Например, торговля советника без стопов на стороне брокера (т.н. виртуальные стопы), несмотря на положительные результаты в тестах на истории, может привести к печальным последствиям при отсутствии связи с сервером.

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

    Выше я также отмечал, что команды, отправляемые на сервер, и принимаемые от сервера ответы фиксируются в журналах клиенского терминала и торгового сервера брокера. Лог этих сообщений Вы можете посмотреть на вкладке “Журнал” в окне “Терминал”. Обратите внимание, что в этом окне есть и вкладка “Эксперты”. Здесь ведутся логи записей о работе экспертов, индикаторов и скриптов. Аналогичных записей на сервере брокера не ведется. Торговые команды, отдаваемые экспертами и скриптами, использующими торговые операции и результаты их выполнения также фиксируются, как и в случае с ручной торговлей, в “Журнале”. Например, напишем простенький скрипт на языке программирования MQL4 для MetaTrader:

    //+------------------------------------------------------------------+
    //|                                                     neworder.mq4 |
    //|                                         http://moneyinnetwork.ru |
    //|                                         http://moneyinnetwork.ru |
    //+------------------------------------------------------------------+
    #property copyright "http://moneyinnetwork.ru"
    #property link      "http://moneyinnetwork.ru"
    #property version   "1.00"
    #property strict
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //---
         RefreshRates();
         OrderSend(Symbol(),OP_BUY,0.01,Ask,30,0,0,NULL,0,0,clrRed);
      }
    //+------------------------------------------------------------------+

    Данный скрипт открывает ордер на покупку по текущей рыночной цене с допустимым проскальзыванием в 30 пунктов (5-ый знак, допустимое проскальзывание актуально для исполнения типа “инстант”, для “маркет” счетов этот параметр игнорируется). В результате исполнения данного скрипта, можно увидеть 5 записей логов на вкладке “Эксперты”, аналогичных следующим:

    5. 2016.12.13 23:32:49.684 Script neworder EURUSD,Daily: removed
    4. 2016.12.13 23:32:49.681 neworder EURUSD,Daily: uninit reason 0
    3. 2016.12.13 23:32:49.681 neworder EURUSD,Daily: open #12902588 buy 0.01 EURUSD at 1.06255 ok
    2. 2016.12.13 23:32:49.382 neworder EURUSD,Daily: initialized
    1. 2016.12.13 23:32:49.377 Script neworder EURUSD,Daily: loaded successfully

    и 4 записи логов на вкладке “Журнал”:

    4. 2016.12.13 23:32:49.684 Script neworder EURUSD,Daily: removed
    3. 016.12.13 23:32:49.681 '155382': order was opened : #12902588 buy 0.01 EURUSD at 1.06255 sl: 0.00000 tp: 0.00000
    2. 2016.12.13 23:32:49.383 '155382': order buy market 0.01 EURUSD sl: 0.00000 tp: 0.00000
    1. 2016.12.13 23:32:49.377 Script neworder EURUSD,Daily: loaded successfully

    Первая запись вкладки “Эксперты” говорит о том, что скрипт успешно загружен, вторая – инициализирован, третья – ордер успешно открыт, четвертая – скрипт деинициализирован, пятая – скрипт удален (выгружен). Соответственно, первая запись на вкладке “Журнал” говорит о том, что скрипт загружен, вторая – на сервер отправлена команда на открытие ордера по рынку, третья – получен ответ, что ордер открыт, четвертая – скрипт удален.

    Программирование на языке MQL4 для MetaTrader открывает перед трейдером (“любителем”) больше потенциальных возможностей для реализации каких-либо торговых систем, особенно, если анализ точек входа и выхода по которым требует сбора и обработки в короткий срок огромного количества аналитических данных, а также если для результата критична скорость отдачи торговых распоряжений (например, скальпинг или пипсовка).

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

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

    Одно из главных преимуществ программирования на языке MQL4 для MetaTrader – это возможность разрабатывать торговые системы и проводить анализ их эффективности на исторических данных.

    Поделиться в соц. сетях:
    Ответов в теме: 0 Просмотров темы: 2545

    Подписаться без комментирования