English 中文 Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
Вот мы и получили долгожданные MetaTrader 5 и MQL5

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

MetaTrader 5Примеры | 1 декабря 2009, 13:51
5 297 0
Yuriy Zaytsev
Yuriy Zaytsev

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


Рис. 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() для обработки событий таймера (теперь не требуется зацикливать эксперт, чтобы он работал с заданной периодичностью, независящей от прихода тика);
  • OnTrade() - функция для обработки торговых событий - открытия, закрытия или измененияобъема торговой позиции;
  • OnChartEvent() - обработка событий мыши и клавиатуры на графике.

Кратко о них.

Функция 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(). Вызов функции происходит при нескольких событиях. Мне не удалось оттестировать каждое, но список событий впечатляет:

  • CHARTEVENT_KEYDOWN — событие нажатия клавиатуры;
  • CHARTEVENT_OBJECT_CLICK — событие щелчка мыши на графическом объекте, принадлежащего графику;
  • CHARTEVENT_OBJECT_DRAG — событие перемещения графического объекта при помощи мыши;
  • CHARTEVENT_OBJECT_ENDEDIT — событие окончания редактирования текста CHARTEVENT_CUSTOM+n — идентификатор пользовательского события
  • CHARTEVENT_CUSTOM_LAST — последний

В 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

Другие статьи автора

Использование библиотеки FANN2MQL в MetaTrader Использование библиотеки FANN2MQL в MetaTrader
Цель статьи - показать, как использовать библиотеку FANN2MQL для программирования нейронных сетей в MetaTrader на простом примере: обучение и распознавание простейших паттернов.
Используем нейронные сети в MetaTrader Используем нейронные сети в MetaTrader
В статье показано как применять нейронные сети в программах на MQL, используя свободно распространяемую библиотеку FANN.На примере стратегии с использованием индикатора MACD построен эксперт, использующий нейросетевую фильтрацию сделок, которая привела к улучшению характеристик торговой системы.
Проверка некоторых мифов: "Как торгуется азиатская сессия, так весь день и пойдет торговля" Проверка некоторых мифов: "Как торгуется азиатская сессия, так весь день и пойдет торговля"
Предлагается проверить некоторые распространенные утверждения - в данном случае проверяется утверждение о том, что "как торгуется азиатская сессия, так и идут торги весь день".
Переход на новые рельсы: пользовательские индикаторы в MQL5 Переход на новые рельсы: пользовательские индикаторы в MQL5
Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.