Вот мы и получили долгожданные MetaTrader 5 и MQL5

Yuriy Zaytsev | 1 декабря, 2009

Я очень кратко пройду по некоторым моментам.


Рис. 1. Это не Photoshop - это MQL5.

Практически все, что меня и многих других интересовало в MQL5 и MT5, разработчики реализовали и выполнили на высочайшем уровне

Основные базовые изменения MQL5 - это введения ООП (Объектно-ориентированное программирование). Я не стану останавливаться на ООП, просто отмечу, что для профессиональных программистов стало больше возможностей, а для тех, кто научился писать на MQL4 и не знает ООП, есть радостная новость: они могут вполне писать на MQL5 в стиле MQL4, не пользуясь ООП. Разница будет в функционале, который придется освоить заново.

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

SymbolInfoDouble(Symbol(),SYMBOL_BID);

Не существует часто используемых Low[0] или iLow ( Symbol(), PERIOD_D1, 0 ), но вы легко можете их воссоздать. Зато в функциях работы с историческими данными появилась возможность читать в память исторические данные от точки до точки, от одного конкретного бара до другого конкретного бара, или от указанного времени до указанного. Ранее чтение серии данных приводило к загрузке в память всего видимого диапазона, нужен он вам или нет, но он читался, и если имелась необходимость начитать M1, то она читалась от 1999 года( при наличии истории) до текущего дня, часа и минуты.

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

MqlRates rates_arrayG[];
Int Bar=30; // прочитать только 30 баров начиная с нулевого
iCopBar=CopyRates(Symbol(),PERIOD_M1,0,Bar,rates_arrayG);

Эти нововведения значительно экономят память и время одновременно.

Такое изменение функционала не пугает, просто необходимо время для освоения новых функций – аналогов.

Некоторые функциональные нововведения, которые я ждал от MQL:

Кратко о них.

Функция OnTimer() вызывается, если предварительно инициировать таймер в предопределенной функции OnInit (обработчике события инициализации эксперта).

Пример:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(1); //мы каждую секунду будем обращаться к OnTimer()
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit()
  {
   EventKillTimer(); // обязательно вызвать при выходе отмену обращения к таймеру
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   MqlDateTime str1;
   TimeGMT(str1); // новая функция получить время GMT
   Comment(str1.hour
           ,str1.min
           ,str1.sec
           ,str1.day
           ,str1.mon
           ,str1.year
           ,str1.day_of_year
           ,OrdersTotal()
           ,PositionsTotal()
           );
  }

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

Очень радует функция OnTrade(). Эта функция вызывается в момент, когда срабатывает любое из торговых событий: выставление ордера, срабатывание StopLoss или TakeProfit, изменение уровней stoploss или takeprofit, выставление/удаление отложенного ордера.

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

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

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

Новые графические объекты, кнопки, поля ввода. Управление графиками теперь стало фантастическим, можно даже вставлять картинки из файлов - для любителей нестандартных дизайнов большой простор для фантазии. Это не Photoshop, это возможности MQL5 и MetaTrader 5. Появились новые возможности, вы можете создавать свои кнопки и свои поля ввода, добавив, например, в интерфейс кнопку, которая закроет все открытые ордера. или быстрый бай или селл в один клик, с заранее выставленными параметрами стопа и тейка.

Рис. 2. Графические объекты позволяют создавать информационные панно

Рис. 2. Графические объекты позволяют создавать информационные панно

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

К примеру, переложить свой индикатор пробоя с MQL4 на MQL5 мне удалось за несколько часов. Основная часть времени ушла на освоение функционала и отладку, при этом код стал короче.

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

В каталоге HISTORY теперь нет файлов по разным таймфреймам

Рис. 3. Вся история теперь хранится в одном файле.

Приятные нововведения в том, что теперь можно очищать логи

Рис. 4. Одним нажатием кнопки очищаем Журнал экспертов от ставших ненужными сообщений.

Это очень краткий обзор МТ5, я не могу описать все новшества системы за столь короткий период времени - старт тестирования прошел 9-9-2009. Это символическая дата, и я уверен, что это будет счастливым числом. И, как подозреваю, дата выбрана неслучайно. Всего несколько дней у меня на руках бета-версия терминала MetaTrader 5 и MQL5. Я не успел опробовать все, что в нем есть нового, но то, что есть, уже впечатляет.

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

С уважением
Юрий Зайцев

Skype: yurazyuraz
yzh@mail.ru