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

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

17 сентября 2020
MetaTrader 5 build 2615: Фундаментальный анализ и комплексный критерий в тестере стратегий

Terminal

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



    Также новые свойства теперь доступны в спецификации контрактов:



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



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



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

  3. Исправлено вычисление потенциальной прибыли/убытка для уровней Стоп Лосс и Тейк Профит на графиках.



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

MQL5

  1. Добавлена функция MathClassify. Она определяет тип вещественного числа и возвращает результат в виде значения из нового перечисления ENUM_FP_CLASS.
    ENUM_FP_CLASS  MathClassify(
       double  value      // вещественное число
       );
    Перечисление содержит следующие значения:
    • FP_SUBNORMAL — субнормальное число, которое находится ближе к нулю, чем наименьшее представимое нормализованное число DBL_MIN — 2.2250738585072014e-308.
    • FP_NORMAL — нормализованное число, которое находится в диапазоне от 2.2250738585072014e-308 до 1.7976931348623158e+308.
    • FP_ZERO — положительный или отрицательный ноль.
    • FP_INFINITE — число, которое не может быть представлено соответствующим типом — положительная или отрицательная бесконечность.
    • FP_NAN — не является числом.

    Для проверки вещественного числа на валидность можно использовать следующий код:
    if(MathClassify(value)>FP_ZERO)
      {
       Print("value is not a valid number");
      }
  2.  Добавлены новые свойства символов, которые можно получить функциями SymbolInfoString:
    • SYMBOL_COUNTRY — страна компании, чьи акции обращаются на бирже.
    • SYMBOL_SECTOR_NAME — сектор экономики, к которому относится инструмент. Например: энергетика, финансы, здравоохранение и т.д.
    • SYMBOL_INDUSTRY_NAME — индустрия, к которой относится инструмент. Например: спортивная одежда и аксессуары, производство автомобилей, ресторанный бизнес и т.д.

    Свойства возвращаются в виде строки.

    Сектор и индустрия, к которым относится инструмент, также можно получить в виде значения перечисления. Для этого запросите следующие свойства при помощи функции SymbolInfoInteger:
    • SYMBOL_SECTOR
    • SYMBOL_INDUSTRY
    Для работы с этими свойствами добавлены перечисления ENUM_SYMBOL_SECTOR и ENUM_SYMBOL_INDUSTRY.

  3. Реализован новый механизм управления памятью в MQL5-программах. Он выделяет память до 3-х раз быстрее. Также он позволяет избежать ряда потенциальных ошибок доступа к памяти.
  4. Оптимизирована и значительно ускорена работа с торговой историей счета при помощи функций History*.
  5. Исправлен вызов WebRequest из точки входа OnDeinit. Ранее при остановке эксперта эта функция не вызывалась.
  6. Исправлен вызов функции WebRequest из сервисов. Ранее функция могла не вызываться после перезапуска сервиса.
  7. Добавлена проверка поддержки устройством типа double при использовании OpenCL. В финансовых расчетах тип float не подходит из-за слишком большого округления. В связи с этим при расчетах платформа явно требует поддержку double. Теперь при ее отсутствии в журнал платформы будут выводиться сообщения вида device '<name>' does not support type 'double'. Ранее вместо него выдавалось общее сообщение об ошибке.
  8. Значительно ускорено выполнение функции AccountInfoDouble с параметрами ACCOUNT_EQUITY и ACCOUNT_BALANCE.
  9. Исправлена ошибка, возникавшая при применении шаблона к графику при помощи функции ChartApplyTemplate.
  10. Исправлена ошибка вызова функции ChartSetInteger с параметром CHART_BRING_TO_TOP.
  11. В поставляемую библиотеку Alglib добавлен метод Conjugate для расчета сопряженного числа комплексного числа. Библиотека находится в каталоге MQL5\Include\Math\Alglib.
  12. Полностью обновлен профилировщик кода. Новый профилировщик работает значительно быстрее и точнее предыдущего.
    • Для анализа в новом профилировщике используется код, оптимизированный точно также, как при компиляции релизной версии программы. Это позволяет более точно определить скорость работы кода, поскольку именно такой код будет использоваться в реальной работе программы.
    • Новый профилировщик использует метод профилирования "Sampling". Это легковесный и точный метод, который собирает статистические данные о работе приложения: через определенные интервалы времени снимаются данные о стеке вызовов и на основе них производится расчет производительности.
    • В отличие от предыдущей версии, новый профилировщик не вносит никаких изменений в анализируемый код. Ранее используемый метод "Instrumentation" добавлял в код определенные конструкции, которые использовались для замера скорости работы функции. Это могло влиять на скорость работы конечного кода.

    Работа над профилировщиком еще продолжается. Дальнейшие улучшения ожидайте в ближайших версиях платформы.

Tester

  1. Оптимизирована работа с облачной сетью вычислений MQL5 Cloud Network. Исправлены ошибки загрузки экспертов агентами.
  2. Добавлен новый критерий оптимизации "Complex Criterion max". Это интегральный, комплексный показатель качества прохода тестирования. Он учитывает сразу несколько параметров:
    • Количество сделок
    • Просадка
    • Фактор восстановления
    • Мат. ожидание выигрыша
    • Коэффициент Шарпа

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

    Выберите новый критерий в настройках тестера стратегий и запустите оптимизацию.



    В результатах оптимизации значение "Complex Criterion max" будет выведено отдельной колонкой "Result". По ней можно сортировать проходы. Новый критерий также поддерживает цветовую подсветку, которая позволяет визуально определить наиболее удачные проходы. Значения ниже 20 подсвечиваются красным, выше 80 — темно зеленым.



  3. Исправлено начисление пользовательских комиссий в тестере стратегий.

MetaEditor

  1. Начата глобальная переработка функций интеллектуального управления кодом (интеллисенс).
    • Теперь в подсказках указывается полная сигнатура функции, а не только ее название.
    • Шрифт, которым отображаются подсказки, теперь берется из настроек MetaEditor.

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

Обновлена документация
24 июля 2020
MetaTrader 5 build 2560: Улучшения во встроенной системе обучения

Terminal

  1. В предыдущем обновлении платформы мы полностью переработали встроенную систему обучения. Сейчас мы внесли финальные штрихи:
    • Сделали иконку прогресса более заметной
    • Доработали тексты нескольких советов, чтобы ни один пользователь не запутался
    • Исправили ряд ошибок с расчетом прогресса
    Пройдите все уроки, чтобы использовать возможности платформы на 100%.



  2. Оптимизирована и значительно ускорена обработка больших потоков тиков (десятки тысяч в минуту и более).
  3. Исправлены ошибки в расчете изменения цены относительно закрытия предыдущей сессии. Чтобы увидеть этот показатель, включите колонку "Дневное изменение" в контекстном меню "Обзора рынка".

MQL5

  1. Оптимизирован и значительно ускорен доступ к числовым свойствам графика при помощи функции ChartGetInteger.
  2. Исправлены ошибки поиска пользовательского индикатора, запрашиваемого из MQL5-программ через функцию iCustom.

MetaEditor

  1. Добавлена компиляция C/C++-программ в проектах.

Tester

  1. Значительно оптимизирована работа сети облачных вычислений MQL5 Cloud Network. Сеть стала лучше находить подходящих агентов, быстрее распределять задания и возвращать результаты расчетов.

Обновлена документация.
10 июля 2020
MetaTrader 5 build 2530: Сортировка в Обзоре рынка и удобная работа с результатами оптимизации

Terminal

  1. В Обзор рынка добавлена возможность сортировки данных:

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




  2. Существенно переработана и улучшена встроенная система обучения.

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



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

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



  4. Оптимизировано и значительно ускорено применение цен на открытые позиции. При приходе новых тиков в терминал цены, прибыль и маржевые требования по позициям теперь обновляются быстрее.
  5. Исправлен расчет встроенного индикатора Stochastic Oscillator. Ошибка возникала при ограничении количества баров, отображаемых на графиках.

MQL5

  1. Оптимизирована и значительно ускорена работа функции доступа к свойствам торгового счета AccountInfo*.
  2. Оптимизирован и значительно ускорен доступ к числовым свойствам графика при помощи функции ChartGetInteger.

MetaEditor

  1. Для более удобной работы с версионным хранилищем файлов MQL5 Storage в контекстное меню вкладок редактирования кода добавлены три команды:

    • Сравнение рабочей копии файла с текущей ревизией
    • Откат текущих изменений
    • Просмотр истории изменений файла в хранилище




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


  3. Улучшена работа функции поиска и замены:

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

  4. Исправлен поиск в окне сравнения файлов при работе с версионным хранилищем MQL5 Storage.
  5. Добавлена возможность поиска и замены в файлах, включенных в текущий файл через директиву #include.
    Это позволит быстрее работать с проектами, состоящими из множества файлов. Например, для замены текста во всех файлах программы вам не понадобится указывать их каталоги вручную, редактор найдет их автоматически по директивам #include.



Tester

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

    • Баланс + максимальная прибыльность -> Максимальная прибыльность
    • Баланс + максимальное матожидание выигрыша -> Максимальное матожидание выигрыша
    • Баланс + минимальная просадка -> Минимальная просадка
    • Баланс + максимальный фактор восстановления -> Максимальный фактор восстановления
    • Баланс + максимальный коэффициент Шарпа -> Максимальный коэффициент Шарпа




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



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

    • Баланс — синим цветом раскрашиваются значения выше начального депозита, красным — ниже.
    • Прибыль — синим цветом раскрашиваются значения выше нуля, красным — ниже.
    • Матожидание выигрыша — синим цветом раскрашиваются значения выше нуля, красным — ниже.
    • Просадка — от зеленого (0-5%) до красного (выше 30%).
    • Коэффициент Шарпа — от зеленого (больше 2) до красного (ниже 0).
    • Фактор восстановления — от зеленого (больше 2) до красного (ниже 1).



  4. Добавлены фильтры в таблице результатов оптимизации. Теперь вы можете быстро скрыть из списка неудачные проходы:

    • где не было ни одной сделки
    • где робот показал убытки
    • где просадка более 50%
    • где фактор восстановления ниже 1
    • где коэффициент Шарпа меньше 0.5



  5. Значительно оптимизирована работа сети облачных вычислений MQL5 Cloud Network. Например, теперь при повторной оптимизации советника сеть старается использовать для него тех же агентов тестирования, что и ранее. С высокой долей вероятности на них уже готово все рыночное окружение, включая исторические данные, и расчеты можно запустить сразу же.
Обновлена документация.
26 июня 2020
MetaTrader 5 iOS build 2505: Свайпы, новые разделы и цветовые схемы

MetaTrader 5 iOS build 2505

Мы собрали пожелания пользователей iOS-версии MetaTrader 5 и сделали масштабный редизайн приложения

  • Добавлен поиск символов в раздел котировок.
  • Для графиков добавлена цветовая схема "Цветное на белом" по умолчанию.
  • Добавлено отображение сделок на графиках.
  • Панель для смены таймфрейма перенесена наверх и больше не перекрывает график.
  • Добавлено вертикальное масштабирование графиков — просто проведите по шкале цен.
  • Теперь можно переносить счета на другие устройства при помощи QR-кодов.
  • Добавлено отображение изменения цены за сутки в пипсах в разделе котировок. Информация доступна, только если ее предоставляет брокер.
  • В разделы "Котировки", "История" и "Торговля" добавлена поддержка жеста свайпа.
  • Добавлен адаптивный выбор торгового объема для быстрой торговли.
  • Добавлена возможность доступа к генератору OTP по FaceID или отпечатку пальца.
Переработана навигация для iPad
  • Панель быстрой торговли перенесена вверх;
  • Добавлено нижнее меню с разделами и индикаторами;
  • Разделы почты, новостей и управления счетом перенесены в отдельные вкладки;
  • Улучшено управление счетами.
5 июня 2020
MetaTrader 5 build 2485: Улучшения в iCustom и общая оптимизация в MQL5

Terminal

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

MQL5

  1. Изменен алгоритм загрузки пользовательских индикаторов с помощью iCustom.

    Если перед именем пользовательского индикатора указан обратный слеш '\', то EX5-файл индикатора ищется относительно корневой папки MQL5. Таким образом при вызове iCustom(Symbol(), Period(), "\FirstIndicator"...) индикатор будет загружаться как MQL5\FirstIndicator.ex5. Если по этому пути файла не окажется, вернется ошибка 4802 (ERR_INDICATOR_CANNOT_CREATE).

    Если же путь не начинается с '\', то поиск и загрузка индикатора производятся в следующей последовательности:

    • Сначала EX5-файл индикатора ищется в той же папке, где находится EX5-файл вызывающей программы. Например, советник CrossMA.EX5 находится в папке MQL5\Experts\MyExperts и содержит вызов iCustom(Symbol(), Period(), "SecondIndicator"...) – тогда поиск индикатора производится по пути MQL5\Experts\MyExperts\SecondIndicator.ex5.
    • Если индикатор не найден в том же каталоге, то поиск производится относительно корневой директории индикаторов MQL5\Indicators. То есть ищется файл MQL5\Indicators\SecondIndicator.ex5. Если индикатор не найден по обоим путям, то функция вернет INVALID_HANDLE и будет взведена ошибка 4802 (ERR_INDICATOR_CANNOT_CREATE).

    Если путь к индикатору задан в поддиректории, например как MyIndicators\ThirdIndicator, то сначала поиск ведется в папке вызывающей программы (советник находится в папке MQL5\Experts\MyExperts) по пути MQL5\Experts\MyExperts\MyIndicators\ThirdIndicator.ex5, а затем в случае неуспеха ищется файл MQL5\Indicators\MyIndicators\ThirdIndicator.ex5. При этом разделителем в пути нужно обязательно указывать двойной обратный слеш '\\', например, iCustom(Symbol(), Period(), "MyIndicators\\ThirdIndicator"...).

    Также при обнаружении в коде программы вызова пользовательского индикатора через iCustom, компилятор будет неявно добавлять директиву "#property tester_indicator XXX", если таковая отсутствует.

  2. Оптимизирована и значительно ускорена работа функции HistorySelect, позволяющая запрашивать историю сделок и ордеров.
  3. Исправлена ошибка, возникавшая при запросе тиков через функцию CopyTicksRange. Из-за нее в качестве начала диапазона принималось начало указанного дня без учета указанного времени.
  4. Оптимизировано и значительно ускорено отображение предупреждений с помощью функции Alert.
  5. Добавлено новое свойство SYMBOL_TIME_MSC — время последнего тика символа в миллисекундах. Для получения свойства используется функция SymbolInfoInteger.
29 мая 2020
MetaTrader 5 build 2470

Terminal

  • Исправлена ошибка, из-за которой в "Обзор рынка" была невозможно добавлять финансовые инструменты, в чьих названиях содержались символы '-', '=', '_' и '+'.

MQL5

MetaEditor

  • Исправлен расширенный поиск по символам конца строки '\n' и '\r'.

Обновлена документация.
22 мая 2020
MetaTrader 5 build 2450: Сервис "Подписки", улучшения в интерфейсе и удобные функции в MetaEditor

Terminal

  1. Представляем новый сервис — "Подписки". С ним вы сможете легко получить дополнительные услуги, которые помогут вам в трейдинге. Например, вы можете купить подписку на качественные рыночные данные от известных поставщиков, чтобы потом эти данные анализировать и разрабатывать на них свои стратегии. Или же заказать услуги персонального менеджера, который поможет вам освоить основы торговли и разобраться в тонкостях платформы MetaTrader 5.

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

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


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



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

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

    Скоро подписку на рыночные данные можно будет купить, подключившись к MetaQuotes-Demo
    Мы планируем настроить на своем демо-сервере подписки на рыночные данные с множества торговых площадок по всему миру. Всего в несколько кликов вы сможете получить котировки в реальном времени с Nasdaq, CME, NYSE, BOVESPA и многих других бирж, чтобы смотреть по ним графики, анализировать динамику цен с помощью встроенных объектов и индикаторов и разрабатывать свои стратегии. Оплачивать подписки можно будет через аккаунт MQL5.community — аналогично тому, как это происходит для Маркета, Сигналов и Хостинга.

  2. В настройки графиков добавлена опция "Показывать тикер". Она позволяет показать/скрыть строку с названием торгового инструмента, таймфреймом и пользовательским комментарием.


  3. В настройки терминала и в настройки графика добавлена опция "Показывать торговую историю". Функция отображения ваших входов и выходов из рынка на графиках была доступна и ранее, однако для управления ею использовался раздел "Инструменты / История". Теперь показ истории сделок настраивается более гибко и удобно. Вы можете определить настройку сразу для всех графиков или же задавать ее отдельно для каждого.


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


  4. В настройки графика добавлена новая цветовая схема "Цветное на белом".


  5. В контекстное меню позиций и ордеров добавлены команды для быстрого открытия стакана цен и графика по соответствующему инструменту:


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


  7. Улучшено отображение торговых уровней на графике.
    • У позиций, ордеров и уровней больше не показываются тикеты, чтобы не перегружать график
    • Подписи отображаются в верхнем регистре для лучшей читаемости
    • У объемов не показывается дробная часть, если она нулевая
    • При высоте графика менее 80 пикселей уровни скрываются




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



  9. В список открытых ордеров и позиций добавлены новые колонки:
    • Изменение — доходность операции в процентах
    • Стоимость — рыночная стоимость позиции
    • Идентификатор эксперта — значение, указываемое экспертом при открытии ордеров и позиций (магический номер)

    Для включения/отключения новых колонок используйте контекстное меню раздела.


    Колонки стоимости позиций и идентификаторов экспертов также добавлены в разделе торговой истории.

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

  10. Добавлена поддержка отрицательных цен. Теперь при возникновении ситуаций, таких как недавнее падение цен на нефть ниже нуля, платформа будет работать корректно:
    • Показывать котировки в Обзоре рынка
    • Показывать графики и стаканы цен
    • Выполнять торговые операции
    • Рассчитывать прибыль и обеспечение и т.д.

  11. Максимальное число инструментов, которые одновременно можно включить в Обзоре рынка, увеличено до 5000.
  12. Исправлена сортировка списка чатов по дате последнего обновления.
  13. Оптимизирована и значительно ускорена работа с большим количеством торговых инструментов (50 000 и более).
  14. Исправлена ошибка, из-за который нельзя было закрыть позицию, чей текущий объем не соответствовал шагу изменения объема по символу.

MQL5

  1. Оптимизирована и значительно ускорена работа с тиковой историей.
  2. Добавлены новые функции для работы с базами данных:
    • DatabaseReset — сбрасывает запрос в начальное состояние, как после вызова DatabasePrepare. Функция предназначена для многократного исполнения запроса с разными значениями параметров. Например, при массовом добавлении данных в таблицу с помощью команды INSERT для каждой записи необходимо сформировать собственный набор значений каждого поля.
    • DatabaseBind — устанавливает значение параметра в запросе. Функцию следует использовать в случае, когда SQL запрос содержит параметризируемые значения "?" или "?N", где N означает номер параметра (начиная с единицы).
    • DatabaseBindArray — устанавливает массив в качестве значения параметра.
  3. Добавлен флаг FSD_FILE_MUST_EXIST для функции FileSelectDialog. Он указывает, что выбранные файлы должны существовать.
  4. В перечисление ENUM_SYMBOL_INFO_DOUBLE добавлены значения для описания опционов:
    • SYMBOL_PRICE_CHANGE — изменение текущей цены относительно конца предыдущего торгового дня, выраженное в процентах.
    • SYMBOL_PRICE_VOLATILITY — волатильность цены в процентах.
    • SYMBOL_PRICE_THEORETICAL — теоретическая цена опциона.
    • SYMBOL_PRICE_DELTA — дельта опциона/варранта. Показывает, на сколько единиц изменится цена опциона при изменении цены базового актива на 1 единицу.
    • SYMBOL_PRICE_THETA — тета опциона/варранта. Количество пунктов, которое будет терять цена опциона каждый день из-за временного распада, т.е. при приближении даты экспирации.
    • SYMBOL_PRICE_GAMMA — гамма опциона/варранта. Показывает скорость изменения дельты — насколько быстро или медленно меняется опционная премия.
    • SYMBOL_PRICE_VEGA — вега опциона/варранта. Показывает количество пунктов, на которое изменится цена опциона при изменении волатильности на 1%.
    • SYMBOL_PRICE_RHO — ро опциона/варранта. Отражает чувствительность теоретической цены опциона к изменению процентной ставки на 1%.
    • SYMBOL_PRICE_OMEGA — омега опциона/варранта. Эластичность опциона — относительное процентное изменение цены опциона на процентное изменение цены базового актива.
    • SYMBOL_PRICE_SENSITIVITY — чувствительность опциона/варранта.  Показывает, на сколько пунктов должна измениться цена базового актива опциона, чтобы цена опциона изменилась на один пункт.

  5. В функции DatabaseExport добавлен экспорт BLOB-полей в формате HEX.
  6. В перечисление ENUM_CHART_PROPERTY_INTEGER добавлено свойство CHART_SHOW_TICKER — отображение в левом верхнем углу тикера символа. Установка CHART_SHOW_TICKER в значение false одновременно также устанавливает CHART_SHOW_OHLC в значение false и отключает показ OHLC.   
  7. Улучшено качество кода, генерируемого компилятором. Это увеличило скорость его исполнения.
  8. Исправлен ряд ошибок при компиляции и исполнении шаблонных функций и классов. В частности:
    • Ошибка несоответствия приоритетов для вызовов перегруженных шаблонных функций
    • Ошибка при генерации шаблонного метода/класса
    • Ошибка при попытке доступа к internal class для шаблонного параметра шаблонной функции
    • Ошибка генерации кода шаблонного класса при использовании internal class
    • Ошибка при использовании шаблонного объекта B<int> перед B<void*>
    • Ошибка при создании сложных несколько раз обернутых объектов с внутренним типом "С"
    • Ошибка при передаче в качестве const ref template аргумента указателя на функцию
    • Ошибка при передаче internal struct в шаблонную функцию
    • Ошибка несоответствия приоритетов выполнения шаблонных функций
    • Некорректный подсчет скобок в циклах for и do-while
    • Некорректный подсчет фигурных скобок в описании структуры класса
    • Медленная работа при добавлении по одному элементу в массив с помощью ArrayResize
    • Ошибка при выборе подходящей перегруженной функции
  9. Исправлена ошибка, возникавшая в некоторых случаях в функции CustomTicksReplace.
  10. Исправлен выбор периода для отображения истории торговых ордеров. Теперь при задании диапазона используется дата исполнения ордеров, а не дата создания, как это было раньше.

Python

  1. В метод initialize добавлен параметр path —  путь к файлу metatrader.exe или metatrader64.exe. Если путь не указан, модуль попытается найти исполняемый файл самостоятельно.
  2. Добавлены новые методы:
    • symbols_get — получает все финансовые инструменты из терминала MetaTrader 5.
    • symbols_total — получает количество всех финансовых инструментов в терминале MetaTrader 5.

  3. Добавлена возможность фильтрации по группе символов для функций orders_get, positions_get, history_orders_get и history_deals_get. Используйте формы вызова с параметром "group".
  4. В возвращаемом значении order_send и order_check теперь передается полное описание изначального запроса  — в поле "request". Например:
    ...
    comment=Request executed
    request_id=55
    retcode_external=0
    request=TradeRequest(action=1, magic=234000, order=0, symbol='USDJPY', volume=0.1, price=108.018, stoplimit=0.0, ...
        traderequest: action=1
        traderequest: magic=234000
        traderequest: order=0
        traderequest: symbol=USDJPY
        traderequest: volume=0.1
        traderequest: price=108.018
        traderequest: stoplimit=0.0
    ...
  5. Теперь Python-скрипты при запуске на графике получают в качестве аргументов имя символа и период этого графика в минутах.
    import sys
    
    chart_symbol='unknown'
    chart_tf=1
    
    if len(sys.argv) == 3:
        chart_symbol, chart_tf = sys.argv[1:3];
    
    print("Hello world from", chart_symbol, chart_tf)
    
    >> Hello world from T.NYSE 15

MetaEditor

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


  2. Расширены возможности поиска и замены.

    Добавлена возможность расширенного поиска с частичной поддержкой регулярных выражений. Используйте \r, \n, \t для указания в поисковых запросах символов переноса строки и табуляции. Диалоги поиска и замены объединены в один с несколькими вкладками.


    Добавлена отдельная вкладка для поиска по сообществам программистов. Среди них теперь не только MQL5.community, но и GitHub, MSDN и Stack Overflow.


    Результаты поиска по внешним ресурсам также удобно выводятся в окно инструментов MetaEditor:

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

    Помимо этого в окно результатов поиска добавлена возможность их сортировки по дате.

  3. Добавлена возможность быстро изменять размер шрифта в окне редактирования кода. Для этого зажмите "Ctrl" и прокрутите колесо мыши.
  4. Добавлена возможность импорта таблиц из CSV файлов в таблицы базы данных. При импорте можно задать параметры:
    • Имя для таблицы в базе данных
    • Автоматическое или ручное определение кодировки файла
    • Тип разделителя данных
    • Пропуск определенного количества строк в начале
    • Префикс комментариев
    • Есть ли в файле названия колонок
    • Как будут определяться переносы строк
    • Добавить данные в новую таблицу или уже имеющуюся
    • Какие кавычки использовать для строк



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



  6. Отключена поддержка MQL4, так как теперь генерируется только 64-битный код.
  7. Исправлена работа сниппета "Class".
  8. Исправлена поддержка абсолютных путей в проектах.

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

6 марта 2020
MetaTrader 5 build 2360: Расширение интеграции с SQLite
  1. MQL5: Ошибки работы с базами данных SQLite теперь можно анализировать стандартными средствами MQL5. Для этого в язык добавлены следующие коды ошибок:

    • ERR_DATABASE_ERROR — общая ошибка.
    • ERR_DATABASE_INTERNAL — ошибка внутренней логики SQLite.
    • ERR_DATABASE_PERM — отказано в доступе.
    • ERR_DATABASE_BUSY — файл базы данных заблокирован.
    • ERR_DATABASE_LOCKED — таблица в базе данных заблокирована.
    • ERR_DATABASE_NOMEM — для завершения операции недостаточно памяти.
    • ERR_DATABASE_READONLY — попытка записи в базу данных, доступной только для чтения.
    • ERR_DATABASE_IOERR — ошибка дискового ввода-вывода.
    • ERR_DATABASE_CORRUPT — образ диска базы данных испорчен.
    • ERR_DATABASE_FULL — ошибка вставки, так как база данных заполнена.
    • ERR_DATABASE_CANTOPEN — невозможно открыть файл базы данных.
    • ERR_DATABASE_PROTOCOL — ошибка протокола блокировки базы данных.
    • ERR_DATABASE_SCHEMA — схема базы данных изменена.
    • ERR_DATABASE_TOOBIG — строка или BLOB превышает ограничение по размеру.
    • ERR_DATABASE_CONSTRAINT — прервано из-за нарушения ограничения.
    • ERR_DATABASE_MISMATCH — несоответствие типов данных.
    • ERR_DATABASE_MISUSE — ошибка неправильного использования библиотеки.
    • ERR_DATABASE_AUTH — отказано в авторизации.
    • ERR_DATABASE_RANGE — ошибка применения параметра, неверный индекс.
    • ERR_DATABASE_NOTADB — открытый файл не является файлом базы данных.

  2. MQL5: Исправлена работа функции DatabaseImport, позволяющей импортировать информацию из файла в таблицу базы данных.
  3. MetaEditor: Исправлен вывод в журнал строк длиной более 32Кб.
  4. MetaEditor: Исправлена ошибка, связанная с использованием неверной кодировки при выводе сообщений из консоли Python (stdout, stderr) в раздел "Ошибки" редактора.
  5. Обновлена документация.
21 февраля 2020
MetaTrader 5 build 2340: Управление настройками счета в тестере и расширение интеграции с Python

MetaEditor

  1. Добавлена возможность удобной работы с SQLite базами данных.

    В предыдущем обновлении платформы мы добавили поддержку работы с базами данных SQLite прямо из MQL5. Теперь основные функции стали доступны и через пользовательский интерфейс MetaEditor:

    • Создание и подключение к базам данных
    • Просмотр таблиц и быстрый запрос данных
    • Составление и выполнение SQL-запросов, откат изменений

    Как это работает
    Для быстрого создания баз данных воспользуйтесь "Мастером MQL5". Здесь вы можете сразу создать первую таблицу и определить список ее полей.



    Создав базу, вы перейдете в новый раздел "Навигатора". Из него происходит вся работа с данными.

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

    В основной части редактора происходит работа с базой: заполняйте таблицу данными, делайте поиск и выборки, вводите SQL-запросы и т.д.


    Более подробно о работе с базами данных в MetaTrader 5 читайте в статье "SQLite: нативная работа с базами данных на SQL в MQL5".

  2. Продолжается работа по добавлению поддержки мультиязычных проектов. В этой версии мы расширили функции для работы со скриптами на Python:

    • Теперь их можно удобно создавать через "Мастер MQL5", сразу включая в код зависимости от необходимых библиотек.
    • В навигаторе для них добавлены специальные иконки, в редакторе — подсветка синтаксиса.
    • При запуске скрипта через MetaEditor сообщения из консоли Python (stdout, stderr) выводятся в раздел "Ошибки".




    Для запуска скрипта в редакторе нажмите "Компилировать":





    Для работы с Python не забудьте указать путь к нему в разделе "Настройки / Компиляторы" в MetaEditor. А для работы с библиотекой MetaTrader 5 установите ее командой:
    pip install MetaTrader5
    Подробнее об интеграции с Python читайте в документации.
  3. MetaEditor: Добавлен показ файлов баз данных SQLite (*.db;*.sdb;*.sqlite;*.db3;*.s3db;*.sqlite3) в "Навигаторе".
  4. MetaEditor: Исправлены ошибки при сохранении свойств проекта.

MQL5

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

    Новое именование команд
    Имеющиеся команды были переименованы:
    MT5Initialize       -> initialize
    MT5Shutdown         -> shutdown
    MT5TerminalInfo     -> terminal_info
    MT5Version          -> version
    MT5CopyRatesFrom    -> copy_rates_from
    MT5CopyRatesFromPos -> copy_rates_from_pos
    MT5CopyRatesRange   -> copy_rates_range
    MT5CopyTicksFrom    -> copy_ticks_from
    MT5CopyTicksRange   -> copy_tick_range

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

    • account_info() — получение информации о текущем счете. Аналог AccountInfoInteger , AcountInfoDouble и AccountInfoString.
    • positions_total() — получение количества открытых позиций. Аналог PositionsTotal.
    • positions_get(symbol, ticket) — получение открытых позиций по символу или тикету.
    • orders_total() — получение количества ордеров. Аналог OrdersTotal.
    • orders_get(symbol, ticket) — получение открытых ордеров по символу или тикету.
    • history_orders_total(from, to) — получение количества ордеров в истории в заданном промежутке времени.
    • history_orders_get(from, to, position, ticket) — получение ордеров из истории в заданном промежутке по тикету или с фильтрацией по позиции.
    • history_deals_total() — получение количества сделок в истории. Аналог HistoryDealsTotal.
    • history_deals_get(from, to, position, ticket) — получение сделок из истории в заданном промежутке по тикету или с фильтрацией по позиции.
    • symbol_info(symbol) — получение информации о финансовом инструменте. Аналог SymbolInfoInteger, SymbolInfoDouble, SymbolInfoString.
    • symbol_info_tick(symbol) — получение последнего тика по символу. Аналог SymbolInfoTick.
    • symbol_select(symbol, enable) — включение/выключение символа в "Обзоре рынка". Аналог SymbolSelect.
    • order_check(request) — проверка маржи для ордера. Аналог OrderCheck.
    • order_send(request) — отправка ордера на сервер. Аналог OrderSend.
    • order_calc_margin(action, symbol, volume, price) — расчет маржи для ордера. Аналог OrderCalcMargin.
    • order_calc_profit(action, symbol, volume, price_open, price_close) — расчет прибыли. Аналог OrderCalcProfit.

    Запуск скриптов Python на графиках
    Теперь скрипты на Python можно запускать прямо на графиках в платформе, аналогично обычным MQL5-программам. В "Навигаторе" они будут отображаться специальными иконками.



    Сообщения скрипта будут выводиться в раздел "Инструменты / Эксперты". Если в скрипте используется библиотека MetaTrader 5, то он сможет получать информацию об инструменте, счете и торговать.

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

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



    Скриптам на Python будут разрешены торговые операции только при явном отключении этой опции.

  2. Значительно ускорен повторный запуск MQL5-программ и повторное создание пользовательских индикаторов из MQL5-программ. В некоторых случаях скорость повысилась в сотни раз.
  3. Добавлены функции для работы с базами данных:

    DatabaseImport
    Импортирует в таблицу данные из файла.
    long  DatabaseImport(
       int           database,          // хендл базы данных, полученный в DatabaseOpen
       const string  table,             // имя таблицы для вставки данных
       const string  filename,          // имя файла для импорта данных
       uint          flags,             // комбинация флагов
       const string  separator,         // разделитель данных 
       ulong         skip_rows,         // сколько первых строк пропустить 
       const string  skip_comments      // строка символов, которые определяют комментарии
       );

    DatabaseExport
    Экспортирует таблицу или результат выполнения SQL-запроса в CSV-файл. Файл создается в кодировке UTF-8.
    long  DatabaseExport( 
       int           database,           // хендл базы данных, полученный в DatabaseOpen 
       const string  table_or_sql,       // имя таблицы или SQL-запрос 
       const string  filename,           // имя CSV-файла для экспорта данных 
       uint          flags,              // комбинация флагов 
       const string  separator           // разделитель данных в CSV-файле 
       );

    DatabasePrint
    Печатает таблицу или результат выполнения SQL-запроса в журнал экспертов.
    long  DatabasePrint(
       int           database,          // хендл базы данных, полученный в DatabaseOpen
       const string  table_or_sql,      // таблица или SQL-запрос
       uint          flags              // комбинация флагов
       );

  4. Добавлена функция FileSelectDialog, которая вызывает системный диалог создания/открытия файла или папки.
    int  FileSelectDialog(
       string   caption,              // заголовок окна
       string   initial_dir,          // начальная папка
       string   filter,               // фильтр расширений
       uint     flags,                // комбинация флагов
       string&  filenames[],          // массив с именами файлов
       string   default_filename      // имя файла по умолчанию
       );
    Новая функция позволит реализовать удобное взаимодействие пользователя с MQL5-программой.

  5. В перечисление ENUM_DEAL_PROPERTY_DOUBLE добавлено значение DEAL_FEE — оплата за проведение сделки. Фактически, это отдельный вид комиссии, которая может взиматься брокером.

Tester

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



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

    Маржа
    Здесь вы можете полностью контролировать, как будет резервироваться маржа и какая система учета позиций будет использована при тестировании:

    • Управление рисками — модель управления рисками: внебиржевые и биржевые, с неттингом и хеджингом. Подробная информация о них доступна в справке.
    • Уровень "Margin call" — уровень средств на счете, при достижении которого он переходит в состояние Margin call.
    • Уровень "Stop out" — уровень средств, при достижении которого на счете принудительно снимаются ордера и закрываются торговые позиции. Оба уровня можно указывать в деньгах и в процентах. В первом случае уровни определяются как значение показателя "Средства" на счету. При выборе опции "В процентах" уровни определяются как значение показателя "Уровень маржи" на счету (Средства/Маржа*100).
    • Нереализованная — в данном поле указывается, каким образом будет учитываться текущая незафиксированная прибыль/убыток в свободной марже:
      • Не использовать нереализованную прибыль/убыток — не учитывать открытые позиции при расчете.
      • Использовать нереализованную прибыль/убыток — использовать при расчете убыток и прибыль по открытым позициям.
      • Использовать нереализованную прибыль — использовать только прибыль.
      • Использовать нереализованный убыток — использовать только убыток.
    • Дневная фиксированная — в данном поле указывается, каким образом будет учитываться прибыль/убыток, зафиксированный трейдером в течение торгового дня, в свободной марже:
      • Использовать дневную фиксированную прибыль/убыток — учитывать прибыль и убыток, зафиксированные в течение торгового дня, в свободной марже.
      • Использовать дневной фиксированный убыток — учитывать только убыток, зафиксированный в течение торгового дня, в свободной марже. В течение дня накопленная прибыль фиксируется в отдельном поле счета ("Заблокировано"). По окончании торгового дня накопленная прибыль освобождается (обнуляется) и отражается на балансе счета (учитывается в свободной марже).
    • Освобождать накопленную прибыль в конце дня — данная опция доступна только при включении опции "Использовать дневной фиксированный убыток". Если она включена, то в конце торгового дня прибыль, накопленная в течение дня, будет освобождаться и записываться на баланс (а соответственно учитываться в свободной марже). В ином случае — не будет.

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

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



  2. Оптимизирована и значительно ускорена работа в режиме "Сканирование рынка", когда производится несколько проходов тестирования по всем символам из "Обзора рынка".
  3. Tester: При расчете прибыли в пипсах теперь учитывается размер сделки или позиции. Ранее расчет велся без учета объема — как для одного лота.
  4. Улучшено управление графиком результатов оптимизации. При увеличении масштаба обычного графика оптимизации появилась возможность его прокручивать. Двойной клик на точке графика теперь выделяет соответствующий результат в таблице проходов.
Обновлена документация.
13 декабря 2019
MetaTrader 5 build 2280

Terminal

  1. Исправлена ошибка, не позволявшая удалить эксперта с графика, для которого нет данных.
  2. Исправлено отображения заголовков графиков при работе под Wine.

MQL5

  1. Ускорена загрузка и компиляция MQL5 программ.
  2. Теперь при двойном клике на графике MQL5-программе передается событие одиночного клика. Ранее такие события не обрабатывались.
  3. Исправлена ошибка в работе функции StringTrimRight.
  4. Добавлена документация по функциям DirectX для 3D-визуализации.

Tester

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

MetaEditor

  1. Исправлена загрузка иконки приложения при переоткрытии свойств проекта.

Обновлены переводы пользовательского интерфейса.
Исправления по крешлогам.
6 декабря 2019
MetaTrader 5 build 2265: Функции DirectX для 3D-визуализации в MQL5 и настройка инструментов в тестере стратегий

Terminal

  1. Расширен список доступных колонок в Обзоре рынка. Теперь в основном разделе вы можете включить до 40 дополнительных параметров инструментов, которые ранее были доступны только на вкладке "Детали".




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




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




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

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

    Например, вы просматриваете историю за последнюю неделю. За нее было совершено 100 сделок, 98 из которых открыли и закрыли 20 позиций. Две последние сделки открыли новые позиции, которые в настоящий момент не закрыты. В этом случае при просмотре истории в виде сделок вы увидите 100 записей, а также итоговые показатели, рассчитанные на их основе. При просмотре истории в виде позиций вы увидите 20 записей, собранных на основе 98 сделок. И именно эти данные будут учтены при расчете итоговых показателей. Если брокер взимает комиссию со сделок входа, то итоговый размер комиссии при просмотре истории сделок и позиций будет отличаться, поскольку в последнем случае 2 последние сделки не будут учтены.

  5. Ускорен запуск MQL5-программ.
  6. Добавлен ключ /beta для инсталляционного файла терминала, позволяющий загрузить бета-версию программы вместо релизной. В обычном режиме для получения бета-версии требуется сначала установить релизную, а затем уже обновить ее. Теперь этот шаг можно пропустить, сэкономив время и трафик. Пример запуска установки:
    C:\mt5setup.exe /beta
  7. Исправлена ошибка в отображении маржинальных требований для биржевых акций (инструменты с типом "Exchange Stocks").
  8. Ускорена работа всех компонентов платформы за счет перехода на компилятор Clang/LLVM. В некоторых случаях ускорение достигает 20%.

MQL5

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

    Новый класс CCanvas3D является расширением класса пользовательской графики CCanvas. Он доступен в каталоге \MQL5\Include\Canvas\. В нем реализованы функции для рендеринга трехмерных объектов через DirectX API.

    • Create — создание сцены.
    • Attach — привязка сцены к графику.
    • Destroy — уничтожение сцены.
    • ObjectAdd — добавление объекта-наследника базового класса CDXObject на сцену.
    • Render — полный цикл отрисовки с очисткой буферов и отрисовкой всех CDXObject, добавленных с помощью метода ObjectAdd.
    • RenderBegin — начинает отрисовку сцены, заполянет буфер изображения заданным цветом (при использовании флага DX_CLEAR_COLOR) и буферы глубины (при использовании DX_CLEAR_DEPTH), а также устанавливает буфер сцены DXInputScene для шейдеров по умолчанию.
    • RenderEnd — завершает отрисовку сцены и получает результат во внутренний буфер. При redraw==true выводит изображение на график, к которому присоединен.
    • ViewMatrixGet — получение матрицы отображения.
    • ViewMatrixSet — установка матрицы отображения. Матрица несовместима с методами ViewPositionSet, ViewRotationSet, ViewTargetSet, ViewUpDirectionsSet.
    • ViewPositionSet — установка точки зрения/положения камеры.
    • ViewRotationSet — установка матрицы вращения камеры.
    • ViewTargetSet — установка точки, на которую направлена камера. Совместно с ViewUpDirectionsSet является альтернативой ViewRotationSet.
    • ViewUpDirectionsSet — установка вертикального направления камеры. Совместно с ViewTargetSet является альтернативой ViewRotationSet.
    • ProjectionMatrixGet — получение матрицы проекции.
    • ProjectionMatrixSet — установка матрицы проекции.

    Полная документация по новой библиотеке станет доступна в ближайшее время.




  2. Добавлена поддержка работы с базами данных SQLite прямо из MQL5. Теперь вы можете легко выполнять SQL-запросы без создания сложных обвязок. Новое расширение стандартной библиотеки берет всю внутреннюю работу на себя.

    Доступны следующие функции:

    • DatabaseOpen — открывает или создаёт базу данных в указанном файле
    • DatabaseClose — закрывает базу данных
    • DatabaseTableExists — проверяет наличие таблицы в базе данных
    • DatabaseExecute — исполняет запрос к указанной базе данных
    • DatabasePrepare — создает хендл запроса, который затем может быть исполнен с помощью DatabaseRead()
    • DatabaseRead — выполняет переход к следующей записи в результате запроса
    • DatabaseFinalize — удаляет запрос, созданный в DatabasePrepare()
    • DatabaseTransactionBegin — начинает выполнение транзакции
    • DatabaseTransactionCommit — завершает выполнение транзакции
    • DatabaseTransactionRollback — выполняет откат транзакций
    • DatabaseColumnsCount — получает количество полей в запросе
    • DatabaseColumnName — получает имя поля по номеру
    • DatabaseColumnType — получает тип поля по номеру
    • DatabaseColumnSize — получает размер поля в байтах
    • DatabaseColumnText — получает из текущей записи значение поля в виде строки
    • DatabaseColumnInteger — получает из текущей записи значение типа int
    • DatabaseColumnLong — получает из текущей записи значение типа long
    • DatabaseColumnDouble — получает из текущей записи значение типа double
    • DatabaseColumnBlob — получает из текущей записи значение поля в виде массива

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

    • ERR_MQL_DATABASE_INTERNAL (5120) — внутренняя ошибка базы данных
    • ERR_MQL_DATABASE_INVALID_HANDLE (5121) — невалидный хендл базы данных
    • ERR_MQL_DATABASE_TOO_MANY_OBJECTS (5122) превышено максимально допустимое количество объектов Database
    • ERR_MQL_DATABASE_CONNECT (5123)ошибка подключения к базе данных
    • ERR_MQL_DATABASE_EXECUTE (5124) ошибка выполнения запроса
    • ERR_MQL_DATABASE_PREPARE (5125) ошибка создания запроса
    • ERR_MQL_DATABASE_NO_MORE_DATA (5126) — данных для чтения больше нет
    • ERR_MQL_DATABASE_STEP (5127) ошибка перехода к следующей записи запроса
    • ERR_MQL_DATABASE_NOT_READY (5128) данные для чтения результатов запроса еще не готовы
    • ERR_MQL_DATABASE_BIND_PARAMETERS (5129) ошибка автоподстановки параметров в SQL-запрос

  3. Добавлено новое свойство MQL5-программ для выбора метода визуализации по умолчанию.
    #property optimization_chart_mode "3d,InpX,InpY"
    Используя его, вы можете задать вид графика, открываемого по окончании оптимизации, а также параметры программы для его осей X и Y.

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

  4. Добавлена функция MathArctan2. Она возвращает в радианах значение угла, тангенс которого равен отношению двух указанных чисел.
    double  MathArctan2(
       double  y      // y-координата точки
       double  x      // x-координата точки
       );
  5. Проведена общая оптимизация программ для улучшения производительности и снижения потребления ресурсов.
  6. Добавлены примеры математических расчетов, которые можно выполнять в тестере стратегий. Вы можете найти их в каталоге \MQL5\Experts\Examples\Math 3D\.
  7. Реализован более жесткий контроль областей видимости (namespaces).
  8. Добавлена загрузка связанных библиотек при использовании библиотек .NET в MQL5-программах. Если используемая .NET библиотека требует для своей работы другие библиотеки, то компилятор попытается автоматически загрузить их из текущего каталога или из каталога \MQL5\Libraries.
  9. Исправлена работа со временем в модуле MetaTrader для интеграции с Python. Теперь во всех выходных данных используется время торгового сервера, к которому подключен терминал.

Tester

  1. Множество новых функций и улучшений в тестере стратегий:


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



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




    Последние настройки/эксперты/графики
    Для быстрой настройки тестирования или оптимизации воспользуйтесь новыми командами контекстного меню. Выбирайте последние использованные настройки тестера, последние графики или программы:


MetaEditor

  1. Добавлена возможность работы с проектами С/С++ и Python прямо из MetaEditor. Теперь, используя встроенный редактор, вы можете вести мультиязычные проекты.

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




    После этого вы сможете работать с проектами на С/С++ и Python так же, как с обычными MQL5-программами.

  2. Теперь внутри каталога Shared Projects, предназначенного для работы с групповыми проектами через MQL5 Storage, можно создавать подпроекты. Ранее допускалось создание только одиночных проектов на верхнем уровне.
  3. Обновлен встроенный отладчик.
  4. Исправлено добавление заголовка функций при использовании стилизатора кода.
  5. Команды перехода к предыдущему и следующему положению курсора теперь доступны не только в меню "Вид", но и на панели инструментов.
  6. Теперь в именах проектов разрешается использовать пробелы.

Android

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

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



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

  2. Теперь позиции в истории сортируются по дате закрытия.
  3. Позиции, закрытые по Стоп Лоссу или Тейк Профиту, теперь подсвечиваются красными и зелеными вертикальным линиями в разделе истории.
  4. В спецификацию торгового инструмента добавлены новые поля:

    • Категория — свойство используется для дополнительной маркировки финансовых инструментов. Например, в нем могут быть указаны секторы рынка, к которым относится символ: Agriculture, Oil & Gas и т.д. Показывается, только если соответствующая информация предоставляется брокером.
    • Биржа — здесь указывается название биржи или площадки, на которой торгуется символ. Показывается, только если соответствующая информация предоставляется брокером.

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

iPhone/iPad

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



  2. Добавлена поддержка темной схемы оформления для iOS/iPadOS.
  3. Раздел работы с OTP паролями теперь доступен и в версии для iPad.
  4. Позиции, закрытые по Стоп Лоссу или Тейк Профиту, теперь подсвечиваются красными и зелеными вертикальным линиями в разделе истории.
  5. Теперь позиции в истории сортируются по дате закрытия. Если позиция еще не закрыта, для сортировки используется дата открытия.
  6. Многочисленные исправления и улучшения.


18 октября 2019
MetaTrader 5 build 2190

Terminal

  1. Исправлена сортировка MQL5-программ в навигаторе.

MQL5

  1. Исправлена ошибка компиляции, возникавшая при использовании локальных статических переменных, если в программе объявлена input group.

VPS

  1. Исправлены ошибки, возникавшие при запросе журнала хостинга.

Tester

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

Добавлен перевод пользовательского интерфейса на панджаби (Индия).

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

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

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

5 октября 2019
MetaTrader 5 build 2170: Области видимости в MQL5, глобальное обновление тестера стратегий и встроенного хостинга

Terminal

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

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




    В левой части доступна основная информация о подписке:

    • Данные по подключению: сравнение сетевых задержек между вашим терминалом на хостинг-сервере и терминалом на локальном компьютере.
    • Торговый счет, для которого арендован хостинг, и тарифный план.
    • Уникальный идентификатор подписки. Нажав на него, вы перейдете в раздел "Хостинг" в своем профиле на MQL5.community, где можно управлять подпиской.
    • Дата оформления и текущее состояние. Если ваш хостинг остановлен, вы немедленно об этом узнаете.

    Кнопкой Старт/Стоп вы можете быстро останавливать и запускать виртуальный терминал.

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

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

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




  2. Добавлена возможность быстрого перехода к пополнению/снятию средств с торгового счета на сайте брокера.

    Теперь вам не нужно искать соответствующие функции в личном кабинете на сайте брокера. Команды для быстрого перехода к страницам пополнения счета и вывода средств стали доступны прямо в терминалах — в меню счетов в Навигаторе и на вкладке торговли в Инструментах:



    • Команды пополнения/снятия доступны только в том случае, если соответствующие функции включены для торгового счета на стороне брокера.
    • Торговый терминал не производит никаких операций пополнения/снятия средств со счета. Встроенные функции лишь перенаправляют пользователя на соответствующие веб-страницы брокерской компании.
  3. В спецификацию торгового инструмента добавлены новые поля:

    Категория
    Свойство используется для дополнительной маркировки финансовых инструментов. Например, в нем могут быть указаны секторы рынка, к которым относится символ: Agriculture, Oil & Gas и т.д. Показывается, только если соответствующая информация предоставляется брокером.

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

    Комиссия
    Здесь отображается информация о комисcиях, взимаемых брокером при совершении сделок по инструменту. Показываются все подробности расчета:

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

    Например, следующая запись означает, что комиссия начисляется немедленно при совершении сделок входа и выхода. При объеме сделки от 0 до 10 лотов комиссия взимается в размере 1.2 USD за операцию. При объеме сделки от 11 до 20 лотов комиссия будет взиматься в размере 1.1 USD за каждый лот сделки.
    Комиссия | Немедленно за объем, сделки входа/выхода
    0  - 10  | 1.2 USD за сделку
    11 - 20  | 1.1 USD за лот



  4. В спецификацию инструментов добавлены дополнительные поля для опционов:

    • Тип опциона — кол или пут
    • Базис — базовый инструмент опциона
    • Цена страйк — цена исполнения опциона

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



  6. Теперь инструмент "Перекрестие" показывает расстояние между ценовыми уровнями не только в пипсах, но и в процентах:




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




  8. Исправлена ошибка, из-за которой команда "Показать все" в Обзоре рынка в некоторых случаях не выводила в список все доступные торговые инструменты.

MQL5

  1. Изменена работа области видимости, что делает MQL5 еще более приближенным к C++. Программисты MQL5 получат гораздо больше свободы по использованию сторонних библиотек. Больше не нужно будет их модифицировать и приводить все идентификаторы к уникальному виду.

    Пример: в коде объявлены две структуры с одинаковым именем, но в разных классах. Ранее такое объявление выдавало ошибку компиляции "identifier already used". Теперь такой код будет успешно скомпилирован и исполнен. При этом для правильного обращения к нужной переменной/структуре/функции не из ее области видимости должен указываться класс, в данном случае — CBar::Item.
    class CFoo
      {
    public:
       struct Item { int x; };
      };
    //+------------------------------------------------------------------+
    class CBar
      {
    public:
       struct Item { int x; };
      };
      
    CBar::Item item;  // правильное объявление структуры Item из класса Bar
    Item       item;  // некорректное объявление
    Также добавлена поддержка пространства имен (namespace), что дает еще больше свободы при использовании сторонних кодов/библиотек в своих программах.

    #define PrintFunctionName() Print(__FUNCTION__)
    
    namespace NS
    {
    void func()
      {
       PrintFunctionName();
      }
    
    struct C
      {
       int               x;
                         C() { PrintFunctionName(); };
      };
    }
    
    struct C
      {
       int               x;
                         C() { PrintFunctionName(); };
      };
    
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void func()
      {
       PrintFunctionName();
      }
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       func();
       NS::func();
    
       C c;
       NS::C ac;
      }
    В результате исполнения программа выведет следующие строки:
    2019.09.18 13:39:35.947    TestScript (AUDCAD,H1)    func
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    NS::func
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    C::C
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    NS::C::C

  2. Ускорен доступ к данным таймсерий при помощи функций iTime, iOpen, iHigh, iLow, iClose, iVolume, iTickVolume, iSpread.

  3. Добавлена поддержка атрибута "=delete". Он позволяет запретить использование конкретных методов класса.
    class A
      {
       void              operator=(const A &)=delete;    // запрещаем оператор копирования объекта
      };
    
    class B : public A
      {
      };
    
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       A a1,a2;
       B b1,b2; 
      
       a1=a2;
       b1=b2;
      }
    В этом примере для строк "a1=a2" и "b1=b2" компилятор выдаст ошибки:
    attempting to reference deleted function 'void A::operator=(const A&)'
       function 'void A::operator=(const A&)' was explicitly deleted here

    attempting to reference deleted function 'void B::operator=(const B&)'
       function 'void B::operator=(const B&)' was implicitly deleted because it invokes deleted function 'void A::operator=(const A&)'

  4. В перечисление ENUM_SYMBOL_INFO_STRING добавлены следующие значения:

    • SYMBOL_CATEGORY — категория символа. Используется для дополнительной маркировки финансовых инструментов. Например, в нем могут быть указаны секторы рынка, к которым относится символ: Agriculture, Oil & Gas и т.д.
    • SYMBOL_EXCHANGE — название биржи или площадки, на которой торгуется символ.

  5. Добавлена поддержка закрытия позиций по правилу FIFO.

    • В перечисление ENUM_ACCOUNT_INFO_INTEGER добавлено значение ACCOUNT_FIFO_CLOSE — признак того, что позиции можно закрывать только по правилу FIFO. Если значение свойства равно true, то позиции по каждому символу разрешается закрывать только в том порядке, в котором они были открыты — сначала самую старую, затем более новую и т.д. При попытке закрыть позиции в ином порядке будет получена ошибка. Для счетов без хеджингового учета позиций (ACCOUNT_MARGIN_MODE!=ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) свойство всегда равно false.
    • Добавлен новый код возврата сервера TRADE_RETCODE_FIFO_CLOSE — запрос отклонен, так как для торгового счета установлено правило "Разрешено закрывать существующие позиции только по правилу FIFO".

    Закрытие позиций может осуществляться тремя основными способами:

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

  6. Добавлена возможность группировки параметров через "input group". Это позволяет визуально отделить одни параметры от других на основе заложенной в параметры логики.

    Пример советника, у которого блок входных параметров разбит по их назначению:
    input group           "Signal"
    input int             ExtBBPeriod    =20;         // Bollinger Bands period
    input double          ExtBBDeviation =2.0;        // deviation
    input ENUM_TIMEFRAMES ExtSignalTF    =PERIOD_M15; // BB timeframe
    
    input group           "Trend"
    input int             ExtMAPeriod    =13;         // Moving Average period
    input ENUM_TIMEFRAMES ExtTrendTF     =PERIOD_M15; // MA timeframe
    
    input group           "ExitRules"
    input bool            ExtUseSL       =true;       // use StopLoss
    input int             Ext_SL_Points  =50;         // StopLoss in points
    input bool            ExtUseTP       =false;      // use TakeProfit
    input int             Ext_TP_Points  =100;        // TakeProfit in points
    input bool            ExtUseTS       =true;       // use Trailing Stop
    input int             Ext_TS_Points  =30;         // Trailing Stop in points
    
    input group           "MoneyManagement"
    sinput double         ExtInitialLot  =0.1;        // initial lot value
    input bool            ExtUseAutoLot  =true;       // automatic lot calculation
    
    input group           "Auxiliary"
    sinput int            ExtMagicNumber =123456;    // EA Magic Number
    sinput bool           ExtDebugMessage=true;      // print debug messages
    При запуске такого советника в тестере стратегий появляется возможность двойным кликом по имени группы сворачивать и разворачить блок входных параметров, а также одним кликом по чекбоксу группы выделять все её параметры для оптимизации.




  7. Исправлена ошибка, возникавшая при импорте функций из DLL, чьи имена пересекались с функциями MQL. Пример:
    #import "lib.dll"
    int func();
    #import
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    int func()
      {
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       Print( func() );
      }
    Ранее компиляция такого кода выдавала ошибку:
    'func' - ambiguous call to overloaded function with the same parameters
    could be one of 2 function(s)
       int func()
       int func()
    Теперь вместо ошибки по умолчанию будет использоваться встроенная функция MQL, как имеющая больший приоритет. А для вызова импортированной функции необходимо явно указать область видимости:
    void OnStart()
      {
       Print( lib::func() );
      }
  8. Исправлено указание времени у новостей экономического календаря. Теперь время события передается с учетом часового пояса торгового сервера, к которому подключен терминал, а не часового пояса локального компьютера.
  9. Исправлено чрезмерное потребление памяти в функциях CopyTicks и CopyTicksRange.

Signals

  1. Исправлено отображение графиков сигналов при работе в Wine (Mac OS и Linux).

Tester

  1. Существенно обновлен тестер стратегий: добавлена стартовая страница, переработана страница настроек, повышено удобство использования.

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

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




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




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




    Отсюда же вы можете быстро перейти к редактированию программы в MetaEditor.

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




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

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




  2. График результатов оптимизации теперь отображается в основной рабочей области терминала, а не в отдельном разделе тестера стратегий. Это позволяет использовать значительно больше пространства для отображения, что делает анализ данных более удобным. Помимо этого обновлена система 3D-визуализации.



  3. Добавлено сохранение кэша оптимизации для режима "Все символы в Обзор рынка".
  4. Добавлено сохранение кэша тестирования.

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

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




  5. Значительно ускорены тестирование и оптимизация, в том числе — с использованием облачной вычислительной сети MQL5 Cloud Network.
  6. Исправлены ошибки и оптимизирована работа с фреймами.

MetaEditor

  1. Добавлена возможность настраивать стилизатор кода.

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




    Помимо этого, для стилизатора теперь можно задать следующие параметры:

    Пробелов на отступ
    Определяет количество пробелов, вставляемых при выравнивании вложенных конструкций:
    if(condition)
      {
       //---
      }

    Заменять табуляцию пробелами
    При включении этой опции стилизатор будет заменять все символы табуляции в коде на символы пробелов. Количество символов на табуляцию определяется в разделе "Общие".

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

    Вставлять пробелы после запятых и точек с запятой
    При включении этой опции стилизатор будет визуально отделять конструкции с перечислением элементов. Например:
    // до стилизации
    ParameterGetRange("InpX",enable,x_cur,x_start,x_step,x_stop);
    // после стилизации
    ParameterGetRange("InpX", enable, x_cur, x_start, x_step, x_stop);

    Вставлять пробелы вокруг операторов объявления
    При включении этой опции стилизатор будет вставлять пробелы вокруг операторов присваивания, равенства, сравнения и т.д. Например:
    // до стилизации
    if(x==1&y!=2)
      {
       int a=0;
      }
    // после стилизации
    if(x == 1 & y != 2)
     {
      int a = 0;
     }

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




  3. Исправлено отображение ключевого слова union в подсказках.

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

  • Европейский регион — шведский, литовский, датский, латвийский, эстонский, сербский, словенский, словацкий, финский, грузинский
  • Азиатский регион — яванский, маратхи, бенгальский, пенджабский, тамильский, телугу
  • Африканский регион — суахили, хауса

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

Для переключения интерфейса на свой язык воспользуйтесь меню "Просмотр / Язык" в верхней части терминала.

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

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

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

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. Исправлены ошибки, приводившие к замедлению компиляции в некоторых условиях.

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

предыдущая12345678910111213