Что нового в MetaTrader 5?

История обновлений десктопной, мобильной и веб-платформ

12 июня 2019
MetaTrader 5 build 2085: Интеграция с Python и массовые улучшения в тестере стратегий

Terminal

  1. Добавлено API для запроса данных из терминала MetaTrader 5 через приложения, использующие язык Python.

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

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



    Подключение

    1. Скачайте последнюю версию Python со страницы https://www.python.org/downloads/windows
    2. При установке Python отметьте чек-бокс "Add Python X.X to PATH%", чтобы можно было из командной строки запускать скрипты на Python.
    3. Установите модуль MetaTrader5 из командной строки
      pip install MetaTrader5
    4. Добавьте пакеты matplotlib и pytz
      pip install matplotlib
      pip install pytz

    Функции

    • MT5Initialize — устанавливает соединение с терминалом MetaTrader 5
    • MT5Shutdown — закрывает ранее установленное подключение к терминалу MetaTrader 5
    • MT5TerminalInfo — получает состояние и параметры подключенного терминала MetaTrader 5
    • MT5Version — возвращает версию терминала MetaTrader 5
    • MT5WaitForTerminal — ждет пока терминал MetaTrader 5 подключится к торговому серверу
    • MT5CopyRatesFrom — получает бары из терминала MetaTrader 5, начиная с указанной даты
    • MT5CopyRatesFromPos — получает бары из терминала MetaTrader 5, начиная с указанного индекса
    • MT5CopyRatesRange — получает бары в указанном диапазоне дат из терминала MetaTrader 5
    • MT5CopyTicksFrom — получает тики из терминала MetaTrader 5, начиная с указанной даты
    • MT5CopyTicksRange — получает тики за указанный диапазон дат из терминала MetaTrader 5


  2. Оптимизированы разделы "Маркет" и "Сигналы". Теперь витрины продуктов и сигналов работают до семи раз быстрее, делая работу со встроенными торговыми сервисами более комфортной.




  3. Добавлена поддержка "Маркета", "Сигналов" и "Поиска" в Wine. Теперь пользователи Linux и Mac OS имеют доступ к самому большому магазину торговых приложений и сервису автоматического копирования сделок.




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




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

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




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

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

  6. Расширены возможности оплаты сервисов MQL5.community через систему PayPal. Теперь она позволяет совершать покупки одним кликом.

    Как это работает
    В процессе покупки после авторизации своим аккаунтом в PayPal вам будет предложено разрешить дальнейшие платежи нашей компании:





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




    Если вы нажмете "Отменить и вернуться к MetaQuotes Software Corp.", вы продолжите совершать платежи как раньше, авторизуясь в PayPal вручную при каждой покупке.
    Сайт MQL5.com/платформа MetaTrader 5 не хранит ваши платежные реквизиты. Проверку данных в случае пополнения, покупки в Маркете или подписки на Сигнал проводит на своей стороне платежная система.
    Вы всегда можете отказаться от привязки аккаунта PayPal и покупать сервисы в обычном режиме.

  7. Массовые улучшения и оптимизация работы тестера стратегий.

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

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

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

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

    Статистика оптимизации в журнале
    Расширено журналирование процесса оптимизации — выводится более подробная статистика использования MQL5 Cloud Network, факт включения/отключения облачных агентов и т.д.

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

    MQL5 Cloud Network
    Оптимизирована работа облачных агентов тестирования. Теперь задания распределяются более эффективно.

  8. Встроенный календарь включает более 900 показателей по 18 крупнейшим экономикам мира: США, Евросоюзу, Японии, Великобритании и т.д. Все данные собираются в режиме реального времени из первоисточников, позволяя своевременно реагировать на мировую ситуацию и принимать взвешенные торговые решения.

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




    Выберите свою платформу и скачайте приложение Tradays:


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

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

    • Это позволяет избежать расхождения данных.
    • После импорта тиковых данных (при их достаточной полноте) можно не тратить время на импорт баров — терминал рассчитает их сам.

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

  10. Исправлено обновление информации в "Окне данных" при использовании перекрестия на открепленном графике.
  11. Исправлено сохранение тиковой истории. Ранее при наличии нескольких тиков в одной миллисекунде порядок сохранения тиков мог нарушаться.
  12. Исправлено построение графиков при слишком короткой (менее дня) ценовой истории на сервере.

MQL5

  1. Добавлена поддержка отладки MQL5-сервисов. Теперь вы можете проверять такие программы аналогично советникам и индикаторам.
  2. Добавлены новые типы расчета прибыли и маржи в перечисление ENUM_SYMBOL_CALC_MODE:

    • SYMBOL_CALC_MODE_EXCH_BONDS — расчет для биржевых облигаций.
    • SYMBOL_CALC_MODE_EXCH_STOCKS_MOEX — расчет для акций, торгуемых на Московской Бирже.
    • SYMBOL_CALC_MODE_EXCH_BONDS_MOEX — расчет для облигаций, торгуемых на Московской Бирже.

  3. Добавлена функция TesterDeposit, позволяющая эмулировать операции внесения средств на счет в процессе тестирования. Функция может быть полезна при проверке различных стратегий управления капиталом.
    bool  TesterDeposit(
       double money      // размер вносимой суммы
       );
  4. Теперь во время выполнения метода OnDeinit MQL5-программа не получает никаких событий от терминала. Ранее программы могли не успевать корректно завершить деинициализацию (например, удалить за собой все объекты) из-за получения других событий.
  5. Исправлены ошибки, возникавшие при изменении тиковой истории за текущий день у пользовательских торговых инструментов.
  6. Исправлена ошибка, приводившая к замедлению работы программы при использовании большого количества (десятки тысяч) графических объектов.
  7. Исправлено зависание терминала при частом обращении к торговой истории из MQL5-программ.
  8. Исправлена ошибка в работе функции iBarShift. При флаге "exact=false" и запросе за пределами данных возвращался номер самого старого бара, а не самого нового.

Tester

  1. Исправлено определение числа ядер на компьютерах с процессорами, имеющими несколько NUMA узлов.
  2. Добавлена возможность запуска тестирования и оптимизации с нулевым начальным депозитом, поскольку теперь вы можете эмулировать внесение средств во время тестирования при помощи новой функции TesterDeposit.

MetaEditor

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

Обновлена документация.

Обновление будет доступно через систему LiveUpdate.

21 февраля 2019
MetaTrader 5 build 2005: Экономический календарь, MQL5-программы в виде сервисов и API для языка R

Terminal

  1. Полностью обновлен встроенный экономический календарь.

    Экономический календарь — наша собственная разработка. В нем доступны более 600 показателей и индикаторов 13 крупнейших экономик мира: США, Евросоюза, Японии, Великобритании, Канады, Австралии, Китая и т.д. Все данные собираются в режиме реального времени из открытых источников.

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

    Также данные календаря теперь можно запрашивать из MQL5-программ. Более подробная информация об этом приведена ниже.




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

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

    Для управления сервисами в Навигатор добавлен отдельный подраздел:





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

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

    Выберите в навигаторе сервис и нажмите "Добавить сервис" в его контекстном меню. Будет открыт стандартный диалог MQL5-программы, где вы можете разрешить/запретить торговлю и доступ к сигналам, а также задать параметры.




    Для запуска и остановки экземпляра сервиса используйте его меню. Для управления всеми экземплярами, используйте меню самого сервиса.

  3. Добавлена система обучения.

    Теперь новички смогут легко научиться работать с платформой. Мы добавили более 100 интерактивных советов по ее основным функциям.

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

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




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




  5. Добавлено API для запроса данных из терминала MetaTrader 5 через приложения, использующие язык R.

    Для работы мы подготовили специальный пакет MetaTrader. В нем содержатся DLL для взаимодействия между R и терминалом MetaTrader 5, документация и вспомогательные r-файлы. Сейчас пакет находится в процессе регистрации в репозитории CRAN, и в ближайшее время станет доступен для скачивания и установки.




    Для установки пакета используйте следующую команду:
    R CMD INSTALL --build MetaTrader

    На текущий момент для запроса данных доступны следующие команды:

    • MT5Initialize — инициализация и установка соединения с терминалом MetaTrader 5. При выполнении команды при необходимости происходит запуск терминала.
    • MT5Shutdown — деинициализация и разрыв соединения с терминалом MetaTrader 5.
    • MT5Version — получение версии терминала MetaTrader 5.
    • MT5TerminalInfo — получение состояния и параметров подключения терминала к серверу брокера (номер счета и адрес сервера).
    • MT5WaitTerminal — ожидание соединения терминала MetaTrader 5 с сервером брокера.
    • MT5CopyTicksFrom(symbol, from, count, flags) — копирование тиков с указанной даты в указанном количестве. Дата указывается в миллисекундах с 1970.01.01.
    • MT5CopyTicksRange(symbol, from, to, flags) — копирование тиков из указанного периода дат. Даты указываются в миллисекундах с 1970.01.01.
    • MT5CopyRatesFrom(symbol, timeframe, from, count) — копирование минутных баров с указанной даты в указанном количестве. Дата указывается в секундах с 1970.01.01.
    • MT5CopyRatesFromPos(symbol, timeframe, start_pos, count) — копирование минутных баров с указанной позиции от последнего бара.
    • MT5CopyRatesFromRange(symbol, timeframe, date_from, date_to) — копирование баров из указанного периода дат. Даты указываются в секундах с 1970.01.01.

    В будущем список поддерживаемых команд будет расширен.

  6. Оптимизирован диалог закрытия торговой позиции встречной. Теперь его работа не замедляется при большом количестве открытых позиций.
  7. Исправлены ошибки расчета синтетических инструментов, приводившие к образованию пропусков данных.
  8. Теперь при удалении пользовательского инструмента удаляются файлы с его тиковой и баровой историей. Это позволяет избежать накапливания неиспользуемых данных на жестком диске.
  9. Исправлено отображение результатов поиска на мониторах High DPI.

MQL5

  1. Добавлен доступ к данным экономического календаря через MQL5-программы.

    Новые функции

    CalendarCountryById — получение описания страны по идентификатору.
    bool CalendarCountryById(
       const long           country_id,    // идентификатор страны
       MqlCalendarCountry&  country        // описание страны
       );
    CalendarEventById — получение описания события по идентификатору.
    bool CalendarEventById(
       const long           event_id,      // идентификатор события
       MqlCalendarEvent&    event          // описание события
       );
    CalendarValueById — получение описания значения события по идентификатору.
    bool CalendarValueById(
       const long           value_id,      // идентификатор значения
       MqlCalendarValue&    value          // описание значения
       );
    CalendarEventByCountry — получение массива доступных новостей по стране.
    bool CalendarEventByCountry(
       string               country_code,  // код страны
       MqlCalendarEvent&    events[]       // массив событий
       );
    CalendarEventByCurrency — получение массива доступных новостей по валюте, на которую они влияют.
    bool CalendarEventByCurrency(
       string               currency,      // валюта
       MqlCalendarEvent&    events[]       // массив событий
       );
    CalendarValueHistoryByEvent — получение массива значений за указанный период времени по идентификатору события.
    bool CalendarValueHistoryByEvent(
       ulong                event_id,      // идентификатор события
       MqlCalendarValue&    values[],      // массив значений
       datetime             datetime_from, // начальная дата
       datetime             datetime_to=0  // конечная дата
       );
    CalendarValueHistory — получение массива значений по всем событиям за заданный период времени с фильтрацией по стране и/или валюте.
    bool CalendarValueHistory(
       MqlCalendarValue&    values[],          // массив значений
       datetime             datetime_from,     // начало периода
       datetime             datetime_to=0,     // конец периода
       string               country_code=NULL, // код страны
       string               currency=NULL      // валюта
       );
    CalendarValueLastByEvent — получение массива последних значений события по идентификатору. Эта функция позволяет запрашивать только те значения, которые изменились с момента последнего запроса. Для этого используется ее in/out параметр "change_id".

    При каждом изменении базы данных календаря у него обновляется свойство "change_id" — идентификатор последнего изменения. При запросе данных вы указываете "change_id" и терминал возвращает вам события, появившиеся в календаре, начиная с этого момента, а также текущее значение "change_id", которое можно использовать для следующего запроса. При первом вызове функции укажите нулевой "change_id", функция при этом не вернет никаких событий, но передаст вам текущий "change_id" для последующих запросов.
    bool CalendarValueHistory(
       ulong                event_id,          // идентификатор события
       ulong&               change_id,         // идентификатор последнего изменения календаря
       MqlCalendarValue&    values[]           // массив значений
       );
    CalendarValueLast — получение массива последних значений по всем событиям с фильтрацией по стране и/или валюте. Эта функция позволяет запрашивать только те значения, которые изменились с момента последнего запроса. Аналогично CalendarValueLastByEvent, для запроса используется свойство "change_id".
    bool CalendarValueHistory(
       ulong                event_id,          // идентификатор события
       ulong&               change_id,         // идентификатор последнего изменения календаря
       MqlCalendarValue&    values[],          // массив значений
       string               country_code=NULL, // код страны
       string currency=NULL                    // валюта
       );

    Новые структуры

    MqlCalendarCountry — описание страны.
    struct MqlCalendarCountry
      {
       ulong             id;                        // идентификатор страны ISO 3166-1
       string            name;                      // текстовое название страны
       string            code;                      // кодовое имя страны ISO 3166-1 alpha-2
       string            currency;                  // код валюты страны
       string            currency_symbol;           // символ/знак валюты страны
       string            url_name;                  // имя страны, используемое в URL на сайте mql5.com
      };
    MqlCalendarEvent — описание события.
    struct MqlCalendarEvent
      {
       ulong                          id;           // идентификатор события
       ENUM_CALENDAR_EVENT_TYPE       type;         // тип события
       ENUM_CALENDAR_EVENT_SECTOR     sector;       // сектор, к которому относится событие
       ENUM_CALENDAR_EVENT_FREQUENCY  frequency;    // периодичность публикации события
       ENUM_CALENDAR_EVENT_TIMEMODE   time_mode;    // режим публикции события по времени
       ulong                          country_id;   // идентификатор страны
       ENUM_CALENDAR_EVENT_UNIT       unit;         // единица измерения значения события
       ENUM_CALENDAR_EVENT_IMPORTANCE importance;   // важность события
       ENUM_CALENDAR_EVENT_MULTIPLIER multiplier;   // множитель значения события
       uint                           digits;       // количество знаков после запятой в значении события
       string                         source_url;   // URL источника
       string                         event_code;   // код события
       string                         name;         // текстовое имя события на языке терминала
      };
    MqlCalendarValue — описание значения события.
    struct MqlCalendarValue
      {
       ulong             id;                        // идентификатор значения
       ulong             event_id;                  // идентификатор события
       datetime          time;                      // время и дата события
       datetime          period;                    // отчетный период события
       int               revision;                  // ревизия публикуемого индикатора по отношению к отчетному периоду
       long              actual_value;              // актуальное значение события
       long              prev_value;                // предыдущее значение события
       long              revised_prev_value;        // пересмотренное предыдущее значение события
       long              forecast_value;            // прогнозное значение события
       ENUM_CALENDAR_EVENT_IMPACRT impact_type;     // потенциальное влияние на курс валюты
      };

    Новые перечисления

    enum ENUM_CALENDAR_EVENT_FREQUENCY
      {
       CALENDAR_FREQUENCY_NONE            =0,   // не используется
       CALENDAR_FREQUENCY_WEEK            =1,   // неделя
       CALENDAR_FREQUENCY_MONTH           =2,   // месяц
       CALENDAR_FREQUENCY_QUARTER         =3,   // квартал
       CALENDAR_FREQUENCY_YEAR            =4,   // год
       CALENDAR_FREQUENCY_DAY             =5,   // день
      };
    
    enum ENUM_CALENDAR_EVENT_TYPE
      {
       CALENDAR_TYPE_EVENT                =0,   // событие(митинг, речь и т.д.)
       CALENDAR_TYPE_INDICATOR            =1,   // индикатор
       CALENDAR_TYPE_HOLIDAY              =2,   // праздник
      };
    
    enum ENUM_CALENDAR_EVENT_SECTOR
      {
       CALENDAR_SECTOR_NONE               =0,   // нет
       CALENDAR_SECTOR_MARKET             =1,   // рынок
       CALENDAR_SECTOR_GDP                =2,   // GDP
       CALENDAR_SECTOR_JOBS               =3,   // труд
       CALENDAR_SECTOR_PRICES             =4,   // цены
       CALENDAR_SECTOR_MONEY              =5,   // деньги
       CALENDAR_SECTOR_TRADE              =6,   // торговля
       CALENDAR_SECTOR_GOVERNMENT         =7,   // правительство
       CALENDAR_SECTOR_BUSINESS           =8,   // бизнес
       CALENDAR_SECTOR_CONSUMER           =9,   // потребитель
       CALENDAR_SECTOR_HOUSING            =10,  // жилье
       CALENDAR_SECTOR_TAXES              =11,  // налоги
       CALENDAR_SECTOR_HOLIDAYS           =12,  // праздники
      };
      
    enum ENUM_CALENDAR_EVENT_IMPORTANCE
      {
       CALENDAR_IMPORTANCE_NONE           =0,   // нет
       CALENDAR_IMPORTANCE_LOW            =1,   // низкая
       CALENDAR_IMPORTANCE_MODERATE       =2,   // средняя
       CALENDAR_IMPORTANCE_HIGH           =3,   // высокая
      };
    
    enum ENUM_CALENDAR_EVENT_UNIT
      {
       CALENDAR_UNIT_NONE                 =0,   // нет
       CALENDAR_UNIT_PERCENT              =1,   // проценты
       CALENDAR_UNIT_CURRENCY             =2,   // национальная валюта
       CALENDAR_UNIT_HOUR                 =3,   // количество часов
       CALENDAR_UNIT_JOB                  =4,   // количество рабочих мест
       CALENDAR_UNIT_RIG                  =5,   // количество вышек
       CALENDAR_UNIT_USD                  =6,   // доллары США
       CALENDAR_UNIT_PEOPLE               =7,   // число людей
       CALENDAR_UNIT_MORTGAGE             =8,   // количество ипотечных кредитов
       CALENDAR_UNIT_VOTE                 =9,   // число голосов
       CALENDAR_UNIT_BARREL               =10,  // количество баррелей
       CALENDAR_UNIT_CUBICFEET            =11,  // объем в кубических футах
       CALENDAR_UNIT_POSITION             =12,  // количество рабочих мест
       CALENDAR_UNIT_BUILDING             =13   // количество строений
      };
      
    enum ENUM_CALENDAR_EVENT_MULTIPLIER
      {
       CALENDAR_MULTIPLIER_NONE           =0,   // нет    
       CALENDAR_MULTIPLIER_THOUSANDS      =1,   // тысячи
       CALENDAR_MULTIPLIER_MILLIONS       =2,   // миллионы
       CALENDAR_MULTIPLIER_BILLIONS       =3,   // миллиарды
       CALENDAR_MULTIPLIER_TRILLIONS      =4,   // триллионы
      };
      
    enum ENUM_CALENDAR_EVENT_IMPACRT
      {
       CALENDAR_IMPACT_NA                 =0,   // неизвестно
       CALENDAR_IMPACT_POSITIVE           =1,   // положительное
       CALENDAR_IMPACT_NEGATIVE           =2,   // отрицательное
      };
    
    enum ENUM_CALENDAR_EVENT_TIMEMODE
      {
       CALENDAR_TIMEMODE_DATETIME         =0,   // источник публикует точное время
       CALENDAR_TIMEMODE_DATE             =1,   // событие занимает весь день
       CALENDAR_TIMEMODE_NOTIME           =2,   // источник не публикует время по событию
       CALENDAR_TIMEMODE_TENTATIVE        =3,   // источник не публикует заранее точного времени события, только день, время уточняется по факту наступления события
      };

    Новые коды ошибок

    ERR_CALENDAR_MORE_DATA             =5400,   // массив мал для всего результата (отданы значения, которые поместились в массив)
    ERR_CALENDAR_TIMEOUT               =5401,   // превышен таймаут ожидания ответа на запрос данных из календаря
    ERR_CALENDAR_NO_DATA               =5402,   // данные не обнаружены

  2. Исправлена и значительно ускорена работа с тиковой и баровой историей.
  3. Исправлены и значительно ускорены функции изменения тиковой и баровой истории у пользовательских торговых инструментов CustomTicks* и CustomRates*.
  4. Добавлены новые функции преобразования данных.

    CharArrayToStruct — копирует массив типа uchar в POD-структуру.
    bool  CharArrayToStruct(
       void&         struct_object,    // структура
       const uchar&  char_array[],     // массив
       uint          start_pos=0       // начальная позиция в массиве
       );
    StructToCharArray — копирует POD-структуру в массив типа uchar.
    bool  StructToCharArray(
       const void&  struct_object,     // структура
       uchar&       char_array[],      // массив
       uint         start_pos=0        // начальная позиция в массиве
       );

  5. Добавлена функция MathSwap для смены порядка байт в значении ushort, uint и ulong.
    ushort MathSwap(ushort value);
    uint   MathSwap(uint   value);
    ulong  MathSwap(ulong  value);

  6. Добавлены сетевые функции для создания TCP-соединений с удаленными хостами через системные сокеты:

    • SocketCreate — создает сокет с указанными флагами и возвращает его хэндл
    • SocketClose — закрывает сокет
    • SocketConnect — выполняет подключение к серверу с контролем таймаута
    • SocketIsConnected — проверяет, подключен ли сокет в текущий момент времени
    • SocketIsReadable — получает количество байт, которое можно прочитать из сокета
    • SocketIsWritable — проверяет, возможна ли запись данных в сокет в текущий момент времени
    • SocketTimeouts — устанавливает таймауты получения и отправки данных для системного объекта сокета
    • SocketRead — читает данные из сокета
    • SocketSend — записывает данные в сокете
    • SocketTlsHandshake — инициирует защищенное TLS (SSL)-соединение с указанным хостом по протоколу TLS Handshake
    • SocketTlsCertificate — получает данные о сертификате, используемом для защиты сетевого соединения
    • SocketTlsRead — читает данные из защищенного TLS-соединения
    • SocketTlsReadAvailable — читает все доступные данные из защищенного TLS-соединения
    • SocketTlsSend — отправляет данные через защищенное TLS-соединение

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

    Для работы с сетевыми функциями добавлены новые коды ошибок:

    • ERR_NETSOCKET_INVALIDHANDLE (5270) — в функцию передан неверный хэндл сокета
    • ERR_NETSOCKET_TOO_MANY_OPENED (5271) — открыто слишком много сокетов (максимум 128)
    • ERR_NETSOCKET_CANNOT_CONNECT (5272) — ошибка соединения с удаленным хостом
    • ERR_NETSOCKET_IO_ERROR (5273) — ошибка отправки/получения данных из сокета
    • ERR_NETSOCKET_HANDSHAKE_FAILED (5274) — ошибка установления защищенного соединения (TLS Handshake)
    • ERR_NETSOCKET_NO_CERTIFICATE (5275) — отсутствуют данные о сертификате, которым защищено подключение

  7. Добавлены новые функции для работы со строками:

    StringReserve — резервирует в памяти для строки буфер указанного размера.
    bool  StringReserve(
       string&        string_var,          // строка
       uint           new_capacity         // размер буфера для хранения строки
       );
    StringSetLength — устанавливает для строки указанную длину в символах.
    bool  StringSetLength(
       string&        string_var,          // строка
       uint           new_length           // новая длина строки
       );

  8. Добавлены новые функции для работы с массивами:

    ArrayRemove — удаляет из массива указанное число элементов, начиная с указанного индекса.
    bool  ArrayRemove(
       void&         array[],              // массив любого типа
       uint          start,                // с какого индекса начинаем удалять
       uint          count=WHOLE_ARRAY     // количество элементов
       );
    ArrayInsert — вставляет в массив-приемник из массива-источника указанное число элементов, начиная с указанного индекса.
    bool  ArrayInsert(
       void&         dst_array[],          // массив-приемник
       const void&   src_array[],          // массив источник
       uint          dst_start,            // индекс в массиве-приемнике для вставки
       uint          src_start=0,          // индекс в массиве-источнике для копирования
       uint          count=WHOLE_ARRAY     // количество вставляемых элементов
       );
    ArrayReverse — разворачивает в массиве указанное число элементов, начиная с указанного индекса.
    bool  ArrayReverse(
       void&         array[],              // массив любого типа
       uint          start=0,              // с какого индекса начинаем переворачивать массив
       uint          count=WHOLE_ARRAY     // количество элементов
       );

  9. В функции CustomRatesUpdate, CustomRatesReplace, CustomTicksAdd и CustomTicksReplace добавлен параметр "uint count" для указания количества элементов передаваемого массива, которые будут использованы. По умолчанию для параметра используется значение WHOLE_ARRAY. Оно означает, что будет использован весь массив.
  10. Добавлена функция CustomBookAdd — передает состояние стакана цен по пользовательскому инструменту. Функция позволяет транслировать стакан цен так, как если бы он приходил от сервера брокера.
    int  CustomBookAdd(
       const string        symbol,            // имя символа
       const MqlBookInfo&  books[]            // массив с описаниями элементов стакана цен
       uint                count=WHOLE_ARRAY  // количество элементов, которые будут использованы
       );
  11. Добавлена перегрузка функции CustomSymbolCreate, позволяющая создать пользовательский торговый инструмент на основе уже имеющегося. После создания любое свойство символа можно поменять на нужное значение соответствующими функциями.
    bool  CustomSymbolCreate(
       const string        symbol_name,       // имя пользовательского символа
       const string        symbol_path="",    // название группы, в которой будет создан символ
       const string        symbol_origin=NULL // имя символа, на основе которого будет создан пользовательский символ
       );
    Имя символа, из которого будут скопированы свойства создаваемого пользовательского символа, указывается в параметре "symbol_origin".

  12. Обновлена функция StringToTime, преобразующая строку с датой/временем в значение типа datetime. Теперь она поддерживает следующие форматы дат:

    • yyyy.mm.dd [hh:mi]
    • yyyy.mm.dd [hh:mi:ss]
    • yyyymmdd [hh:mi:ss]
    • yyyymmdd [hhmiss]
    • yyyy/mm/dd [hh:mi:ss]
    • yyyy-mm-dd [hh:mi:ss]

  13. В перечисление ENUM_TERMINAL_INFO_INTEGER добавлено свойство TERMINAL_VPS — признак того, что терминал запущен на виртуальном сервере MetaTrader Virtual Hosting (MetaTrader VPS). Если программа запущена на хостинге, вы можете отключать все ее визуальные функции, поскольку на виртуальном сервере отсутствует графический пользовательский интерфейс.
  14. В перечисление ENUM_SYMBOL_INFO_INTEGER добавлено новое свойство SYMBOL_EXIST — признак того, что символ с таким именем существует.
  15. Исправлена типизация при использовании предварительного объявления шаблонной функции.
  16. Добавлена переинициализация индикаторов при смене торгового счета.
  17. Оптимизирована работа функции StringSplit.
  18. Исправлены ошибки в стандартной библиотеке.

Tester

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

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

  2. Отключена возможность тестирования и оптимизации экспертов через MQL5 Cloud Network в режиме использования реальных тиков. Такой режим можно использовать только на локальных агентах и фермах в локальной сети.
  3. Улучшена работа с индикаторами при визуальном тестировании. Теперь ценовой график и индикаторные линии отрисовываются синхронно даже при максимальной скорости визуализации.
  4. Оптимизированы и значительно ускорены тестирование и оптимизация.
  5. Исправлена отладка индикаторов на исторических данных. Теперь функции OnInit и OnDeinit индикаторов можно отлаживать корректно.
  6. Ускорен доступ к историческим данным при тестировании мультивалютных экспертов.
  7. Исправлены ошибки, приводящие к зависанию визуального тестера при отладке на исторических данных.
  8. Ускорен запуск проходов оптимизации при обработке агентом пакета заданий.
  9. Изменена политика раздачи пакетов заданий агентам тестирования. Размер пакета был увеличен, что привело к значительному снижению накладных расходов на сетевые операции.
  10. Изменено поведение опции использования локальных, сетевых и облачных агентов. Теперь при отключении этих опций уже выданные задания обрабатываются до конца, а новые перестают выдаваться. Ранее эти опции работали аналогично команде "Отключить", которая останавливала работу агентов сразу.




MetaEditor

  1. Добавлена поддержка не-ANSI символов в отладчике. Теперь наблюдаемые выражения отображаются корректно, даже если имя переменной указано кириллицей.
  2. Исправлено отображение результатов поиска на мониторах High DPI.

Добавлен перевод пользовательского интерфейса на Хорватский язык.

Обновлена документация.

26 октября 2018
MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5

Terminal

  1. Теперь вы можете выносить графики финансовых инструментов за пределы окна торгового терминала.

    Это удобно при работе с несколькими мониторами. Например, на одном можно расположить основное окно платформы и следить за состоянием счета, а на другом — графики для оценки ситуации на рынке. Чтобы отделить график от терминала, отключите опцию "Закреплен" в его контекстном меню. После этого расположите график на нужном мониторе.





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

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

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




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

    Минимальный объем и шаг его изменения зависят от настроек финансового инструмента на стороне брокера.




  4. В окно "Инструменты" добавлена вкладка статей, опубликованных на MQL5.community. Более 600 подробных материалов о разработке торговых стратегий на MQL5 теперь доступны прямо в терминале. Новые статьи выходят каждую неделю.




  5. Добавлена поддержка расширенной авторизации с использованием сертификатов при работе под Wine.
  6. Исправлено отображение стакана цен при ограничении его глубины одним уровнем.
  7. На панель инструментов "Стандартная" добавлена команда "Сохранить как рисунок". Делать снимки графиков и делиться ими в сообществе стало еще легче.




  8. Исправлено применение сдвига времени при импорте баров и тиков. Ранее в некоторых случаях сдвиг не применялся.




  9. Исправлено подвисание терминала при большом количестве новостей экономического календаря.

MQL5

  1. Добавлена нативная поддержка .NET библиотек с "умным" импортом функций. Теперь библиотеки .NET можно использовать без написания специальных оберток — MetaEditor берет это на себя.

    Для работы с функциями .NET библиотеки достаточно импортировать саму DLL без указания конкретных функций. MetaEditor автоматически импортирует все функции, с которыми возможна работа:
    • Простые структуры (POD, plain old data) — структуры, которые содержат только простые типы данных.
    • Публичные статические функции, в параметрах которых используются только простые типы и структуры POD или их массивы

    Для вызова функций из библиотеки просто импортируйте ее:
    #import "TestLib.dll"
    
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       int x=41;
       TestClass::Inc(x);
       Print(x);
      }
    C# код функции Inc класса TestClass выглядит следующим образом:
    public class TestClass
    {
       public static void Inc(ref int x)
       {
        x++;
       }
    }
    В результате выполнения скрипт вернет значение 42.

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

  2. В стандартную библиотеку добавлена поддержка работы с функциями WinAPI. Теперь для использования функций операционной системы в MQL5-программе нет необходимости вручную импортировать библиотеки и описывать сигнатуры функций. Достаточно подключить заголовочный файл из каталога MQL5\Include\WinAPI.

    Функции WinAPI сгруппированы в отдельных файлах по назначению:

    • libloaderapi.mqh — работа с ресурсами
    • memoryapi.mqh — работа с памятью
    • processenv.mqh — работа с окружением
    • processthreadsapi.mqh — работа с процессами
    • securitybaseapi.mqh — работа с системой безопасности ОС
    • sysinfoapi.mqh — получение системной информации
    • winbase.mqh — общие функции
    • windef.mqh — константы, структуры и перечисления
    • wingdi.mqh — работа с графическими объектами
    • winnt.mqh — работа с исключениями
    • winreg.mqh — работа с реестром
    • winuser.mqh — управление окнами и интерфейсом
    • errhandlingapi.mqh — обработка ошибок
    • fileapi.mqh — работа с файлами
    • handleapi.mqh — работа с хэндлами
    • winapi.mqh — подключение всех функций (заголовочных файлов WinAPI)

    Обвязка работает только с 64-битной архитектурой.

  3. Добавлена поддержка спецификаторов inline, __inline, __forceinline при синтаксическом анализе кода. Наличие этих спецификаторов в коде не будет вызывать ошибки, но и не будет влиять на компиляцию. На данный момент это позволит легче переносить С++ код в MQL5.
    Более подробная информация о спецификаторах доступна в MSDN.

  4. Проведена существенная оптимизация исполнения MQL5-программ. В некоторых случаях прирост производительности может достигать 10%. Чтобы получить прирост скорости, перекомпилируйте ваши программы в новой версии MetaEditor.
    К сожалению, дополнительная оптимизация привела к потере совместимости новых программ с предыдущими версиями терминала. Все программы, скомпилированные в MetaEditor версии 1912 и выше, не будут запускаться в терминалах версии ниже 1912. При этом программы, скомпилированные ранее в предыдущих версиях MetaEditor, будут в работать в новых терминалах.

  5. Проведена большая работа по оптимизации множества функций MQL5.
  6. Добавлены новые свойства для прикрепления/открепления графиков от основного окна терминала и управления их положением.

    В перечисление ENUM_CHART_PROPERTY_INTEGER добавлены:

    • CHART_IS_DOCKED — окно графика закреплено. Если установить значение false, то график можно перетащить за пределы терминала.
    • CHART_FLOAT_LEFT — левая координата открепленного графика относительно виртуального экрана.
    • CHART_FLOAT_TOP — верхняя координата открепленного графика относительно виртуального экрана.
    • CHART_FLOAT_RIGHT — правая координата открепленного графика относительно виртуального экрана.
    • CHART_FLOAT_BOTTOM — нижняя координата открепленного графика относительно виртуального экрана.

    В перечисление ENUM_TERMINAL_INFO_INTEGER добавлены:

    • TERMINAL_SCREEN_LEFT — левая координата виртуального экрана. Виртуальным экраном является прямоугольник, охватывающий все мониторы. Если в системе имеются два монитора и их порядок задан справа налево, то левая координата виртуального экрана может оказаться на границе двух мониторов.
    • TERMINAL_SCREEN_TOP — верхняя координата виртуального экрана.
    • TERMINAL_SCREEN_WIDTH — ширина терминала.
    • TERMINAL_SCREEN_HEIGHT — высота терминала.
    • TERMINAL_LEFT — левая координата терминала относительно виртуального экрана.
    • TERMINAL_TOP — верхняя координата терминала относительно виртуального экрана.
    • TERMINAL_RIGHT — правая координата терминала относительно виртуального экрана.
    • TERMINAL_BOTTOM — нижняя координата терминала относительно виртуального экрана.

  7. Добавлено поле volume_real в структуры MqlTick и MqlBookInfo. Оно предназначено для работы с объемом повышенной точности. Значение volume_real имеет больший приоритет по сравнению с volume. Сервер будет использовать именно это значение, если оно указано.

    struct MqlTick
      {
       datetime         time;            // Время последнего обновления цен
       double           bid;             // Текущая цена Bid
       double           ask;             // Текущая цена Ask
       double           last;            // Текущая цена последней сделки (Last)
       ulong            volume;          // Объем для текущей цены Last
       long             time_msc;        // Время последнего обновления цен в миллисекундах
       uint             flags;           // Флаги тиков
       double           volume_real;     // Объем для текущей цены Last c повышенной точностью
      };

    struct MqlBookInfo
      {
       ENUM_BOOK_TYPE   type;            // тип заявки из перечисления ENUM_BOOK_TYPE
       double           price;           // цена
       long             volume;          // объем
       double           volume_real;     // объем с повышенной точностью
      };

  8. В перечисление ENUM_SYMBOL_INFO_DOUBLE добавлены новые свойства:

    • SYMBOL_VOLUME_REAL — объем последней совершенной сделки;
    • SYMBOL_VOLUMEHIGH_REAL — максимальное значение объема совершенной сделки за текущие сутки;
    • SYMBOL_VOLUMELOW_REAL — минимальное значение объема совершенной сделки за текущие сутки.

    Для получения этих свойств используйте функцию SymbolInfoDouble.

  9. В перечисление ENUM_MQL_INFO_INTEGER добавлено свойство MQL_FORWARD — признак того, что программа находится в режиме форвард-тестирования.
  10. Для структур добавлено свойство pack( integer_value ). Оно позволяет задать выравнивание расположения полей внутри структуры, это бывает необходимо при работе с DLL. Для integer_value возможны значения 1, 2, 4, 8 и 16.
    Если свойство не определено, по умолчанию используется вырванивание в 1 байт — pack(1).

    Пример использования:
    //+------------------------------------------------------------------+
    //| Default packing                                                  |
    //+------------------------------------------------------------------+
    struct A
      {
       char              a;
       int               b;
      };
    //+------------------------------------------------------------------+
    //| Specified packing                                                |
    //+------------------------------------------------------------------+
    struct B pack(4)
      {
       char              a;
       int               b;
      };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       Print("sizeof(A)=",sizeof(A));
       Print("sizeof(B)=",sizeof(B));
      }
    //+------------------------------------------------------------------+
    Вывод:
    sizeof(A)=5
    sizeof(B)=8
    Более подробная информация о выравнивании в структурах доступно в MSDN.

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

    Для следующего кода:
    enum Main
      {
       PRICE_CLOSE_,
       PRICE_OPEN_
      };
    
    input Main Inp=PRICE_CLOSE;
    //+------------------------------------------------------------------+
    //| Start function                                                   |
    //+------------------------------------------------------------------+
    void OnStart()
      {
      }
    Компилятор выдаст предупреждение:
    implicit conversion from 'enum ENUM_APPLIED_PRICE' to 'enum Main'
    'Main::PRICE_OPEN_' instead of 'ENUM_APPLIED_PRICE::PRICE_CLOSE' will be used
    Ранее в этом случае выдавалась ошибка:
    'PRICE_CLOSE' - cannot convert enum
    При неправильном использовании перечислений в параметрах функций компилятор по-прежнему будет выдавать ошибку.

  12. Исправлены ошибки компиляции шаблонных функций. Теперь при использовании перегруженных шаблонных функций инстанцируется только нужная перегрузка, а не все имеющиеся.
    class X {  };
    
    void f(int)  {  }
      
    template<typename T>
    void a(T*) { new T(2); }  // ранее в этом месте компилятор выдавал ошибку
      
    template<typename T>
    void a()  { f(0); }
      
      
    void OnInit()  { a<X>(); }  

  13. Оптимизированы некоторые случаи доступа к тиковой истории через функции CopyTicks*.
  14. Добавлена новая функция TesterStop, которая позволяет досрочно завершить тестирование/проход оптимизации. При ее вызове вся накопленная торговая статистика и результат OnTester передаются в клиентский терминал как при штатном заврешении тестирования/оптимизации.
  15. Добавлено новое свойство для пользовательских индикаторов #property tester_everytick_calculate. Оно используется в тестере стратегий и позволяет принудительно влючить расчет индикаторов на каждом тике.

Tester

  1. Теперь при невизуальном тестировании/оптимизации все используемые индикаторы (стандартные и пользовательские) рассчитываются только по запросу данных. Исключение составляют индикаторы, содержащие вызовы функции EventChartCustom и использующие обработчик OnTimer. Ранее в тестере стратегий при приходе любого тика (даже от чужого инструмента) все индикаторы рассчитывались безусловно. Нововведение позволило существенно ускорить тестирование и оптимизацию.

    Чтобы принудительно включить расчет индикаторов на каждом тике, добавьте для программы свойство #property tester_everytick_calculate.

    Индикаторы, скомпилированные предыдущими версиями компилятора, будут рассчитываться как раньше — на каждом тике.

  2. Исправлен учет точности валюты депозита при тестировании/оптимизации и формировании соответствующих отчетов.
  3. Оптимизирована и ускорена работа тестера стратегий.
  4. Исправлен ряд ошибок тестирования и оптимизации.

MetaEditor

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

Обновлена документация.

6 июля 2018
MetaTrader 5 build 1880: расчет полной истории синтетических инструментов

Терминал

  1. Добавлен расчет ценовой истории синтетических инструментов на всю доступную глубину данных.

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




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

    • EURUSD с историей до 2009.01.01
    • USDJPY с историей до 2012.06.01
    • EURJPY с историей до 2014.06.01

    В этом случае история синтетического инструмента будет рассчитана только с 2014.06.01 по настоящий момент. Дополнительно от этой даты будет отброшено еще 100 минут для обеспечения целостности расчета (при отсутствии отдельного минутного бара в истории в расчете используется бар за предыдущую минуту).

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

MQL5

  1. Добавлено свойство ACCOUNT_CURRENCY_DIGITS — число знаков после запятой у валюты депозита счета. Для его получения используйте функцию AccountInfoInteger. Свойство может быть использовано при самостоятельном расчете прибыли для нормализации полученных значений.
  2. Исправлена задержка выполнения Copy-функций и i-функций при работе с недельным таймфреймом.
  3. Исправлены ошибки в работе функции WebRequest.

Tester

  1. Добавлена возможность одиночного тестирования эксперта после загрузки результатов оптимизации из кэш-файла.
  2. Ускорена начальная закачка ценовой истории локальными агентами тестирования.

Обновлена документация.

26 июня 2018
MetaTrader 5 build 1870: добавление символов в Обзор рынка по ISIN

Терминал

  1. В окно "Обзор рынка" добавлен поиск инструментов по международному идентификационному код ценной бумаги (ISIN). Теперь инструменты можно добавлять тремя способами: по имени, по описанию и по ISIN.



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

MQL5

  1. Исправлена передача пользовательских HTTP-заголовков в функции WebRequest.
  2. Исправлено поведение функции Bars при указании одинаковой даты в качестве начала и конца диапазона. Теперь при наличии бара она возвращает 1. Ранее в этом случае функция безусловно возвращала 0.

Tester

  1. Исправлен запуск одиночного тестирования в визуальном режиме после форвард-оптимизации.
  2. Исправлена сортировка результатов оптимизации. Теперь она учитывает проходы с некорректными входными параметрами (INIT_INCORRECT_PARAMETERS) и с отсутствующим фактором прибыльности.
  3. Исправлен пересчет графика генетической оптимизации после смены критерия оптимизации.

Обновлена документация.

15 июня 2018
MetaTrader 5 build 1860: функции для работы с барами в MQL5 и улучшения в тестере стратегий

Терминал

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

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

    Чтобы помочь начинающим трейдерам, в диалог добавлены описания типов счетов. Также в связи с обновлением General Data Protection Regulation (GDPR) при открытии счета теперь могут показываться ссылки на различные соглашения и политики брокерских компаний:

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

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

  3. В историю позиций добавлено отображение значений Стоп Лосс и Тейк Профит. Они заполняются в соответствии со значениями Стоп Лосс и Тейк Профит сделок, открывающих и закрывающих соответствующие позиции.

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

  5. Оптимизировано и значительно ускорено отображение стакана цен в расширенном режиме с включенным показом спреда.
  6. Оптимизирована обработка результатов выполнения торговых запросов. В некоторых случаях это может дать значительное ускорение обработки.
  7. Исправлена ошибка работы Трейлинг Стопа, в некоторых случаях приводившая к отправке нескольких запросов на изменение уровня Стоп Лосс у одной позиции.
  8. Исправлена установка минимального и максимального объема, а также шага объема в свойствах пользовательских инструментов.
  9. Исправлена ошибка, из-за которой опция "Фиксировать масштаб" не учитывалась при применении шаблона к графику торгового инструмента.
  10. Исправлена ошибка, в некоторых случаях приводившая к некорректному накоплению тиковой истории.

MQL5

  1. Увеличена скорость работы MQL5-программ за счет дополнительной оптимизации исходного кода при компиляции. Чтобы получить прирост скорости, перекомпилируйте ваши программы в новой версии MetaEditor.
    К сожалению, дополнительная оптимизация привела к потере совместимости новых программ с предыдущими версиями терминала. Все программы, скомпилированные в MetaEditor версии 1860 и выше, не будут запускаться в терминалах версии ниже 1860. При этом программы, скомпилированные ранее в предыдущих версиях MetaEditor, будут в работать в новых терминалах.
  2. Добавлены функции iTime, iOpen, iHigh, iLow, iClose, iVolume, iBars, iBarShift, iLowest, iHighest, iRealVolume, iTickVolume, iSpread. Эти функции аналогичны используемым в MQL4. Таким образом, пользователям будет проще переносить код торговых программ в платформу пятого поколения.

    Ранее большинство задач, решаемых этими функциями, можно было легко выполнить при помощи функций Copy*. Однако для поиска максимальных/минимальных значений на графике и поиска баров по времени пользователю требовалось реализовывать собственные функции. Теперь это можно легко выполнить функциями iHighest, iLowest и iBarShift.

    iTime
    Возвращает значение времени открытия бара (указанного параметром shift) соответствующего графика.
    datetime  iTime(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

    iOpen
    Возвращает значение цены открытия бара (указанного параметром shift) соответствующего графика.
    double  iOpen(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

    iHigh
    Возвращает значение максимальной цены бара (указанного параметром shift) соответствующего графика.
    double  iHigh(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

    iLow
    Возвращает значение минимальной цены бара (указанного параметром shift) соответствующего графика.
    double  iLow(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

    iClose
    Возвращает значение цены закрытия бара (указанного параметром shift) соответствующего графика.
    double  iClose(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

    iVolume
    Возвращает значение тикового объема бара (указанного параметром shift) соответствующего графика.
    long  iVolume(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

    iBars
    Возвращает количество баров в истории по соответствующему символу и периоду.
    int  iBars(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe        // период
       );

    iBarShift
    Поиск бара по времени. Функция возвращает индекс бара, в который попадает указанное время.
    int  iBarShift(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       datetime         time,            // время
       bool             exact=false      // режим
       );

    iLowest
    Возвращает индекс наименьшего найденного значения (смещение относительно текущего бара) соответствующего графика.
    int  iLowest(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              type,            // идентификатор таймсерии
       int              count,           // число элементов
       int              start            // индекс
      );

    iHighest
    Возвращает индекс наибольшего найденного значения (смещение относительно текущего бара) соответствующего графика.
    int  iHighest(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              type,            // идентификатор таймсерии
       int              count,           // число элементов
       int              start            // индекс
      );

    iRealVolume
    Возвращает значение реального объема бара (указанного параметром shift) соответствующего графика.
    long  iRealVolume(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

    iTickVolume
    Возвращает значение тикового объема бара (указанного параметром shift) соответствующего графика.
    long  iTickVolume(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

    iSpread
    Возвращает значение спреда бара (указанного параметром shift) соответствующего графика.
    long  iSpread(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

  3. Добавлена функция TesterHideIndicators. Она задает режим показа/скрытия индикаторов, которые используются в эксперте. Функция предназначена для управления видимостью используемых индикаторов только при тестировании. Укажите флаг true, если необходимо скрывать создаваемые индикаторы, иначе false.
    void  TesterHideIndicators(
       bool      hide     // флаг
       );
  4. Добавлена генерация события CHARTEVENT_CLICK при нажатии мышью на торговых уровнях графика.
  5. Исправлена и оптимизирована работа функций CopyTicks.
  6. Исправлено значение, отдаваемое функцией SymbolInfoDouble для свойства SYMBOL_TRADE_LIQUIDITY_RATE.
  7. Исправлена ошибка копирования строковых массивов с пересекающейся областью памяти.
  8. Исправлена ошибка выделения строкового массива в функции FileReadArray.
  9. Исправлен ряд ошибок в стандартной библиотеке MQL5.

Tester

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

    Изменения в формате хранения кэша оптимизации

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

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

    Просмотр результатов ранее выполненных оптимизаций

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

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

    Пересчет критерия оптимизации на ходу

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

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

    Как использовать кэш оптимизации вручную

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

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

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




  3. Убран запрет на использование OpenCL в агентах тестирования. Ранее OpenCL-устройства можно было использовать только при тестировании на локальных агентах. Теперь агентам разрешено использовать все доступные OpenCL-устройства (процессор, видеокарту) при работе в локальной сети и в MQL5 Cloud Network.

MetaEditor

  1. Оптимизирована и ускорена работа с версионным хранилищем данных MQL5 Storage.
  2. Исправлено возобновление отладки после приостановки в MQH-файле.
  3. Исправлены ошибки подсветки исходного кода в редакторе.
  4. Исправлена ошибка перехода по результатам поиска.
  5. Исправлена массовая замена текста. В некоторых случаях заменялось только первое вхождение заменяемой последовательности вместо всех.

Обновлена документация.

18 января 2018
MetaTrader 5 build 1755

Terminal

  1. Исправлена ошибка, из-за которой терминал и MetaEditor блокировали выключение и перезагрузку Windows.
  2. Исправлено выставление отступа графика при применении шаблона.

MQL5

  1. Исправлены ошибки, приводившие к замедлению компиляции в некоторых условиях.

Исправления по крешлогам.

12 января 2018
MetaTrader 5 build 1745

MetaTrader 5 build 1745 — последняя версия торговой платформы, которая поддерживает Microsoft Windows XP/2003/Vista.

Несколько месяцев назад мы уже сообщали о завершении поддержки старых версий операционных систем. Windows 2003, Windows Vista и в особенности Microsoft Windows XP являются устаревшими. Microsoft прекратила поддержку Windows XP 3 года назад, так как ввиду технических ограничений эта система не позволяет в полной мере реализовать потенциальные возможности аппаратного обеспечения.

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

Минимальной версией для работы MetaTrader 5 является Windows 7, но мы настоятельно рекомендуем использовать 64-битную версию Windows 10.

Terminal

  1. В инсталлятор добавлен ключ /auto, позволяющий устанавливать программу в автоматическом режиме — без дополнительных действий со стороны пользователя. При запуске инсталлятора с этим ключом не показываются настройки установки, терминал сразу устанавливается по стандартному пути и со стандартным именем папки для программы в меню "Пуск". Пример запуска:
    C:\mt5setup.exe /auto
  2. Исправлена работа инсталлятора при недостатке прав у пользователя операционной системы.
  3. Исправлено лишнее потребление ресурсов процессора, когда в терминале не выполняется никаких активных действий (нет открытых графиков, нет действий со стороны пользователя).
  4. Включено автоматическое сжатие файлов *.log на уровне файловой системы. Это позволяет сократить объем дискового пространства, занимаемого журналами.

Tester

  1. Увеличены объемы кешей при одиночных проходах тестирования, что дает некоторое ускорение тестирования в 64-битных операционных системах.
  2. Исправлена оптимизация торговых роботов через облачную вычислительную сеть MQL5 Cloud Network. Проблемы могли возникать у продуктов, купленных в магазине MetaTrader Market.
  3. Исправлено формирование спредов у баров, генерируемых в режиме тестирования "По всем тикам".
  4. Исправлен выбор OpenCL-устройства в тестере стратегий. Визуальному тестеру теперь разрешен доступ ко всем имеющимся OpenCL-устройствам.
  5. Включено автоматическое сжатие файлов *.log на уровне файловой системы. Это позволяет сократить объем дискового пространства, занимаемого журналами.

MQL5

  1. Исправлено удаление баров пользовательского инструмента методом CustomRatesDelete.
Исправления по крешлогам.
Обновлена документация.
20 декабря 2017
MetaTrader 5 build 1730: проекты в MetaEditor и синтетические инструменты

Прекращается поддержка старых версий терминалов

В новой версии платформы прекращается поддержка десктопных и мобильных терминалов старых версий:

  • Клиентский терминал: версии ниже 730 от 23 ноября 2012
  • Мобильный терминал для iPhone: версии ниже 1171 от 11 ноября 2015
  • Мобильный терминал для Android: версии ниже 1334 от 5 августа 2016

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

Изменен протокол работы с MQL5 Storage

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

Перед обновлением на новую версию платформы мы рекомендуем отправить все локальные изменения в хранилище (выполнить Commit).

Терминал

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

    Как это происходит

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

    Например, вы можете создать инструмент, который будет показывать индекс доллара (USDX). Его формула будет выглядеть следующим образом:

    50.14348112 * pow(ask(EURUSD),-0.576) * pow(USDJPY,0.136) * pow(ask(GBPUSD),-0.119) * pow(USDCAD,0.091) * pow(USDSEK,0.042) * pow(USDCHF,0.036)

    Примечание: в исходной формуле индекса доллара используются пары USDEUR и USDGBP. Поскольку в платформе есть только обратные валютные пары, в формуле синтетического инструмента для них используется отрицательная степень и цена Ask вместо Bid.

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




    Создайте новый пользовательский инструмент, откройте его спецификацию и укажите формулу:




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

    Расчет тиков и минутных баров синтетического инструмента начнется при его добавлении в "Обзор рынка". При этом в "Обзор рынка" сразу же автоматически добавляются все символы, необходимые для его расчета. В журнал платформы будет добавлена запись о начале расчета: Synthetic Symbol USDX: processing started.
    • Расчет синтетического инструмента прекращается при его скрытии из "Обзора рынка".
    • Символы, которые в настоящий момент используются для расчета синтетических инструментов, невозможно скрыть из "Обзора рынка".

    Расчет котировок в реальном времени
    Каждые 100 мс (десять раз в секунду) проверяется, изменилась ли цена хотя бы одного из инструментов, участвующих в формуле. Если да, происходит расчет цены синтетического инструмента и генерируется тик. Расчет осуществляется параллельно в трех потоках для цен Bid, Ask и Last. Например, если в формуле указан EURUSD*GBPUSD, расчет цен синтетического инструмента будет следующим:

    • Bid — bid(EURUSD)*bid(GBPUSD)
    • Ask — ask(EURUSD)*ask(GBPUSD)
    • Last — last(EURUSD)*last(GBPUSD)

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

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

    Как только трейдер добавляет синтетический инструмент в Обзор рынка, платформа проверяет, есть ли для него рассчитанная минутная история. Если нет, она будет создана для последних 60 дней — это около 50 000 баров. Если в настройках платформы в параметре "Макс. баров в окне" указана меньшая величина, то будет использовано именно это ограничение.

    Если часть баров за этот период уже построена, то платформа досоздаст новые бары. Более глубокая история создается только при попытке просмотреть соответствующий временной период на графике (если прокрутить его назад или запросить историю из MQL5-программы).

    История минутных баров синтетического инструмента рассчитывается на основе минутных баров (не тиков) инструментов, входящих в его формулу. Например, чтобы посчитать цену Open минутного бара синтетического инструмента, платформа берет цены Opеn инструментов, входящих в его формулу. Аналогично производится расчет для цен High, Low и Close.

    Если для какого-либо инструмента из формулы отсутствует нужный минутный бар, платформа возьмет для расчета цену Close предыдущего бара. Например, используются три инструмента: EURUSD, USDJPY и GBPUSD. Если при расчете бара, соответствующего минуте 12:00, для инструмента USDJPY такого минутного бара не окажется, при расчете будут использованы следующие цены:

    • Для Open — EURUSD Open 12:00, USDJPY Close 11:59, GBPUSD Open 12:00
    • Для High — EURUSD High 12:00, USDJPY Close 11:59, GBPUSD High 12:00
    • Для Low — EURUSD Low 12:00, USDJPY Close 11:59, GBPUSD Low 12:00
    • Для Close — EURUSD Close 12:00, USDJPY Close 11:59, GBPUSD Close 12:00

    Если минутный бар отсутствует у всех инструментов из формулы, соответствующий минутный бар синтетического инструмента не будет рассчитан.

    Построение новых минутных баров
    Все новые бары (текущий и последующие) синтетического инструмента создаются на основе генерируемых тиков. Цена, по которой строятся бары, зависит от параметра "Построение графиков" в спецификации:





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

    • Имя символа — в зависимости от того, какая цена синтетического инструмента рассчитывается, в формуле будет использована цена Bid, Ask или Last указанного инструмента. Например, если указать EURUSD*GBPUSD, то Вid будет рассчитываться как bid(EURUSD)*bid(GBPUSD), а цена Ask — как ask(EURUSD)*ask(GBPUSD).
    • bid(имя символа) — для расчета цены Bid синтетического инструмента будет принудительно использоваться цена Bid указанного символа. Фактически этот вариант соответствует предыдущему (без указания типа цены).
    • ask(имя символа) — для расчета цены Bid синтетического инструмента будет принудительно использоваться цена Ask указанного символа. Для расчета цены Ask наоборот будет использоваться цена Bid указанного инструмента. Для расчета цены Last будет использоваться цена Last указанного инструмента. Например, если указать ask(EURUSD)*GBPUSD, расчет будет следующим:
      • Вid = ask(EURUSD)*bid(GBPUSD)
      • Ask = bid(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • last(имя символа) — цена Last указанного символа будет использоваться при расчетах всех цен синтетического инструмента (Bid, Ask и Last). Например, если указать last(EURUSD)*GBPUSD, расчет будет следующим:
      • Вid = last(EURUSD)*bid(GBPUSD)
      • Ask = last(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • volume(имя символа) — в формуле будет использован объем тика указанного инструмента. Убедитесь, что информация об объемах транслируется для указанного инструмента.
    • point(имя символа) — в формулу будет подставлен размер минимального изменения цены указанного инструмента.
    • digits(имя символа) — в формулу будет подставлено количество знаков после запятой в цене указанного инструмента.

    Если символ имеет сложное название (содержит дефисы, точки и т.п.), оно должно быть заключено в кавычки. Например, "RTS-6.17".
    В формуле можно использовать арифметические операции: сложение (+), вычитание (-), умножение (*), деление (/) и остаток от деления (%). Например, EURUSD+GBPUSD означает, что цена будет рассчитываться как сумма цен EURUSD и GBPUSD. Также в формуле можно использовать унарный минус для смены знака, например: -10*EURUSD.

    Для арифметических операций существует приоритет их выполнения:

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

    Также в формуле можно использовать константы:

    • Числовые (целочисленные и вещественные с точкой). Например, EURUSD*2+GBPUSD*0.7.
    • Свойства символа _Digits и _Point. Они подставляют в формулу свойства пользовательского символа из спецификации: _Digits — количество знаков после запятой в цене инструмента, _Point — размер минимального изменения цены инструмента.

    Также в формуле можно использовать все математические функции, поддерживаемые в MQL5, кроме MathSrand, MathRand и MathIsValidNumber. Для всех функций используются только короткие имена: fabs(), acos(), asin() и т.д.

  2. Добавлена возможность вбрасывать котировки для пользовательских инструментов в режиме реального времени. Теперь на MQL5 можно написать эксперта, который будет вбрасывать любые котировки по заданному пользовательскому инструменту. Для этого используется новая функция CustomTicksAdd.
    int  CustomTicksAdd(
       const string           symbol,       // имя символа
       const MqlTick&         ticks[]       // массив с тиковыми данными, которые необходимо применить к пользовательскому инструменту
       );
    Функция CustomTicksAdd позволяет транслировать тики так, как если бы они приходили от сервера брокера. Данные записываются не напрямую в базу тиков, а отправляются в окно "Обзор рынка". И уже из него терминал сохраняет тики в своей базе. При большом объеме данных, передаваемых за один вызов, функция меняет свое поведение для экономии ресурсов. Если передается более 256 тиков, данные делятся на две части. Первая часть (большая) сразу напрямую записывается в базу тиков (как это делает CustomTicksReplace). Вторая часть, состоящая из последних 128 тиков, передается в окно "Обзор рынка" и после этого сохраняется терминалом в базе.
  3. Добавлено отображение цен High и Low в Обзоре рынка. По умолчанию, эти колонки выключены. Включить их можно через контекстное меню:




    Для инструментов, чьи графики строятся по ценам Bid (указано в спецификации), показываются цены Bid High и Bid Low. Для инструментов, чьи графики строятся по ценам Last, показываются Last High и Last Low.

    Вместе с колонками High/Low автоматически включается колонка Last, если в Обзоре рынка есть хотя бы один инструмент, чьи графики строятся по ценам Last.

  4. Добавлена возможность редактирования тиковой истории пользовательских финансовых инструментов. Нажмите "Символы" в контекстном меню Обзора рынка, выберите пользовательский инструмент и запросите необходимый интервал данных на вкладке "Тики".

    • Чтобы изменить значение, дважды нажмите на него.
    • Для добавления или удаления записей воспользуйтесь контекстным меню.
    • Чтобы удалить сразу несколько баров/тиков, выделите их мышью, удерживая клавишу Shift или Ctrl+Shift.




    Для удобства измененные записи подсвечиваются:

    • зеленый фон — измененная запись
    • серый фон — удаленная запись
    • желтый фон — добавленная запись

    Для сохранения изменений нажмите "Применить изменения" в нижней части окна.

  5. Добавлено отображение предварительных счетов в дереве Навигатора.

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




  6. Добавлен показ времени в миллисекундах в Окне котировок:




  7. Ускорено сканирование доступных серверов в диалоге открытия нового счета.
  8. Исправлено отображение графического объекта "Трендовая линия" с включенными опциями "Луч влево" и "Луч вправо".
  9. Оптимизирована работа с большим количеством писем внутренней почты (сотни тысяч).
  10. Оптимизирована работа терминала с большим количеством торговых инструментов (50 тысяч и более).
  11. Добавлена оптимизация тиковой истории пользовательских инструментов, выполняемая после редактирования истории.

MetaEditor

  1. В MetaEditor появились полноценные проекты. Разрабатывать программы стало значительно удобнее.

    Теперь в качестве проекта не выступает основной MQ5 файл программы. Проект — это отдельный файл "MQPROJ", в котором хранятся настройки программы, параметры компиляции и информация обо всех используемых файлах. Доступ к основным настройкам проекта организован через отдельное диалоговое окно, больше нет необходимости указывать их в исходном коде через #property.

    Для удобной работы с проектом предусмотрена отдельная вкладка в Навигаторе. В ней по категориям отображаются все используемые файлы: включаемые, ресурсные, заголовочные и т.д. При этом файлы добавляются в навигатор проекта автоматически. Например, если вы включите новый MQH-файл в код, он будет автоматически показан в разделе "Dependencies" навигатора.

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

    Для работы с групповыми проектами добавлен новый раздел Shared Projects. Проект, созданный в этом разделе, сразу же отправляется в хранилище: вы можете быстро раздать права на него другим участникам и приступить к совместной разработке.




    При компиляции проекта в Shared Project исполняемый файл EX5 автоматически копируется в локальный каталог Experts, Indicators или Scripts, в зависимости от типа программы. Вы можете сразу запустить программу на графике, не копируя файлы каждый раз вручную.


    Изменения в работе с хранилищем MQL5 Storage

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

    Перед обновлением на новую версию платформы мы рекомендуем отправить все локальные изменения в хранилище (выполнить Commit).

    Команда "Извлечь данные из хранилища" (Checkout from Storage) теперь недоступна. Для извлечения данных используются команды "Активировать MQL5 Storage" и "Получить файлы из хранилища":

    • Если в текущей копии MetaEditor вы еще не пользовались хранилищем, нажмите "Активировать MQL5 Storage" в контекстном меню окна "Навигатор". Все имеющиеся в вашем хранилище каталоги и файлы будут перенесены на локальный компьютер.
    • Если вы уже работаете с хранилищем, то для извлечения данных нажмите "Получить файлы из хранилища" в контекстном меню конкретного проекта или корневого элемента MQL5 в окне "Навигатор".

    Новые проекты: пример создания и подробности работы

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

    Если у вас уже есть разработки, то самый простой способ попробовать новые проекты — воспользоваться командой "Новый проект из исходного файла".




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

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




    В свойствах проектов появились две новые опции для компиляции MQL5-программ:

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

    Для работы с проектом предназначена отдельная вкладка "Проект" в окне "Навигатор". В ней удобно показываются все файлы, используемые в проекте. При генерации проекта из исходного файла в раздел "Dependencies" автоматически добавляются все используемые включаемые файлы (указанные при помощи директивы #include в основном MQ5-файле и во всех включенных в него файлах).

    При добавлении новых включаемых файлов в исходный код, они также будут появляться в Навигаторе проекта. В раздел Headers будут добавляться используемые заголовочные файлы, а в раздел Resources — изображения, звуки и другие MQL5-программы, включенные в проект в виде ресурсов. В разделе Sources показываются MQ5-файлы с исходным кодом. В раздел Settings and files можно добавлять другие файлы, например, настройки для тестирования или шаблоны для графиков.

    Для добавления существующих файлов в проект и удаления из него файлов воспользуйтесь командами контекстного меню. Будьте внимательны при удалении: вы можете убрать файл из проекта (убрать привязку) или полностью удалить его с жесткого диска:




    Новый проект создать также легко, как и обычную MQL5-программу. Нажмите "Новый проект", а затем в Мастере MQL5 выберите тип создаваемой программы и укажите ее свойства (имя, обработчики событий и т.п.).

    Для получения исполняемого файла EX5 вы можете открыть проект и выполнить команду компиляции (F7) или же, как раньше, открыть основной MQ5-файл программы и скомпилировать его.


    Групповые проекты в MQL5 Storage: подробности работы

    Для работы с групповыми проектами предусмотрен раздел Shared Projects. Если у вас еще не подключено хранилище, выполните в контекстном меню этой папки команду Activate MQL5 Storage. MetaEditor сразу же проверит, есть ли в вашем хранилище сохраненные данные, а также доступны ли вам какие-либо групповые проекты. Имеющиеся данные будут сразу же извлечены из хранилища и загружены на компьютер (Checkout). Доступные групповые проекты будут показаны в разделе Shared Projects; чтобы получить их, нажмите "Извлечь файлы из хранилища" в контекстном меню.

    Для создания нового группового проекта выберите папку Shared Projects и нажмите "Новый проект":




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

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

    Чтобы разрешить другим участникам работать с проектом, откройте его свойства: здесь можно назначить права конкретным пользователям (указать логин MQL5.community), а также задать общие параметры групповой работы:

    • Приватный проект
    • К проекту может присоединиться любой
    • Участие в проекте по запросу




    Для удобства работы при компиляции группового проекта конечный исполняемый файл (EX5) автоматически копируется в папку Experts, Indicators или Scripts в зависимости от типа программы. Таким образом, вы сразу можете запустить программу в терминале без ее ручного копирования в нужный каталог.


    Публичные проекты в MQL5 Storage: участие в разработках

    Как уже упоминалось выше, у каждого группового проекта в MQL5 Storage есть настройки публичности: проект может быть приватным или же открытым для участия других пользователей. Теперь все проекты, к которым можно свободно присоединиться, отображаются в отдельной вкладке "Публичные проекты".

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





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

  2. Добавлена возможность легкой вставки различных свойств и ресурсов в код программы. Например, вы можете быстро добавить в код включаемый файл. Выберите команду "Вставить — MQH в виде #include", а затем в открывшемся окне выберите нужный включаемый файл. После этого в код программы будет добавлена директива #include с правильно указанным путем к выбранному файлу.




    При помощи этого же меню в код программы можно легко добавить файлы в виде бинарного или текстового массива. Например, вы можете переносить шаблоны графиков вместе с экспертами/индикаторами: включите свой шаблон в код программы в виде массива, затем при помощи функции FileSave сохраните его на диск. После этого шаблон можно применить к графику прямо из эксперта при помощи функции ChartApplyTemplate.
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //--- файл шаблона в виде бинарного массива
       unsigned char my_template[]=
         {
          0xFF,0xFE,0x3C, ... ,0x00 // массив данных в примере сокращен
         };
    //--- сохранение и применение шаблона
       if(FileSave("my_template.tpl",my_template))
         {
          Print("Custom template saved in \\MQL5\\Files");
          if(ChartApplyTemplate(0,"\\Files\\my_template.tpl"))
             Print("Custom template applied to the current chart");
          else
             Print("Failed to apply custom template");
         }
       else
          Print("Failed to save custom template");
      }

  3. Добавлена возможность преобразования строк между форматами ASCII, HEX и Base64. Выделите строку в исходном коде, а затем нажмите нужную команду в меню "Правка — Преобразовать":




  4. Исправлен поиск по файлам без учета регистра.
  5. Исправлена ошибка в отладчике при вычислении значения выражения вида x.y[0][1].z.
  6. Исправлен переход по коду при помощи кнопок "Вперед" и "Назад".

MQL5

  1. Добавлен новый онлайн-сервис для дополнительной защиты MQL5-программ — MQL5 Cloud Protector. Эта защита аналогична используемой в крупнейшем магазине торговых приложений MetaTrader Маркет, где присылаемые продавцами файлы продуктов (EX5) дополнительно компилируются в нативный код.

    Теперь использовать защиту как в Маркете может каждый. Достаточно выполнить команду Сервис — MQL5 Cloud Protector в MetaEditor. Единственное отличие этой защиты от Маркета заключается в том, что файл не привязывается к компьютеру пользователя. Файлы, защищенные через MQL5 Cloud Protector, можно запускать на любых компьютерах как обычные EX5-файлы.
    Сервис MQL5 Cloud Protector работает безопасно. Дополнительная защита накладывается только на уже скомпилированный файл. Исходный код никуда не передается. Сначала программа компилируется в EX5-файл на компьютере пользователя, затем скомпилированный файл по зашифрованному соединению отправляется в сервис, защищается и возвращается обратно пользователю.



  2. Добавлены функции для работы с пользовательскими финансовыми инструментами.

    Функция Действие
    CustomSymbolCreate Создает пользовательский символ с указанным именем в указанной группе
    CustomSymbolDelete Удаляет пользовательский символ с указанным именем
    CustomSymbolSetInteger Устанавливает для пользовательского символа значение свойства целочисленного типа
    CustomSymbolSetDouble Устанавливает для пользовательского символа значение свойства вещественного типа
    CustomSymbolSetString Устанавливает для пользовательского символа значение свойства строкового типа
    CustomSymbolSetMarginRate Устанавливает для пользовательского символа коэффициенты взимания маржи в зависимости от типа и направления ордера
    CustomSymbolSetSessionQuote Устанавливает время начала и время окончания указанной котировочной сессии для указанных символа и дня недели
    CustomSymbolSetSessionTrade Устанавливает время начала и время окончания указанной торговой сессии для указанных символа и дня недели
    CustomRatesDelete Удаляет все бары в указанном временном интервале из ценовой истории пользовательского инструмента
    CustomRatesReplace Полностью заменяет ценовую историю пользовательского инструмента в указанном временном интервале данными из массива типа MqlRates
    CustomRatesUpdate Добавляет в историю пользовательского инструмента отсутствующие бары и заменяет существующие бары данными из массива типа MqlRates
    CustomTicksAdd Добавляет в ценовую историю пользовательского инструмента данные из массива типа MqlTick. Пользовательский символ должен быть выбран в окне MarketWatch (Обзор рынка)
    CustomTicksDelete Удаляет все тики в указанном временном интервале из ценовой истории пользовательского инструмента
    CustomTicksReplace Полностью заменяет ценовую историю пользовательского инструмента в указанном временном интервале данными из массива типа MqlTick

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

    Библиотека размещается в рабочем каталоге терминала в папке Include\Generic.

  4. Добавлена поддержка шаблонов для данных типа union.
  5. Добавлено свойство торгового инструмента SYMBOL_VISIBLE. Вызов SymbolInfoInteger(symbol, SYMBOL_VISIBLE) вернет false, если указанный символ не виден в Обзоре рынка.
  6. Добавлено событие CHARTEVENT_MOUSE_WHEEL. Событие вызывается при прокрутке или нажатии колеса мыши на графике (если для него установлено свойство CHART_EVENT_MOUSE_WHEEL=true).
  7. Добавлены новые свойства графика:

    • CHART_EVENT_MOUSE_WHEEL — включение/отключение генерации события прокрутки и нажатия колеса мыши на графике CHARTEVENT_MOUSE_WHEEL. Возможные значения: 0 и 1.
    • CHART_CROSSHAIR_TOOL — включение/отключение возможности переключения курсора в режим "Перекрестие" по нажатию средней клавиши мыши. Возможные значения: 0 и 1.
    • CHART_CONTEXT_MENU — включение/отключение отображения контекстного меню при нажатии правой клавишей мыши на графике. Возможные значения: 0 и 1.

  8. Теперь при вычислении масштаба окна индикатора не учитываются буферы рисования со стилем DRAW_NONE.
  9. Добавлена генерация события CHARTEVENT_CHART_CHANGE при выставлении свойства CHART_SCALEFIX (фиксированный масштаб) для графика.
  10. Добавлена функция ArraySwap, позволяющая быстро обменяться содержимым динамических массивов.
    bool  ArraySwap(
       void&  array1[],      // первый массив
       void&  array2[]       // второй массив
       );
    Функция принимает динамические массивы одинакового типа и одинаковых размерностей. Для многомерных массивов количество элементов во всех измерениях кроме первого должно совпадать.

  11. Добавлено новое свойство TERMINAL_RETRANSMISSION — процент повторно отправляемых сетевых пакетов (ретрансмитов) в TCP/IP протоколе для всех запущенных приложений и служб на данном компьютере. Даже в самой быстрой и правильно настроенной сети происходят потери пакетов и, как следствие, отсутствие подтверждений о доставке пакетов между получателем и отправителем. В таких случаях производится повторная отправка "потерянного" пакета.

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

    Свойство TERMINAL_RETRANSMISSION добавлено в перечисление ENUM_TERMINAL_INFO_DOUBLE, для его получения используется функция TerminalInfoDouble.
  12. Оптимизирована работа с торговой историей.

Сигналы

  1. Исправлено проставление типа исполнения ордера по остатку (filling) при принудительном закрытии позиций, открытых по сигналу. В настройках копирования сигналов предусмотрена опция "Стоп, если счет ниже XXX USD": если уровень средств на счете падает ниже указанного, то копирование торговых сигналов автоматически прекращается, принудительно закрываются все позиции. Ранее при принудительном закрытии позиций в некоторых случаях для ордеров на закрытие неправильно указывался тип заливки. Теперь терминал проверяет разрешенные типы заливки в настройках символа и указывает в ордерах допустимый вариант.

Tester

  1. Поведение функции HistoryOrderSelect в тестере стратегий приведено в соответствие с клиентским терминалом.
  2. Поведение функций CopyTicks и CopyTicksRange в тестере стратегий приведено в соответствие с клиентским терминалом.
  3. Оптимизировано отображение графических объектов при тестировании в визуальном режиме.
  4. Исправлен показ результатов тестирования биржевых инструментов (с биржевой моделью управления рисками). Теперь на графике отображаются только средства (эквити), баланс и нагрузка на депозит не показываются. Торговое состояние таких счетов оценивается по уровню средств. Сам по себе баланс показывает лишь сумму собственных денег на счету и не учитывает активы и обязательства трейдера. Нагрузка на депозит (margin/equity) не показывается, так как маржа в биржевом расчете представляет собой текущую стоимость актива/обязательства с учетом дисконта, и она изменяется вместе с эквити.

  • Добавлен перевод пользовательского интерфейса на голландский язык.
  • Обновлена документация.
23 августа 2017
MetaTrader 5 iOS build 1649: рыночная статистика по инструменту

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


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


2 августа 2017
MetaTrader 5 Android build 1642: упрощенный запрос на открытие реального счета

В MetaTrader 5 Android появилась возможность быстрого открытия предварительных (preliminary) счетов у брокера. Для этого нужно выбрать пункт меню "Открыть реальный счет" и в списке серверов указать своего брокера. Далее вам останется только прикрепить к заявке документ, подтверждающий личность, и выписку из банка. Ваш запрос на открытие реального тут же будет отправлен брокеру, при необходимости он запросит у вас дополнительную информацию.

21 июля 2017
MetaTrader 5 build 1640: создание и тестирование собственных финансовых инструментов

Terminal

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

    Создание пользовательского символа
    Откройте окно управления символами через контекстное меню "Обзора рынка" и нажмите "Создать символ":


    Для настройки доступно множество параметров. Их список и описание можно посмотреть в документации. Вы можете быстро настроить собственный инструмент — скопируйте параметры из любого схожего инструмента, а затем измените то, что вам нужно. Для этого выберите имеющийся инструмент в поле "Скопировать из".
    Имя пользовательского символа не должно пересекаться с именами символов, транслируемых брокерами. Если вы подключитесь к серверу, и на нем окажется символ, совпадающий с пользовательским, то пользовательский символ будет удален.
    Здесь же присутствуют команды импорта и экспорта настроек. Вы можете легко обмениваться пользовательскими символами друг с другом или переносить символы между своими терминалами. Настройки экспортируются в текстовые файлы формата JSON.

    Управление пользовательскими символами
    Все символы отображаются в отдельной группе Custom. Чтобы изменить или удалить символ, воспользуйтесь контекстным меню в списке:



    Импорт ценовой истории
    Вы можете импортировать ценовые данные в собственный символ из любого текстового файла. Выберите символ, а затем перейдите на вкладку "Бары".


    В диалоге импорта укажите путь к файлу с данными и задайте настройки:

    • Разделитель — разделитель элементов в текстовом файле.
    • Пропуск столбцов и строк — количество колонок (слева направо) и строк (сверху вниз), которое необходимо пропустить при импорте.
    • Сдвиг — сдвиг времени по часам. Эта опция используется при импортировании данных, сохраненных в другом часовом поясе.
    • Только выделенные — эта опция позволяет импортировать только выделенные в окне просмотра строки. Строки можно выделить с помощью мыши, удерживая клавиши "Ctrl" или "Shift".

    Файл с минутными барами должен иметь формат: Дата Время Open High Low Close ТиковыйОбъем Объем Спред. Например:
    2016.06.27    00:01:00    1.10024    1.10136    1.10024    1.10070    18    54000000    44
    2016.06.27    00:02:00    1.10070    1.10165    1.10070    1.10165    32    55575000    46
    2016.06.27    00:03:00    1.10166    1.10166    1.10136    1.10163    13    13000000    46
    2016.06.27    00:04:00    1.10163    1.10204    1.10155    1.10160    23    51000000    41
    Для собственного символа вы можете использовать данные любого существующего инструмента. Экспортируйте их (эта возможность была добавлена в предыдущей версии платформы), при необходимости модифицируйте, а затем импортируйте обратно.
    В MetaTrader 5 ценовая история хранится в виде минутных баров. Все остальные таймфреймы создаются на их основе. При импорте вы можете использовать данные и с более высоких таймфреймов, но следует учитывать, что графики более низких таймфреймов при этом будут иметь пропуски. Например, при импорте часовых данных на минутном графике вы увидите по одному бару на каждый час.
    Ценовые данные пользовательских символов сохраняются в отдельном каталоге Custom (вне каталогов данных конкретных торговых серверов):
    C:\Users\[windows account]\AppData\Roaming\MetaQuotes\Terminal\[instance id]\bases\Custom

    Использование собственных символов
    Использование собственных символов практически не отличается от тех, что предоставляет брокер. Они также показываются в окне "Обзор рынка", по ним можно открывать графики, на которые можно накладывать индикаторы и аналитические объекты. При этом по пользовательским символам нельзя торговать.

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

     

    При расчете маржи и прибыли тестер стратегий автоматически использует доступные кросс-курсы. Например, мы создали собственный символ AUDCAD.custom с типом расчета маржи Forex, и валюта нашего счета — USD. Тогда на основе имени форексного инструмента тестер ищет необходимые символы в следующем порядке:
    1.     сначала ищутся символы вида AUDUSD.custom (для расчёта маржи) и USDCAD.custom (для расчёта прибыли по сделкам)
    2.     затем, если какого-то из этих инструментов нет, ищется первый символ, который соответствует по имени необходимым валютным парам  — AUDUSD и USDCAD соответственно. Например, найдены AUDUSD.b и NZDUSD.b — значит, именно курсы этих инструментов будут использоваться при расчетах маржи и прибыли.

    Для инструментов с остальными типами расчета маржи (Futures, Stock Exchange) необходимо наличие валютной пары для пересчета валюты инструмента в валюту депозита. Например, мы создали собственный символ с валютой прибыли и валютой маржи, выраженными в британских функтах (GBP), а валютой депозита является швейцарский франк (CHF). Тогда поиск инструментов для тестирования ведется в следующем порядке:
    1. Проверяется наличие торгового инструмента, соответствующего валютной паре GBPCHF (GBP vs CHF).
    2. Если он отсутствует, то ищется первый торговый инструмент, который соответствует по имени валютной паре GBPCHF, например GBPCHF.b или GBPCHF.def.

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

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

  2. Добавлена фильтрация ленты сделок по объему.

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

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


    Задать минимальный объем можно также через контекстное меню ленты сделок.

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


  4. Исправлено обновление панелей инструментов после сворачивания и разворачивания окна терминала.
  5. Исправлено формирование торговой истории позиций при пересечении тикетов сделок и позиций.

MQL5

  1. Добавлена возможность профилирования MQL5-программ на ценовой истории. Это позволит быстро проверять производительность программ без ожидания новых тиков.

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


  2. Добавлена поддержка Объединения (union). Это особый тип данных, который состоит из нескольких переменных, разделяющих одну и ту же область памяти. Следовательно, объединение обеспечивает возможность интерпретации одной и той же последовательности битов двумя (или более) различными способами. Объявление объединения начинается с ключевого слова union.
    union LongDouble
    {
      long   long_value;
      double double_value;
    };
    В отличие от структуры, разные члены объединения относятся к одному и тому же участку памяти. В данном примере объявлено объединение LongDouble, в котором значение типа long и значение типа double разделяют одну и ту же область памяти. Важно понимать — невозможно сделать так, чтобы это объединение хранило одновременно целочисленное значение long и вещественное double (как это было бы в структуре), поскольку переменные long_value и double_value накладываются (в памяти) друг на друга. Но зато MQL5-программа в любой момент может обрабатывать информацию, содержащуюся в этом объединении, как целочисленное значение (long) или как вещественное (double). Следовательно, объединение позволяет получить два (или больше) варианта представления одной и той же последовательности данных.

    При объявлении объединения компилятор автоматически выделяет область памяти, достаточную для хранения в объединении переменных самого большого по объему типа. Для доступа к элементу объединения используется тот же синтаксис, как и для структур – оператор "точка".
    union LongDouble
    {
      long   long_value;
      double double_value;
    };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //---
       LongDouble lb;
    //--- получим недействительное число -nan(ind) и выведем его
       lb.double_value=MathArcsin(2.0);
       printf("1.  double=%f                integer=%I64X",lb.double_value,lb.long_value);
    //--- наибольшее нормализованное число (DBL_MAX)
       lb.long_value=0x7FEFFFFFFFFFFFFF;
       printf("2.  double=%.16e  integer=%I64X",lb.double_value,lb.long_value);
    //--- наименьшее положительное нормализованное (DBL_MIN)
       lb.long_value=0x0010000000000000;    
       printf("3.  double=%.16e  integer=%.16I64X",lb.double_value,lb.long_value);
      }
    /*  Результат выполнения
        1.  double=-nan(ind)                integer=FFF8000000000000
        2.  double=1.7976931348623157e+308  integer=7FEFFFFFFFFFFFFF
        3.  double=2.2250738585072014e-308  integer=0010000000000000
    */

  3. Добавлена автоматическая генерация неявного оператора копирования для объектов структур и классов. Теперь компилятор автоматически создает операторы копирования, что позволяет писать для объектов простые записи вида b=a:
    class Foo
      {
       int               value;
    public:
       string Description(void){return IntegerToString(value);};
       //--- конструктор по умолчанию
                         Foo(void){value=-1;};
       //--- конструктор с параметрами   
                         Foo(int v){value=v;};
      };
    //+------------------------------------------------------------------+
    //|  структура, содержащая объекты типа Foo                          |
    //+------------------------------------------------------------------+
    struct MyStruct
      {
       string            s;
       Foo               foo;
      };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //---
       MyStruct a,b;
       Foo an_foo(5);
       a.s="test";
       a.foo=an_foo;
       Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
       Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
    //---
       Print("b=a");
       b=a;
    //---
       Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
       Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
    /*
       Результат выполнения;
       a.s=test a.foo.Description()=5
       b.s= b.foo.Description()=-1
       b=a
       a.s=test a.foo.Description()=5
       b.s=test b.foo.Description()=5
    */
      }
    В неявном операторе осуществляется почленное копирование объектов.

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

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

  4. Оптимизировано использование памяти при обращении к ценовой истории из экспертов при помощи Copy* функций. При работе с большими объемами данных потребление памяти будет снижено многократно.

  5. Теперь функция TimeToStruct возвращает булево значение, позволяя проверять успешность конвертации datetime в MqlDateTime.
  6. Добавлен запрет на использование функций FileWriteStruct и FileReadStruct для структур, содержащих строки, динамические массивы, объекты и указатели.
  7. Добавлены коды ответа:

    • TRADE_RETCODE_REJECT_CANCEL — запрос на активацию отложенного ордера отклонен, а сам ордер отменен
    • TRADE_RETCODE_LONG_ONLY — запрос отклонен, так как на символе установлено правило "Разрешены только длинные позиции"
    • TRADE_RETCODE_SHORT_ONLY — запрос отклонен, так как на символе установлено правило "Разрешены только короткие позиции"
    • TRADE_RETCODE_CLOSE_ONLY — запрос отклонен, так как на символе установлено правило "Разрешено только закрывать существующие позиции"

  8. Добавлено новое значение, возвращаемое функцией SymbolInfoInteger c параметром SYMBOL_ORDER_MODE. SYMBOL_ORDER_CLOSEBY — флаг возможности выставления ордеров на закрытие позиции встречной (Close By).
  9. В перечисление ENUM_SYMBOL_INFO_INTEGER добавлено булево свойство SYMBOL_CUSTOM. Оно позволяет узнать, является ли символ пользовательским. Для получения свойства используйте функцию SymbolInfoInteger.
  10. Добавлена возможность получения причины создания ордера, сделки и позиции.

    Новые свойства


    Причины создания ордера, сделки и позиции
    Для получения причин создания торговых операций добавлено три перечисления:

    ENUM_POSITION_REASON ENUM_DEAL_REASON ENUM_ORDER_REASON Описание причины
    POSITION_REASON_CLIENT DEAL_REASON_CLIENT ORDER_REASON_CLIENT Операция совершена в результате срабатывания ордера, выставленного из десктопного терминала
    POSITION_REASON_MOBILE DEAL_REASON_MOBILE ORDER_REASON_MOBILE Операция совершена в результате ордера, выставленного из мобильного приложения
    POSITION_REASON_WEB DEAL_REASON_WEB ORDER_REASON_WEB Операция совершена в результате срабатывания ордера, выставленного из веб-платформы
    POSITION_REASON_EXPERT DEAL_REASON_EXPERT ORDER_REASON_EXPERT Операция совершена в результате срабатывания ордера, выставленного из MQL5-программы – советником или скриптом
    - DEAL_REASON_SL ORDER_REASON_SL Операция совершена в результате срабатывания Stop Loss
    - DEAL_REASON_TP ORDER_REASON_TP Операция совершена в результате срабатывания Take Profit
    - DEAL_REASON_SO ORDER_REASON_SO Операция совершена в результате наступления события Stop Out
    - DEAL_REASON_ROLLOVER - Сделка совершена по причине переноса позиции
    - DEAL_REASON_VMARGIN - Сделка совершена по причине начисления/списания вариационной маржи
    - DEAL_REASON_SPLIT - Сделка совершена по причине сплита (понижения цены) акции или иного актива, по которому открыта имелась позиция на момент объявления сплита

  11. Оптимизирована синхронизация и доступ к тиковой истории.
  12. Исправлена ошибка отдачи тиков в статический массив в функции CopyTicksRange. Ранее в этом случае всегда возвращалось 0 тиков.
  13. Внесены различные исправления в библиотеку нечеткой логики Fuzzy.

Сигналы

  1. Исправлено открытие сигнала с сайта при отсутствии подключения торговым счетом.

Тестер

  1. Оптимизирована и значительно ускорена работа с историей ордеров и сделок. При работе с большим объемом данных (десятки тысяч записей в истории и более) скорость работы увеличится многократно.
  2. Исправлено вычисление времени удержания позиции в отчёте тестирования.

MetaEditor

  1. В отладчике исправлено отображение содержимого статических массивов-членов класса.
  2. Добавлен список точек останова в отлаживаемой программе. Для перехода к нему используйте контекстное меню вкладки "Отладка":


    Для перехода к любой из точек дважды нажмите на ней.
Обновлена документация.
8 июня 2017
MetaTrader 5 iOS build 1605: открытие предварительного счета у брокера

В MetaTrader 5 iOS добавлена возможность быстрого открытия предварительных (preliminary) счетов у брокера. Теперь достаточно выбрать пункт меню "Открыть реальный счет", а далее в списке серверов указать нужного брокера. После заполнения персональных данных остается только прикрепить два документа, подтверждающих личность и адрес, и отправить заявку на регистрацию. Таким образом, брокер может сразу же открыть вам реальный счет, запросив при необходимости дополнительную информацию.


В 1605-м билде MetaTrader 5 iOs также проведены оптимизация и редизайн почты:

  • связанные письма теперь объединяются в цепочки и показываются одним пунктом;
  • появился показ превью вложений в письмах;
  • при отправке нового письма можно добавить до 5 вложений (размер файла не должен превышать 8 Мб).


26 апреля 2017
MetaTrader 5 build 1596: доступ к ценовой истории

Terminal

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

    Для закачки данных откройте диалог управления символами в контекстном меню "Обзора рынка":


    Теперь в нем доступны две новые вкладки: "Бары" и "Тики". Выберите символ, временной диапазон и нажмите "Запрос". Платформа запросит все доступные данные с сервера или отобразит их моментально, если они уже закачаны. Сохраненные ценовые данные можно экспортировать в CSV-файл.

  2. Добавлен показ времени с точностью до миллисекунд для позиций, сделок и ордеров.




  3. В диалоге торговли исправлено уведомление об отказе в выполнении запроса на закрытие позиции встречной.

MQL5

  1. Исправлена работа функции PositionSelect. В некоторых случаях выбиралась позиция не с наименьшим тикетом.
  2. Исправлена работа функций CopyTicks и CopyTicksRange при запросах тиковой истории на большую глубину.

Signals

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

Tester

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

Обновлена документация.

8 апреля 2017
MetaTrader 5 Android build 1576: в историю торговли добавлены позиции

В MetaTrader 5 Android добавлено представление торговой истории в виде позиций. Ранее во вкладке "История" отражались только сделки и ордера из истории, теперь же анализ торговли можно проводить в разрезе позиций. Для этого  все сделки, относящиеся к позиции, группируются в единую запись, где можно увидеть:

  • Время открытия и закрытия позиции (определяемые по первой и последней сделке)
  • Объем позиции (при частичном закрытии показывается закрытый объем и исходный объем)
  • Средневзвешенные цены открытия и закрытия позиции
  • Общий финансовый результат по всем сделкам, относящимся к позиции

30 марта 2017
MetaTrader 5 iOS build 1547: торговая история в виде позиций

Добавлено представление торговой истории в виде позиций. Ранее во вкладке "История" отражались только сделки и ордера из истории, теперь в неё добавлены и позиции. Торговая платформа собирает данные по сделкам, относящимся к позиции, и группирует эти данные в единую запись. В ней можно увидеть:

  • Время открытия и закрытия позиции, определяемые по первой и последней сделке
  • Объем позиции; если позиция закрыта частично, показывается закрытый объем и исходный объем
  • Средневзвешенную цену открытия и цену закрытия позиции
  • Суммарный финансовый результат по сделкам, относящимся к позиции


24 марта 2017
MetaTrader 5 build 1570: улучшение витрины Маркета и расширение шаблонных функций в MQL5

Terminal

  1. Обновлена витрина магазина приложений MetaTrader Market. Выбирать торговых роботов и технические индикаторы стало удобнее. Мы обновили дизайн и добавили подборки продуктов:

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



  2. Исправлено обновление клиентского терминала и работа встроенных покупок в Маркете, Сигналах и Виртуальном хостинге при использовании учетной записи Windows с ограниченными правами.
  3. Исправлена ошибка, в некоторых случаях приводившая к нарушению сортировки истории позиций.
  4. Оптимизировано и исправлено отображение вкладки "Активы".

MQL5

  1. Добавлена поддержка перегрузки шаблонных функций по параметрам. Например, есть шаблонная функция, которая записывает в первый параметр значение второго параметра с помощью явного приведения типов. В языке MQL5 запрещено приведение типа string к типу bool, но мы можем сделать это сами. Создадим перегрузку шаблонной функции:
    //+------------------------------------------------------------------+
    //| Шаблонная функция                                                |
    //+------------------------------------------------------------------+
    template<typename T1,typename T2>
    string Assign(T1 &var1,T2 var2)
      {
       var1=(T1)var2;
       return(__FUNCSIG__);
      }
    //+------------------------------------------------------------------+
    //| Специальная перегрузка для случая bool+string                    |
    //+------------------------------------------------------------------+
    string Assign(bool &var1,string var2)
      {
       var1=(StringCompare(var2,"true",false) || StringToInteger(var2)!=0);
       return(__FUNCSIG__);
      }
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       int i;
       bool b;
       Print(Assign(i,"test"));
       Print(Assign(b,"test"));
      }
    В результате выполнения кода мы увидим, что для пары int+string была использована шаблонная функция Assign(), а при втором вызове для пары bool+string уже использовалась перегруженная версия.
    string Assign<int,string>(int&,string)
    string Assign(bool&,string)

  2. Добавлена возможность явной специализации шаблонных функций. Для этого перед списком параметров вызова необходимо указать параметры типизации:
    template<typename T>
    T Func() { return (T)0; }
      
      
    void OnInit()
      {
       Func<double>();   // явная специализация шаблонной функции
      }
    Таким образом, специализация происходит не через параметры вызова, а прямым указанием типов.

  3. Оптимизировано отображение пользовательских индикаторов с типом рисования DRAW_ZIGZAG.
  4. В перечисление типов сделок ENUM_DEAL_TYPE добавлены новые значения:

    • DEAL_DIVIDEND — сделка начисления дивиденда.
    • DEAL_DIVIDEND_FRANKED — сделка начисления франкированного дивиденда (не облагается налогом, налог за клиента оплачивает компания).
    • DEAL_TAX — сделка удержания налога.

  5. Исправлено отображение пользовательских индикаторов с типом рисования DRAW_FILLING. При совпадении координат верхней и нижней линии теперь рисуется тонкая линия.
  6. Исправлено вычисление координат объекта "Графическая метка" (Bitmap Label) при выставлении параметра CHART_SHOW в состояние false. Этот параметр устанавливается функцией ChartSetInteger и позволяет скрыть все элементы ценового графика для создания собственного интерфейса программы.
  7. Исправлена ошибка перекодировки 24-битных изображений при помещении их в ресурсы MQL5-приложения.
  8. Исправлена ошибка вывода на печать структур функцией ArrayPrint.
  9. Обновлены стандартные библиотеки MQL5.

MetaEditor

  1. Добавлен перевод пользовательского интерфейса на малайский язык.

Signals

  1. Исправлено открытие страницы сигнала в терминале при переходе с сайта MQL5.community в случае отсутствия подключения торговым счетом.

Tester

  1. Исправлены ошибки при работе функции CopyTicks в тестере стратегий.
  2. Исправлена сортировка сделок типа "Снятие" (Withdrawal) при формировании отчета тестирования.
  3. Исправлена модификация отложенных ордеров.

Hosting

  1. Исправлено отображение мастера виртуального хостинга на экранах сверхвысокого разрешения (4К).

Обновлена документация.

17 февраля 2017
MetaTrader 5 build 1545: быстрое переключение между окнами и изменение цен мышью

Terminal

  1. Добавлено быстрое переключение между окнами "Инструменты" и "Тестер стратегий".



  2. Добавлена возможность изменения цен и объемов ордеров при помощи колеса мыши:




  3. Теперь при переходе к скачиванию мобильных терминалов запоминается список ваших торговых серверов. При последующей установке MetaTrader 5 для iPhone или Android на мобильном устройстве вам сразу будет показан готовый список серверов. Вы сможете быстро подключить существующие торговые счета. Сервер текущего подключенного счета будет показан в мобильном терминале первым.




  4. Значительно снижена нагрузка на терминал, создаваемая невидимыми (свернутыми) графиками и объектами.
  5. Исправлена ошибка, в некоторых случаях приводившая к некорректному срабатыванию трейлинг-стопов.
  6. Исправлена ошибка фильтрации сделок по символу в торговой истории счета.
  7. Исправлена ошибка отображения поля "Тип" в истории позиций.
  8. Исправлена ошибка в формировании и представлении торговой истории в виде позиций.
  9. Исправлено отображение пользовательских индикаторов с типом построения DRAW_COLOR_LINE, DRAW_COLOR_ZIGZAG и DRAW_COLOR_SECTION при использовании цвета CLR_NONE.

MQL5

  1. Исправлена ошибка в шаблонах при типизации константным указателем.
  2. Исправлен контроль доступа к private и protected членам класса.

Tester

  1. Исправлено срабатывание лимитных ордеров на биржевых инструментах при выставлении ордеров хуже текущего рынка (цена покупки выше рыночной, или цена продажи ниже рыночной).
  2. Снято ограничение на тестирование пользовательских индикаторов с более чем 64 входными параметрами.
  3.  Добавлен перевод пользовательского интерфейса на хинди.

Обновлена документация.

9 февраля 2017
MetaTrader 5 iOS build 1509: авторизация на MQL5.com через Facebook
  • Добавлена возможность авторизации и регистрации MQL5.com-аккаунта через Facebook. Теперь, если у вас есть профиль в этой социальной сети, вы можете в несколько кликов получить доступ к чатам и всему набору сервисов для MetaTrader 5.

  • Улучшения и исправления.
27 января 2017
MetaTrader 5 build 1525: представление истории в виде позиций и улучшение тестера

Terminal

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




    Для хеджинговых счетов данный вид представления позиций фактически аналогичен истории счета в MetaTrader 4.



  2.   Добавлена команда для визуализации истории сделок на графике по конкретному символу.

    • Чтобы показать все сделки только по символу выбранной позиции/сделки, нажмите "Добавить сделки по [Имя символа]". Сделки будут добавлены на все открытые в данный момент графики по этому символу. Если таких графиков нет, будет открыт новый.
    • Чтобы показать сделки по всем символам из истории счета, нажмите "Добавить все сделки". На все открытые графики будут добавлены все сделки по соответствующим символам.




  3. Добавлен показ международного имени торгового инструмента в спецификации контракта, а также возможность поиска по нему в диалоге управления инструментами.




  4. Добавлена возможность быстро установить разрешение для окна терминала. Функция будет удобна для тех, кто снимает видеоролики. В меню доступны наиболее популярные разрешения для публикации роликов в видеосервисах, таких как YouTube.



  5. Шаблоны и профили графиков перенесены из [каталога данных терминала\Profiles] в [каталог данных терминала\MQL5\Profiles]. Теперь можно легко добавлять шаблоны в хранилище MQL5 Storage и использовать их с любого вашего компьютера.

MQL5

  1. Добавлена поддержка ресурсных переменных. Использование таких переменных может существенно облегчить написание некоторых программ. Например, вы можете написать OpenCL код в отдельном CL-файле, а затем включить этот файл в виде строки в ресурсы вашей MQL5-программы. Раньше вместо этого код пришлось бы описывать в виде одной большой строковой переменной.

    Объявление ресурсной переменной
    #resource путь_к_файлу_ресурса as тип_ресурсной_переменной имя_ресурсной_переменной

    Особенности
    • Для строковых файлов производится автоматическое определение кодировки по BOM (заголовку). Если BOM отсутствует, кодировка определяется по содержимому. Поддерживаются кодировки ANSI, UTF-8 и UTF-16. Все строки переводятся в Unicode.
    • К данным такого ресурса можно обращаться только через переменную. Автоматическая адресация через "::<resource name>" не работает.
    • Специальный тип ресурсной переменной bitmap указывает компилятору, что ресурс является графическим изображением. Ресурсная переменная в данном случае получает тип uint.
    • При использовании 24-битного изображения для всех его пикселей компонента альфа-канала устанавливается в значение 255.
    • При использовании 32-битного изображения без альфа-канала для всех его пикселей компонента альфа-канала также устанавливается в значение 255.
    • При загрузке 32-битного изображения с альфа-каналом никаких манипуляций с пикселями не происходит.
    • Ресурсная переменная-массив типа bitmap может иметь две размерности. В этом случае размер массива будет установлен как [высота_картинки][ширина_картинки].
    • В случае одномерного массива количество элементов будет установлено как высота_картинки*ширина_картинки.
    • Если размер файла ресурса не кратен размеру элемента массива, то остаток данных отсекается. Например, при размере файла в 14 байт, для массива int количество элементов будет составлять 3, а оставшиеся 2 байта (14 - sizeof(int)*3) будут отброшены.
    Примеры использования
    #resource "data.bin" as int ExtData[]             // объявление массива числового типа, содержащего данные из файла data.bin
    #resource "data.bin" as MqlRates ExtData[]        // объявление массива простых структур, содержащего данные из файла data.bin
    
    #resource "data.txt" as string ExtCode            // объявление строки, содержащей данные файла data.txt
    #resource "data.txt" as string ExtCode[]          // объявление строкового массива, содержащего строки файла data.txt
    
    #resource "image.bmp" as bitmap ExtBitmap[]       // объявление одномерного массива, содержащего в себе растр из файла BMP, размер массива = height * width
    #resource "image.bmp" as bitmap ExtBitmap2[][]    // объявление двумерного массива, содержащего в себе растр из файла BMP, размер массива [height][width]

  2. Добавлено свойство CHART_SHOW для отключения отображения графика. Для получения и установки свойства используются функции ChartGetInteger и ChartSetInteger.

    Если установлено значение false, то отключается отрисовка любых атрибутов ценового графика и устраняются все отступы по краям графика: шкалы времени и цены, строка быстрой навигации, метки событий Календаря, значки сделок, тултипы индикаторов и баров, подокна индикаторов, гистограммы объёмов и т.д.

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

    Графические объекты отрисовываются всегда независимо от установленного значения свойства CHART_SHOW.

  3. Добавлено свойство CHART_KEYBOARD_CONTROL для включения/отключения управления графиком при помощи клавиатуры ("Home", "End", "PageUp", "+", "-", "Стрелка вверх"  и т.д.). Установка  CHART_KEYBOARD_CONTROL=false позволяет отключить скроллинг и масштабирование графика, но при этом сохраняется возможность получать события нажатия данных клавиш в OnChartEvent.

    Для получения и установки свойства используются функции ChartGetInteger и ChartSetInteger.

  4. Добавлены новые функции и свойства для работы с OpenCL.

    Новые свойства для работы с памятью
    С помощью CLGetInfoIntegrer теперь можно получить четыре новых свойства:
    • CL_DEVICE_MAX_WORK_GROUP_SIZE — общее количество локальных рабочих групп, доступных для OpenCL устройства.
    • CL_KERNEL_WORK_GROUP_SIZE — общее количество локальных рабочих групп, доступных для OpenCL программы.
    • CL_KERNEL_LOCAL_MEM_SIZE — размер локальной памяти в байтах, которую использует OpenCL программа для всех параллельных задач в группе. Используйте CL_DEVICE_LOCAL_MEM_SIZE для получения доступного максимума.
    • CL_KERNEL_PRIVATE_MEM_SIZE — минимальный размер приватной памяти в байтах, используемой каждой задачей в кернеле OpenCL программы.

    bool CLExecutionStatus(int kernel)
    Возвращает состояние выполнения OpenCL программы. В качестве параметра передается хэндл на кернел программы OpenCL.

    bool CLSetKernelArgMemLocal(int kernel_handle,int arg_index,ulong local_mem_size)
    Задает локальный буфер в качестве аргумента kernel-функции. В качестве параметров передаются хэндл на кернел программы OpenCL, номер аргумента OpenCL функции и размер буфера.

  5. Добавлен код ответа TRADE_RETCODE_LIMIT_POSITIONS. Количество открытых позиций, которое можно одновременно иметь на счете, может быть ограничено настройками сервера. При достижении лимита в ответ на выставление ордера сервер вернет ошибку TRADE_RETCODE_LIMIT_POSITIONS. Ограничение работает по-разному в зависимости от типа учета позиций на счете:

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

  6. Исправлена ошибка, в некоторых случаях приводившая к пропуску тиков в тиковой истории.
  7. Исправлены ошибки косвенной типизации шаблонов.
  8. Обновлена библиотека работы с математической статистикой.
  9. Добавлена функция TranslateKey, которая возвращает  Unicode-символ по виртуальному коду клавиши, учитывая текущий язык ввода и состояние управляющих клавиш. Функция использует ToUnicodeEx для преобразования нажатых пользователем клавиш в Unicode-символы.
    void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
      {
       if(id==CHARTEVENT_KEYDOWN)
         {
          short sym=TranslateKey((int)lparam);
          //--- если введённый символ успешно преобразован в Юникод
          if(sym>0)
             Print(sym,"'",ShortToString(sym),"'");
          else
             Print("Error in TranslateKey for key=",lparam);
         }
      }

Market

  1. Исправлено открытие страницы продукта при скачивании демо-версии.

Tester

  1. После завершения оптимизации результаты теперь автоматически сортируются по колонке "Результат".
  2. В контекстное меню вкладки результатов оптимизации и журнала добавлена опция автоматического переключения на результаты после завершения оптимизации.
  3. Тестер стратегий теперь остается в режиме оптимизации после запуска одиночного тестирования. Ранее, если из вкладки результатов оптимизации запускалось одиночное тестирование, тестер стратегий полностью переходил в режим одиночного тестирования. Для проведения повторной оптимизации было необходимо включать ее вновь в настройках.
  4. Теперь наборы входных параметров можно сохранять не только в виде set-файлов, но и в виде настроек локального тестера стратегий с удобным доступом к ним через контекстное меню.




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

MetaEditor

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




  2. Исправлена ошибка определения кодировки исходных файлов.
  3. Исправлен поиск по файлам в кодировке UTF-8.
  4. Исправлена ошибка выделения текста мышью при наличии в нем знаков табуляции.
  5. Добавлен перевод интерфейса на венгерский и румынский языки.

Обновлена документация.

1234567891011121314