Вот мы и получили долгожданные MetaTrader 5 и MQL5
Я очень кратко пройду по некоторым моментам.
Рис. 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. Графические объекты позволяют создавать информационные панно
Есть маленькое неприятное событие: из индикаторов нельзя создавать объекты. Разработчики шли на это сознательно, и взамен мы получим быстродействие индикаторов. Приятная новость в том, что они прекрасно это понимают и, вероятно, сделают возможность запускать на одном чарте несколько экспертов. Тем самым можно будет создавать эксперты-индикаторы с объектами, без торговых функций. Такие эксперты можно создавать и сейчас – они просто будут работать как индикаторы. Но при необходимости сейчас можно выйти из положения, запустив на одном чарте торгующего эксперта, на другом запустить эксперта-индикатора, создающего объекты, и наладить между ними обмен.
К примеру, переложить свой индикатор пробоя с MQL4 на MQL5 мне удалось за несколько часов. Основная часть времени ушла на освоение функционала и отладку, при этом код стал короче.
Если говорить о самом терминале, то поражает количество таймфреймов, тут, мне кажется, даже перебор. Но обилие минутных таймфреймов, вероятно, обрадует тех, кто так давно об этом мечтал. Мечтатели о нестандартных таймфремах задумаются, остался один шаг до создания задаваемого произвольного таймфрейма, что, впрочем, считаю излишним. Способ хранения данных теперь только минутка, и нет проблем с синхронизацией разных таймфреймов - это очень важное технологическое решение.
В каталоге HISTORY теперь нет файлов по разным таймфреймам
Рис. 3. Вся история теперь хранится в одном файле.
Приятные нововведения в том, что теперь можно очищать логи
Рис. 4. Одним нажатием кнопки очищаем Журнал экспертов от ставших ненужными сообщений.
Это очень краткий обзор МТ5, я не могу описать все новшества системы за столь короткий период времени - старт тестирования прошел 9-9-2009. Это символическая дата, и я уверен, что это будет счастливым числом. И, как подозреваю, дата выбрана неслучайно. Всего несколько дней у меня на руках бета-версия терминала MetaTrader 5 и MQL5. Я не успел опробовать все, что в нем есть нового, но то, что есть, уже впечатляет.
Волшебники из MetaQuotes сделали великолепный продукт. Сам я - разработчик с 25 летним стажем, видел не один проект при пуске и могу с уверенностью сказать это.
С уважением
Юрий Зайцев
Skype: yurazyuraz
yzh@mail.ru
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования