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

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

7 июня 2024
MetaTrader 5 build 4380: улучшения в работе

Добавлена горячая клавиша Alt+X для вызова списка экспертов, исправлены ошибки в MetaTester при установке свойств графического объекта «Рисунок». Также запрещено подключение агентов тестирования к MQL5 Cloud Network в виртуальных средах и при отсутствии поддержки AVX у процессора.

Terminal

  1. Исправлены ошибки, в некоторых случаях приводившие к нарушению работы системы обновления Live Update.
  2. Добавлена горячая клавиша Alt+X для вызова списка экспертов.
  3. Исправления по крешлогам.

MetaTester

  1. Исправлены ошибки выставления некоторых свойств у графического объекта «Рисунок».
  2. Запрещено подключение агентов тестирования к MQL5 Cloud Network при работе в виртуальных средах и при отсутствии поддержки набора инструкций AVX у процессора.

Web Terminal

  1. Исправлена ошибка в работе панели быстрой торговли на графике.
  2. Исправлен диалог предупреждения, открываемый при включении панели быстрой торговли на графике.
31 мая 2024
MetaTrader 5 build 4350: больше аналитических объектов в веб-платформе и стартовая страница в MetaEditor

MetaEditor

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


    Добавлена стартовая страница


    Материалы для новичков
    Раздел «Знакомство» подробно расскажет об обучающих материалах, доступных на MQL5.com: полная документация языка, книги, статьи, форум разработчиков, а также библиотека готовых кодов. Здесь же вы познакомитесь с сервисами, где вы можете применить и монетизировать свои знания: маркет приложений, фриланс-биржа и торговые сигналы.

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

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


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


    Полезные функции для тех, кто уже занимается разработкой


    Если вы уже активно продаете свои приложения в Маркете, отчет «Мои продажи» поможет оценить ваши успехи. Вам доступны:

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


    Мои продажи

  2. Улучшен встроенный поиск. Теперь верхняя поисковая строка используется только для поиска текста в текущем документе или в локальных файлах. Для глобального поиска по учебным материалам и кодам используйте отдельный раздел в «Инструментах».


    Улучшен встроенный поиск

  3. Для Copilot добавлена поддержка GPT-4o — новейшей модели ChatGPT. Теперь вы можете использовать ее для автоматического дополнения кода и получения подсказок. Выбрать новую модель можно в настройках MetaEditor.


    Для Copilot добавлена поддержка GPT-4o — новейшей модели ChatGPT

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

Terminal

  1. Увеличена точность отображения расчетной цены в спецификации торгового инструмента.
  2. Добавлена горячая клавиша Alt+X для вызова списка экспертов.
  3. Исправлен расчет показателей MFE и MAE в торговом отчете.
  4. Исправлено сохранение и восстановление настроек фильтрации экономического календаря по стране и валюте.
  5. Исправлено применение шаблонов к графикам. Теперь, если для графика включено отображение торговой истории, соответствующие объекты не будут исчезать после применения шаблона.
  6. Исправлена ошибка в работе доски опционов. В некоторых случаях при добавлении символов платформа могла зависать.
  7. Исправлена ошибка в диалоге редактирования позиций. В некоторых случаях вместо текущих значений Стоп Лосс и Тейк Профит в соответствующие поля могли подставляться некорректные уровни.
  8. Обновлены переводы пользовательского интерфейса.

MQL5

  1. Оптимизирована и значительно ускорена работа функции ArrayResize. В некоторых случаях ускорение работы может достигать 40%.
  2. Обновлена поддержка ONNX.
  3. Исправлен вызов функции MessageBox в программах-сервисах. Независимо от того, какую кнопку пользователь нажимал в диалоге, функция возвращала нулевое значение.
  4. Исправлена ошибка, в некоторых случаях приводившая к неполной инициализации MQL5-программ.
  5. Исправлена ошибка парсинга некоторых макросов. Ошибка возникала при использовании большого количества констант.


MetaTrader 5 Web Terminal

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


    Расширен набор доступных аналитических объектов

  2. Добавлена возможность переименования объектов.
  3. Улучшена интеграция с экономическим календарем. Оптимизирован и ускорен запрос данных.
  4. Ускорена работа графиков.
  5. Ускорены запуск приложения и подключение к торговому счету.
  6. Исправлена работа настройки, управляющей отображением торговых операций на графике.
  7. Исправлено отображение маржинальных требований в спецификации контракта.
  8. Исправлено отображение состояния счета в разделе истории. Проблема возникала на устройствах с узким экраном.
  9. Исправлено отображение стакана цен.
22 марта 2024
MetaTrader 5 build 4260: общие улучшения

Terminal

  1. Исправлена ошибка подписки на бесплатные продукты в сервисе «Подписки». В некоторых случаях соответствующая кнопка могла отсутствовать в диалоге.
  2. Обновлены переводы пользовательского интерфейса.

MQL5

  1. Расширена поддержка событий клавиатуры:

    • Добавлено событие CHARTEVENT_KEYUP для обработчика OnChartEvent. Оно позволяет отслеживать, когда пользователь отпускает клавишу на клавиатуре.
    • Добавлена обработка «Мертвых» клавиш (Dead keys) — это клавиши, позволяющие изменить вид следующего вводимого символа. Например, в греческой раскладке для установки ударений над гласными ά, έ, ύ и т.д. требуется нажать клавишу «;», а затем ввести букву. Теперь нажатие таких клавиш можно отслеживать при помощи функции TranslateKey.
    • Доработаны функции TranslateKey и TerminalInfoInteger. Теперь при получении событий CHARTEVENT_KEYUP или CHARTEVENT_KEYDOWN в OnChartEvent вы можете получить полное состояние клавиатуры на момент возникновения события. Например, если пользователь нажал клавишу Z, вы сможете узнать, была ли в тот момент нажата клавиша Ctrl или Shift. Для остальных событий функции будут работать как раньше — возвращать состояние клавиатуры на текущий момент.

  2. Обновлена библиотека Alglib. В связи с обновлением изменены следующие методы в классах CMatrixDouble и CMatrixComplex:
    vector<double/complex> operator[](const int i) const;
    vector<double/complex> operator[](const ulong i) const;
    Теперь вместо них используется один метод с константным возвращаемым значением:
    const vector<double/complex> operator[](const ulong i) const;
    Внесенная правка позволит отловить некорректное использование результата по месту: в новой версии Alglib код mat[row][col]=x работает не так, как в старой. Ранее это была запись в матрицу, а теперь — запись во временный объект vector<double/complex>, который после записи сразу же уничтожается.

    Добавление const к возвращаемому значению делает невозможным использование записи mat[row][col]=x. Поскольку mat[row] теперь возвращает константный вектор, попытка перезаписать его элемент через mat[row][col] приведет к ошибке компиляции.

  3. Исправлена ошибка, в некоторых случаях приводившая к некорректной работе функций ChartGet*.

MetaEditor

  1. Добавлен поиск по книге «Нейросети в алготрейдинге на MQL5». Теперь он объединен в одном разделе с ранее вышедшей книгой «Программирование на MQL5 для трейдеров».


    Добавлен поиск по недавно вышедшей книге «Нейросети в алготрейдинге на MQL5»


Tester

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


MetaTrader 5 Web Terminal

  1. Исправлено выставление лимитных ордеров для инструментов с биржевым исполнением. Теперь при изменении цены выставляемого ордера относительно текущей (выше или ниже) предлагаемый тип ордера не будет изменяться с Buy Limit на Sell Limit и обратно, как это происходит для инструментов остальных типов. Таким образом, пользователь при необходимости сможет выставлять ордера Buy Limit выше рынка и Sell Limit ниже рынка, чтобы гарантированно ограничить цену сделки.
  2. Исправлено отображение счетчиков выбранных символов в «Обзоре рынка».
7 марта 2024
MetaTrader 5 build 4230: больше встроенных приложений и расширение поддержки ONNX

Terminal

  1. Добавлено 28 новых советников и 12 новых индикаторов в стандартную поставку платформы. Приложения доступны в разделах «Советники\Free Robots» и «Индикаторы\Free Indicators» в Навигаторе. Для каждого из них доступен исходный код с подробными комментариями, что поможет вам в изучении языка MQL5.

    В роботах реализованы торговые стратегии на основе технических индикаторов и свечных паттернов, таких как 3 Black Crows – 3 White Soldiers, Bullish Engulfing – Bearish Engulfing, Bullish Harami – Bearish Harami и другие. Новые индикаторы – это реализация популярных каналов: Camarilla, DeMark, Donchian, Fibonacci, Keltner и других.


    Добавлено 28 новых советников и 12 новых индикатров в стандартную поставкку платформы


  2. Идет подготовка к запуску подписок на рыночные данные Nasdaq. Прямо из платформы трейдеры смогут получить доступ к котировкам в реальном времени и глубокой ценовой истории по сотням финансовых инструментов с одной из крупнейших бирж. Для этого нужен лишь демо-счет на сервере MetaQuotes-Demo и аккаунт MQL5.community.


    Подписка на рыночные данные Nasdaq


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

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


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


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

  4. Добавлена ссылка на Telegram-канал MQL5 в меню «Справка». В канале регулярно публикуются интересные материалы для разработчиков: обзоры новых статей по программированию и бесплатных роботов и индикаторов из библиотеки кодов. Подписывайтесь на канал, чтобы не пропустить важную информацию.


    Добавлена ссылка на Telegram канал MQL5 в меню «Справка»


  5. Добавлена поддержка параметра ShutdownTerminal в секции [StartUp] пользовательских конфигурационных файлов. Используйте этот параметр, чтобы запускать платформу для выполнения одноразовых задач при помощи скриптов. Например, у вас есть скрипт, который делает скриншот графика. Вы создаете конфигурационный файл, который запускает этот скрипт вместе с платформой. Если добавить в него ShutdownTerminal со значением «Yes», платформа будет автоматически выключаться сразу после завершения работы скрипта.
  6. Усилена защита сетевых протоколов и продуктов в Маркете.
  7. Отключена поддержка сервиса «Сигналы» для демо-счетов. Для получения расширенной статистики по вашим тренировочным счетам используйте новый торговый отчет. Он предоставляет массу показателей по прибыльности и рискованности вашей стратегии, содержит графики прироста, баланс и эквити, диаграммы распределения сделок по направлению и инструментам и многое другое.
  8. Исправлено отображение ссылок на соглашения с брокером в меню «Справка».
  9. Улучшен выбор наилучшего сервера при аренде VPS.
  10. Исправлено обновление страницы подписок при переключении между разделами в «Навигаторе».
  11. Исправлено обновление списка соглашений при открытии предварительного счета.
  12. Обновлены переводы пользовательского интерфейса.

MQL5

  1. Добавлено свойство MQL_STARTED_FROM_CONFIG в перечисление ENUM_MQL_INFO_INTEGER. Возвращает true, если скрипт/эксперт запущен из секции StartUp конфигурационного файла. Это означает, что данный скрипт/эксперт был прописан в конфигурационном файле, с которым запущен терминал.
  2. Продолжается работа над расширением поддержки моделей ONNX.

    В задачах машинного обучения не всегда нужна большая точность вычислений. Для ускорения расчетов некоторые модели используют типы данных с меньшей точностью, такие как Float16 и даже Float8. Чтобы пользователи могли подавать такие данные на вход моделей, в MQL5 добавлены следующие функции:
    bool ArrayToFP16(ushort &dst_array[],const float &src_array[],ENUM_FLOAT16_FORMAT fmt);
    bool ArrayToFP16(ushort &dst_array[],const double &src_array[],ENUM_FLOAT16_FORMAT fmt);
    bool ArrayToFP8(uchar &dst_array[],const float &src_array[],ENUM_FLOAT8_FORMAT fmt);
    bool ArrayToFP8(uchar &dst_array[],const double &src_array[],ENUM_FLOAT8_FORMAT fmt);
    
    bool ArrayFromFP16(float &dst_array[],const ushort &src_array[],ENUM_FLOAT16_FORMAT fmt);
    bool ArrayFromFP16(double &dst_array[],const ushort &src_array[],ENUM_FLOAT16_FORMAT fmt);
    bool ArrayFromFP8(float &dst_array[],const uchar &src_array[],ENUM_FLOAT8_FORMAT fmt);
    bool ArrayFromFP8(double &dst_array[],const uchar &src_array[],ENUM_FLOAT8_FORMAT fmt);
    Поскольку форматы вещественных чисел для 16 и 8 бит могут отличаться, в параметре fmt в функциях конверсии необходимо указывать, какой именно формат числа требуется обработать. Для 16-битных версий используется новое перечисление NUM_FLOAT16_FORMAT, которое на данный момент имеет следующие значения:

    • FLOAT_FP16 — стандартный 16-битный формат, так же известный как half.
    • FLOAT_BFP16 — специальный формат brain float point.

    Для 8-битных версий используется новое перечисление ENUM_FLOAT8_FORMAT, которое на данный момент имеет следующие значения:

    • FLOAT_FP8_E4M3FN — 8-битное число с плавающей точкой, 4 бита порядок и 3 бита мантисса. Обычно используется как коэффициенты.
    • FLOAT_FP8_E4M3FNUZ — 8-битное число с плавающей точкой, 4 бит порядок и 3 бита мантисса. Поддерживает NaN, не поддерживается отрицательный ноль и Inf. Обычно используется как коэффициенты.
    • FLOAT_FP8_E5M2FN — 8-битное число с плавающей точкой, 5 бит порядок и 2 бита мантисса. Поддерживает NaN и Inf. Обычно используется для градиентов.
    • FLOAT_FP8_E5M2FNUZ — 8-битное число с плавающей точкой, 5 бит порядок и 2 бита мантисса. Поддерживает NaN и Inf, не поддерживает отрицательный ноль. Также используется для градиентов.

  3. Добавлены новые методы матриц и векторов, используемые в машинном обучении:

    • PrecisionRecall — вычисляет значения для построения кривой precision-recall. Данный метод, как и метод ClassificationScore, применяется к вектору истинных значений.
    • ReceiverOperatingCharacteristic — вычисляет значения для построения кривой Receiver Operating Characteristic (ROC). Данный метод, как и метод ClassificationScore, применяется к вектору истинных значений.

  4. ONNX Runtime обновлено до версии 1.17. Подробности релиза доступны в GitHub.
  5. Пакет для интеграции с Python обновлен до версии 5.0.4200, добавлена поддержка Python 3.12. Обновите свой пакет командой "pip install --upgrade MetaTrader5", чтобы получить последние изменения.
  6. Добавлено значение DEAL_REASON_CORPORATE_ACTION в перечисление ENUM_DEAL_REASON — сделка проведена в результате корпоративного действия: объединения или переименования бумаги, переноса клиента на другой счет и т.д.
  7. Добавлено поддержка сравнения комплексных векторов и матриц для метода Compare. Сравнение заключается в оценке расстояния между комплексными числами. Расстояние рассчитывается по следующей формуле sqrt(pow(r1-r2, 2) + pow(i1-i2, 2) и является действительным числом, которое уже можно сравнивать с эпсилоном.
  8. Исправлено преобразование переменных типа color в текст в формате RGB.
  9. Исправлен возврат результата получения собственных векторов в методе Eig в случае комплексного собственного значения. Добавлена перегрузка метода для комплексного решения.
  10. Исправлена работа функции OrderCalcMargin для некоторых случаев.

MetaEditor

  1. Добавлена ссылка на недавно вышедшую книгу «Программирование на MQL5 для трейдеров» в меню Справка\MQL5.community. Также книга добавлена в поисковую систему, вы можете находить в ней нужные материалы прямо из MetaEditor:


    Добавлен поиск по книге «Программирование на MQL5 для трейдеров»



  2. Доработан встроенный поиск:

    • Раздел результатов поиска в окне «Инструменты» разделен на две вкладки: «Поиск» — для результатов поиска онлайн (документация, статьи, книга и т.д.), «Поиск в файлах» — для локальных результатов.
    • В раздел результатов добавлена отдельная поисковая строка. Вы можете использовать ее вместо поисковой строки в основной панели инструментов MetaEditor.

  3. Добавлена поддержка режимов AVX, AVX2 и AVX512 при компиляции программ из командной строки. Для этого добавьте в команду один из ключей: /avx, /avx2 или /avx512.
  4. Движок SQLite для работы с базами данных обновлен до версии 3.45.
  5. Отключена поддержка Internet Explorer. Теперь для отображения HTML-страниц используется только Microsoft Edge WebView2. По сравнению с устаревшим MSHTML новый компонент существенно расширяет возможности для отображения веб-контента, предоставляя доступ к современным технологиям. Переход на WebView2 позволит улучшить внешний вид некоторых разделов MetaEditor, увеличить их производительность, создать более отзывчивые интерфейсы.
  6. Исправлено зависание, происходившее в редких случаях при автодополнении функций.

Tester

  1. Исправлен расчет тройного свопа в случае, если день начала теста приходится на день тройного свопа.

MetaTrader 5 Web Terminal

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


Улучшено отображение маржевых требований в спецификации контракта


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

18 января 2024
MetaTrader 5 build 4150: экспорт торгового отчета и новые методы машинного обучения в MQL5

Terminal

  1. Добавлен экспорт торгового отчета в файл HTML и PDF. Теперь вы можете легко поделиться своими торговыми достижениями с коллегами или инвесторами. Для экспорта воспользуйтесь меню в самом отчете или меню «Файл».


    Экспорт торгового отчета в файл HTML и PDF


  2. Добавлена возможность сохранить текущее состояние окна «Обзор рынка» в файл CSV. Для этого нажмите «Экспорт» в контекстном меню. В файле сохранятся значения выбранных показателей на момент экспорта. Чтобы выгрузить больше данных, включите дополнительные колонки через контекстное меню.


    Экспорт состояния «Обзора рынка»


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


    Улучшено отображение маржевых требований в спецификации контракта


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

  4. Отключена поддержка сервиса "Сигналы" для демо-счетов. Для получения расширенной статистики по вашим тренировочным счетам используйте новый торговый отчет. Он предоставляет массу показателей по прибыльности и рискованности вашей стратегии, содержит графики прироста, баланс и эквити, диаграммы распределения сделок по направлению и инструментам и многое другое.
  5. Исправлен показ потенциальной прибыли/убытка при редактировании Тейк Профита и Стоп Лосса для ордеров Stop Limit.
  6. Внесены многочисленные исправления и доработки в платежную систему.
  7. Исправлена проверка дубликатов при загрузке набора инструментов в «Обзор рынка» из файла *.set.
  8. Исправлена работа веб-инсталлятора для Parallels. Теперь при использовании этой системы виртуализации на macOS с процессорами M1/M2/M3 платформа будет устанавливаться корректно.
  9. Обновлены переводы пользовательского интерфейса.
  10. Исправления по крешлогам.

MQL5

  1. Добавлены новые методы для работы с матрицами и векторами. Они используются в машинном обучении.

    • ConfusionMatrix — вычисляет матрицу ошибок. Метод применяется к вектору предсказанных значений.
    • ConfusionMatrixMultilabel — вычисляет матрицу ошибок для каждой метки. Метод применяется к вектору предсказанных значений.
    • ClassificationMetric — вычисляет классификационную метрику для оценки качества предсказанных данных по отношению к истинным данным. Метод применяется к вектору предсказанных значений.
    • ClassificationScore — вычисляет классификационную метрику для оценки качества предсказанных данных по отношению к истинным данным.
     
  2. Исправлено сохранение данных в текстовый файл формата UTF-8 при помощи функции FileWrite.
  3. Отключены и объявлены устаревшими функции Signal*. Теперь они будут возвращать пустые наборы сигналов.

MetaEditor

  1. Увеличена частота сэмплирования при профилировании. Теперь состояние приложения снимается 10000 раз в секунду, что позволяет замерять скорость исполнения функций гораздо точнее.
  2. Обновлены доступные модели в инструменте автоматического дополнения кода Copilot. Добавлена модель ChatGPT-4 Turbo, убраны устаревшие реализации.
  3. Исправлены ошибки при замене слов в выделенном фрагменте текста.

Tester

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

Web Terminal

  1. Исправлено обновление свойств торгового инструмента при их изменении на стороне брокера.
  2. Исправлено отображение тела свечи на графике. Тело могло быть не видно, если оно имело малый размер.
  3. Исправлена работа поля «Страна» в форме открытия счета.
20 октября 2023
MetaTrader 5 build 4040: Улучшения и исправления

Terminal

  1. Улучшен новый торговый отчет. Исправлено отображение первого значения на графике прироста, а также расчет просадки.

    Улучшен новый торговый отчет


  2. При открытии счета каждый трейдер получает несколько сообщений через встроенную почту. Помимо данных для подключения в них можно найти множество полезной информации о возможностях платформы и встроенных сервисах. Мы актуализировали и дополнили эти письма, перевели их на 50 языков, а также полностью обновили дизайн.
  3. Оптимизированы страницы пополнения и снятия средств со счета.
  4. Исправлена ошибка изменения объема при выставлении нового ордера. При некоторых сочетаниях настроек торгового инструмента поле было недоступно для редактирования.
  5. Исправлено отображение ссылок на соглашения с брокером в диалоге открытия демо-счета.
  6. Обновлены переводы пользовательского интерфейса.

MQL5

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

MetaTrader 5 Web Terminal

  1. Исправлено отображение Стоп Лоссов и Тейк Профитов в торговой истории.
  2. Расширен вывод в журнал. Теперь в него будут выводиться сообщения об успешных и неудавшихся подключениях.
  3. Исправлена работа контекстного меню в "Обзоре рынка".
  4. Исправлено отображение уведомления о результатах операций при торговле из стакана цен.
  5. Исправлена ошибка, из-за которой подокно индикатора могло удаляться с графика при вызове торгового диалога.
  6. Исправлено перетаскивание торговых уровней на графике в случае, когда они отображаются поверх аналитических объектов.
29 сентября 2023
MetaTrader 5 build 4000: Улучшения в торговом отчете и веб-терминале

Terminal

  1. Добавлено отображение помесячного прироста в деньгах в новом торговом отчете. Чтобы посмотреть показатели, перейдите в отчет "Summary" и выберите режим "Balance".


    Помесячный прирост в деньгах в новом торговом отчете


  2. Исправлено и улучшено отображение нового торгового отчета.
  3. ONNX Runtime обновлено до версии 1.16. Подробности релиза доступны в GitHub.
  4. Обновлены переводы пользовательского интерфейса.

MetaTrader 5 Web Terminal

  1. Исправлено отображение диалогов смены пароля и открытия счета.
  2. Исправлена ошибка отображения Стоп Лосс и Тейк Профита в истории, возникавшая после их модификации.
  3. Добавлена возможность прокрутки в диалоге предупреждения о рисках.
  4. Обновлены переводы пользовательского интерфейса.
  5. Внесены различные улучшения и исправления.
21 сентября 2023
MetaTrader 5 build 3980: Улучшения и исправления

Terminal

  1. Улучшен новый торговый отчет. Исправлено отображение итогового значения свопов, а также графика прибыли по символам.
  2. Оптимизированы страницы пополнения и снятия средств со счета. Подробнее о новой интеграции платформы с платежными системами читайте в предыдущей новости о билде 3950.
  3. Оптимизирован пересчет финансовых операций во всей платформе, включая тестер стратегий. Теперь показатели прибыли, маржи и многие другие параметры рассчитываются быстрее.
  4. Обновлены переводы пользовательского интерфейса.

MQL5

  1. Добавлены методы Conjugate для типов complex, vector<complex> и matrix<complex>. Они выполняют сопряжение для комплексных чисел.
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       complex a=1+1i;
       complex b=a.Conjugate();
       Print(a, "  ", b);
       /*
       (1,1)  (1,-1)
       */
    
       vectorc va= {0.1+0.1i, 0.2+0.2i, 0.3+0.3i};
       vectorc vb=va.Conjugate();
       Print(va, "  ", vb);
       /*
       [(0.1,0.1),(0.2,0.2),(0.3,0.3)]  [(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]
       */
    
       matrixc ma(2, 3);
       ma.Row(va, 0);
       ma.Row(vb, 1);
       matrixc mb=ma.Conjugate();
       Print(ma);
       Print(mb);
       /*
       [[(0.1,0.1),(0.2,0.2),(0.3,0.3)]
        [(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]]
    
       [[(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]
        [(0.1,0.1),(0.2,0.2),(0.3,0.3)]]
       */
       
       ma=mb.Transpose().Conjugate();
       Print(ma);
       /*
       [[(0.1,0.1),(0.1,-0.1)]
        [(0.2,0.2),(0.2,-0.2)]
        [(0.3,0.3),(0.3,-0.3)]]
       */
      }
  2. Добавлена обработка выхода ONNX-модели типа Sequence of maps.

    Для моделей ONNX, которые в выходном слое отдают последовательности Map (ONNX_TYPE_SEQUENCE of ONNX_TYPE_MAP), в качестве выходного параметра следует передавать динамический или фиксированный массив структур. Первые два поля этой структуры должны соответствовать типам ключей и значений ONNX_TYPE_MAP и являться фиксированными или динамическими массивами.

    Рассмотрим модель iris.onnx, созданную следующим скриптом на Python:
    from sys import argv
    data_path=argv[0]
    last_index=data_path.rfind("\\")+1
    data_path=data_path[0:last_index]
    
    from sklearn.datasets import load_iris
    iris_dataset = load_iris()
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)
    from sklearn.neighbors import KNeighborsClassifier
    knn = KNeighborsClassifier(n_neighbors=1)
    knn.fit(X_train, y_train)
    
    #  Convert into ONNX format
    from skl2onnx import convert_sklearn
    from skl2onnx.common.data_types import FloatTensorType
    initial_type = [('float_input', FloatTensorType([None, 4]))]
    onx = convert_sklearn(knn, initial_types=initial_type)
    path = data_path+"iris.onnx"
    with open(path, "wb") as f:
        f.write(onx.SerializeToString())
    Откройте созданный onnx-файл в MetaEditor:

    Просмотр ONNX-модели в MetaEditor


    В качестве выхода "output_probability" отдается последовательность из Map, ключ которой имеет тип INT64 (что соответствует типу long языка MQL5) и значение типа float. Для получения данных с этого выхода объявим следующую структуру:
    struct MyMap
      {
       long              key[];
       float             value[];
      };
    Здесь мы использовали динамические массивы с соответствующими типами. В данном случае можно использовать фиксированные массивы, поскольку для данной модели Map всегда содержит 3 пары ключ+значение.

    Поскольку возвращается последовательность из Map, в качестве параметра для приема данных с выхода output_probability следует передать массив таких структур — динамический или фиксированный, исходя из свойств конкретной модели. Например:
    //--- объявим массив для приема данных с выходного слоя output_probability
    MyMap output_probability[];
    
    ...
    
    //--- выполнение модели
    OnnxRun(model,ONNX_DEBUG_LOGS,float_input,output_label,output_probability);

MetaEditor

  1. Исправлено отображение типа выходных параметров в просмотрщике моделей ONNX.

Web Terminal

  1. Добавлен раздел связи с брокером в основное меню.
  2. Добавлена обработка ошибки авторизации при помощи SSL-сертификата. Этот вид авторизации не поддерживается в веб-терминале, вместо него может быть включена авторизация при помощи одноразовых паролей.
  3. Исправлена ссылка на скачивание десктопной версии платформы в основном меню.
  4. Изменен диалог управления счетами. Если у брокера недоступно открытие демонстрационных или реальных счетов, соответствующий пункт меню скрывается.
14 сентября 2023
MetaTrader 5 build 3950: Снятие/пополнение в терминале и обновленный торговый отчет
  1. Добавлена поддержка балансовых операций снятия и пополнения торгового счета непосредственно в клиентском терминале.

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

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

    Пополнение и снятие средств со счета прямо в платформе

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

    Чтобы посмотреть статистику по торговле, нажмите "Отчеты" в меню "Вид".






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

    • Summary — сводная информация о торговле за все время: данные счета, общие показатели прибыли и убытков, сумма депозитов и выводов, графики баланса, роста и дивидендов и другие результаты торговли.
    • Profit/Loss — информация о прибыльных и убыточных сделках. Делится по типам торговли (ручная, алготрейдинг и копирование сделок), результаты можно анализировать в разрезе сделок или денег по месяцам и годам.
    • Long/Short — покажет вам соотношение между покупками и продажами в динамике и в заданные промежутки времени, а также позволит оценить прибыльность по направлениям Buy и Sell.
    • Symbols — анализ сделок по финансовым инструментам. Здесь вы увидите, на каких символах вы зарабатываете или теряете, как часто по ним торгуете, графики сделок и денежных объемов по ним.


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

  3. Добавлено использование AVX2-инструкций в тех случаях, когда они поддерживаются процессором. Это позволит более эффективно использовать возможности процессора, на котором запускается терминал. Теперь при установке или обновлении терминал сам будет определять архитектуру процессора и устанавливать версию, оптимальную под данный процессор. При запуске терминал пишет в лог сообщение (AVX/AVX2), в котором показывает, под какой набор инструкций собран терминал.
    Terminal	MetaTrader 5 x64 build 3914 started for MetaQuotes Software Corp.
    Terminal	Windows 10 build 19045, 20 x Intel Xeon  E5-2630 v4 @ 2.20GHz, AVX, 41 / 63 Gb memory, 58 / 280 Gb disk, UAC, GMT+2
    

    Advanced Vector Extensions (AVX) — расширение системы команд x86 для микропроцессоров Intel и AMD, предложено еще в 2008. Дальнейшее развитие привело к появлению AVX2 и AVX-512 (2013).

  4. В дополнение к двум версиям терминалов MetaTrader 5 на X64 и AVX, мы выпустили третью версию десктопного терминала, скомпилированную с прямой поддержкой AVX2-команд. При этом ONNX-модели теперь также могут работать с поддержкой AVX2-команд.
  5. Добавлено отображение ссылок на необходимые нормативные документы брокера. Получить всю необходимую правовую информацию со стороны брокера теперь можно прямо в клиентском терминале в меню Help / Terms & Conditions.

    Ссылки на нормативные документы брокера

  6. Исправлена работа 2FA-авторизации при ее совместном использовании с расширенной авторизацией при помощи сертификатов.
  7. Исправлено отображение писем внутренней почты при работе в MacOS.
  8. Исправлено отображение окна Сигналов при работе в Wine.
  9. Выпущены новые инсталляторы МТ4/MT5-терминалов для Linux.
  10. В меню Help добавлены команды для перехода на страницы скачивания Linux и Mac-версий терминала. Для удобства трейдеров мы создали специальный раздел сайта, где представлены варианты торгового терминала под все платформы и для торговли в браузере.

    Ссылки для скачивания Linux и Mac-версий платформы

  11. Исправлена вставка картинок в письма внутренней почты.
  12. Выпущены новые инсталляторы терминала MetaTrader 5 для Mac с поддержкой процессоров M1/M2. В связи с переходом на Wine 8.0.1 мы настоятельно рекомендуем удалить старые версии и инсталлировать новые. При использовании старых версий Wine < 8.0.0 в логе терминала выводится сообщение о необходимости обновления.
  13. Добавлен показ "VPS Hosting Speed Up" в меню сканирования сети с указанием пинга до вашего торгового сервера. Это позволит наглядно увидеть, как уменьшатся ваши сетевые задержки при аренде встроенного VPS.


    Добавлен показ "VPS Hosting Speed Up" в меню сканирования сети с указанием пинга до вашего торгового сервера

  14. Усилены требования на минимальную сложность паролей, а именно:

    • длина пароля — не меньше 8 символов
    • пароль должен содержать не менее 1 символа в верхнем и нижнем регистре, не менее 1 цифры и не менее 1 спецсимвола.

  15. Кликабельные ссылки в логах терминала. Теперь при двойном клике на строках с https ссылками происходит переход в браузер с открытием ссылок.
  16. Исправлен поиск торговых инструментов в Обзоре рынка. Теперь символ в первую очередь ищется по имени, а затем — по остальным полям: описание, ISIN и т.д.
  17. Исправлен учет прибыли по сделкам при расчете баланса в отчетах по торговой истории счета. В некоторых случая при расчете не учитывался тип инструмента.
  18. VPS Hosting

    1. Можно отсылать и запускать EX5-программы, скомпилированные под набор команд x64/AVX/AVX2. Программы под AVX512 на встроенном VPS не поддерживаются.
    2. Количество локаций для аренды встроенного VPS увеличено до 27. Теперь выбор наиболее близкого сервера стал еще шире.

    MQL5

    1. Добавлено управление настройками компиляции, в том числе выбор расширенных наборов инструкций процессора — AVX, AVX2, AVX512, FMA3.

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

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


      Настройки компиляции в MetaEditor

    2. В методы матриц и векторов добавлены перечисления ENUM_AVERAGE_MODE и ENUM_CLASSIFICATION_METRIC.
    3. Добавлен метод Set для векторов.
    4. Переделана инициализация OpenCL - теперь он инициализируется по первому фактическому использованию, а не по загрузке MQL5-программы, содержащей функции OpenCL.
    5. Исправлена ошибка при вызове функции SocketIsConnected.
    6. Исправлена задержка вызова метода OnDeinit при выгрузке кастомных индикаторов.
    7. Исправлена ошибка компилятора, из-за которой неверно вычислялась длина строки в свойстве indicator_label, что приводило к неправильному показу тултипов для графических объектов.
    8. Исправлено использование многострочного комментария в теле макроса. Пример макроса, на котором возникала ошибка:
      #define MACRO1 /*
      #define MACRO2 */
      void OnStart()
      {
      #ifdef MACRO2
          Print( 2 );
      #else
          Print( 1 );
      #endif
      }
    9. Исправлен порядок параметров функции MathAtan2. Теперь порядок соответствует аналогичной функции в C++.
    10. В перечисление ENUM_TERMINAL_INFO_STRING добавлено новое значение TERMINAL_CPU_ARCHITECTURE. Также добавлен макрос  __CPU_ARCHITECTURE__ — получение архитектуры CPU компьютера, на котором работает терминал. Пример использования:
      void OnStart()
        {
         Print("CPU name:         ",TerminalInfoString(TERMINAL_CPU_NAME));
         Print("CPU cores:        ",TerminalInfoInteger(TERMINAL_CPU_CORES));
         Print("CPU architecture: ",TerminalInfoString(TERMINAL_CPU_ARCHITECTURE));  
         Print("");
         Print("EX5 architecture: ",__CPU_ARCHITECTURE__);                            
        }
      
      CPU name:         12th Gen Intel Core i9-12900K
      CPU cores:        24
      CPU architecture: AVX2 + FMA3
      
      EX5 architecture: AVX

    11. Изменено поведение модификатора extern. Теперь объявление переменной с модификатором extern является предъобъявлением переменной.

      Новые ограничения:
      1. Предъобъявление переменной не должно содержать инициализации. Например, при компиляции следующего кода получим ошибку "X - extern variable initialization is not allowed":
        extern int X=0;
        
        void OnStart()
          {
          }

      2. Переменная extern должна быть объявлена в программе без ключевого слова extern. Например, при компиляции следующего кода получим ошибку "unresolved extern variable X":
        extern int X;
        
        void OnStart()
          {
          }

      3. При использовании extern важно следить за порядком инициализации, т.к. доступ к переменной можно получить до её инициалиазции. Например, следущий код выведет в журнал "Y=0 X=5", т.к. инициализация переменной Y происходит до инициализации переменной X:
        extern int X;
        int        Y=X;
        
        void OnStart(void)
          {
           Print("Y=",Y," X=",X);
          }
          
        int X=_Digits;

    MetaEditor

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

    Tester

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

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

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


    MetaTrader 5 Web Terminal build 3950

    1. В настройки графика добавлен показ цены Ask.

      В настройки графика добавлен показ цены Ask

    2. Ускорена первоначальная загрузка терминала.
    3. Добавлена возможность менять пароль.
    4. Добавлена возможность удаления и сохранения пароля.
    5. Добавлен кастомный период для показа торговой истории.
    6. Исправлена ошибка при принудительной смене пароля.
    7. Исправлен расчёт вычисления diff — дистанции между ценой открытия и уровнями TP/SL.

      Исправлен расчёт вычисления diff — дистанции между ценов открытия и уровнями TP/SL

    8. Исправлена ошибка остановки тиков при закрытии всех ордеров/сделок.
    9. Исправлен показ событий Экономического календаря — в некоторых случаях они не отображались на графике, несмотря на включенную опцию.
    10. Исправлена ошибка, когда сбрасывались индикаторы при смене символа на графике.
    11. Исправлена ошибка в форме открытия реального аккаунта при подтверждении телефона/email.
    12. Добавлены и исправлены переводы.
8 июня 2023
MetaTrader 5 build 3800: ордера Book or Cancel, помощь AI при написании кода и расширенная поддержка ONNX

Terminal

  1. Добавлена поддержка новой политики исполнения ордеров — Пассивная / Book or Cancel (BOC).


    Новая политика исполнения ордеров — Пассивная / Book or Cancel


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

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

  2. Платформа переходит на использование компонента Microsoft Edge WebView2 для отображения HTML-страниц.

    По сравнению с устаревшим MSHTML новый компонент существенно расширяет возможности для отображения веб-контента, предоставляя доступ к современным технологиям. Переход на WebView2 позволит улучшить внешний вид некоторых разделов платформы, увеличить их производительность, создать более отзывчивые интерфейсы. В частности, это коснется разделов "Маркет", "Сигналы" и "VPS".
    Полноценная поддержка WebView2 появилась только в Windows 10. Мы рекомендуем всем пользователям по возможности переходить на последние версии операционной системы. При работе под Windows 7 и Wine платформа продолжит использовать устаревший компонент MSHTML, и новые функции в них не будут доступны. Также мы настоятельно рекомендуем устанавливать все доступные обновления операционной системы. Сейчас минимальной рекомендуемой версией является Windows 10 21H2 (build 19044 от ноября 2021).

  3. Улучшена система безопасности в Маркете. Теперь для запуска продукта пользователь должен быть авторизован в платформе своим MQL5-аккаунтом, через который продукт был приобретен. Аккаунт должен быть указан в разделе "Сервис \ Настройки \ Сообщество":


    Укажите аккаунт MQL5 в настройках платформы


    Если аккаунт не указан или указан неверный аккаунт, продукт не запустится, а в журнале платформы появится сообщение вида:
    'ProductName' requires active MQL5 account in Tools->Options->Community
  4. Добавлена команда "Обзор" в контекстное меню раздела истории. Она позволяет открыть торговый отчет по счету:


    Команда для перехода к торговому отчету


  5. Исправлены ошибки отображения диалога двухфакторной авторизации. При наличии в терминале нескольких счетов с одинаковым номером у разных брокеров в форме подключения к счету могло не отображаться поле для ввода одноразового пароля.
  6. Ускорена отрисовка индикаторов со стилем отображения DRAW_COLOR_CANDLES.
  7. Исправлены ошибки построения торгового отчета. В некоторых случаях значения прибыли и эквити на графиках могли отображаться некорректно.
  8. Добавлено отображение показателя "Издержки" в торговом отчете. Он показывает сумму издержек по сделке относительно текущей средней цены инструмента (mid-point spread cost). Фактически это сумма, которую трейдер теряет на спреде при торговле. Доступность этого показателя зависит от брокера.
  9. Обновлены переводы пользовательского интерфейса.
  10. Улучшена стабильность при работе под Wine, в особенности — в системах macOS. Рекомендуем полностью удалить старые терминалы и установить их заново:


  11. Ускорена установка и скачивание обновлений, а также улучшен учет доступности AVX на компьютере пользователя при выборе дистрибутива.
  12. Включена поддержка TLS 1.3 в веб-протоколах. TLS 1.0 отключен как устаревший и небезопасный.
  13. Исправлен учет агентской комиссии в отчетах по торговой истории. Соответствующие операции могли не учитываться при подсчете итоговой прибыли.
  14. Исправлена ошибка, приводившая к невозможности изменить сервер в диалоге подключения к счету. Проблема возникала при наличии в терминале нескольких счетов с одинаковым номером у разных брокеров.
Инсталляторы переводятся на работу только с 64-битными версиями платформы. Поддержка 32-битных версий завершается. Ранее установленные 32-битные версии платформы будут работать до 1 января 2024 года.

MQL5

  1. Добавлено новое значение STAT_COMPLEX_CRITERION в перечисление ENUM_STATISTICS. Оно позволяет получить значение комплексного критерия, рассчитанного в результате оптимизации.
  2. Доработан метод RegressionMetric, используемый для расчета регрессионной метрики по переданной матрице или вектору. Добавлены параметры vector_true и matrix_true для передачи истинных значений, по которым оценивается качество предсказанных данных.
    double vector::RegressionMetric(
       const vector& vector_true,            // истинные значения
       const ENUM_REGRESSION_METRIC  metric  // метрика
       );
     
    double matrix::RegressionMetric(
       const matrix& matrix_true,            // истинные значения
       const ENUM_REGRESSION_METRIC metric   // метрика
       );
     
    vector matrix::RegressionMetric(
       const matrix& matrix_true,            // истинные значения
       const ENUM_REGRESSION_METRIC metric,  // метрика
       const int                      axis   // ось
       );
  3. Добавлен метод LinearRegression. Он возвращает вектор/матрицу с рассчитанными значениями линейной регрессии для переданного вектора/матрицы.
    vector vector::LinearRegression();
     
    matrix matrix::LinearRegression(
       ENUM_MATRIX_AXIS axis=AXIS_NONE       // ось, вдоль которой считается регрессия 
       );
    Пример:
    vector vector_a;
    //--- заполним вектор ценами
    vector_a.CopyRates(_Symbol,_Period,COPY_RATES_CLOSE,1,100);
    //--- получим линейную регрессию
    vector vector_r=vector_a.LinearRegression();
    Визуализация результата в виде графика:


    Визуализация результата, возвращенного методом LinearRegression


  4. Добавлен метод HasNan — возвращает количество NaN значений в матрице/векторе.
    ulong vector::HasNan();
    ulong matrix::HasNan();
    Методы Compare и CompareByDigits при сравнении соответствующей пары элементов, имеющих значения NaN, считают эти элементы равными, тогда как при обычном сравнении чисел с плавающей точкой NaN != NaN.

  5. Изменена структура OnnxTypeInfo, используемая для работы с моделями ONNX (Open Neural Network Exchange):

    struct OnnxTypeInfo
      {
       ENUM_ONNX_TYPE       type;            // тип параметра
       OnnxTensorTypeInfo   tensor;          // описание тензора
       OnnxMapTypeInfo      map;             // описание карты
       OnnxSequenceTypeInfo sequence;        // описание последовательности
      };

    Теперь тип данных в ней указывается при помощи новых подструктур:

    • OnnxTensorTypeInfo — тензор
    • OnnxMapTypeInfo — карта
    • OnnxSequenceTypeInfo — последовательность

    struct OnnxTensorTypeInfo
      {
       ENUM_ONNX_DATATYPE   data_type;       // тип данных в тензоре
       long                 dimensions[];    // количество элементов
      };
    
    struct OnnxMapTypeInfo
      {
       ENUM_ONNX_DATA_TYPE  key_type;        // тип ключа
       OnnxTypeInfo         type_info;       // тип значения
      };
    
    struct OnnxSequenceTypeInfo
      {
       OnnxTypeInfo         type_info;       // тип данных в последовательности
      };
    В зависимости от OnnxTypeInfo::type (ONNX_TYPE_TENSOR, ONNX_TYPE_MAP или ONNX_TYPE_SEQUENCE) заполняется соответствующая подструктура.

  6. Доработана поддержка моделей ONNX.
  7. Добавлены методы CopyIndicatorBuffer, позволяющие получить данные буфера индикатора в вектор.
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,ulong start_pos,ulong count);
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,datetime start_time,ulong count);
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,datetime start_time,datetime stop_time);
  8. Исправлена работа с массивами с двумя и более измерениями в методах FrameAdd и FrameNext.
  9. Исправлена работа метода CRedBlackTree::Remove в стандартной библиотеке.
  10. Внесены исправления в библиотеку нечеткой логики Fuzzy.

MetaEditor

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


    Визуализация результата, возвращенного методом LinearRegression


    В зависимости от типа файла, в котором вы работаете, в начало каждого промпта автоматически добавляется строка "MQL5 language", "Python language" или "C++ language". Так нейросеть будет выдавать результат на нужном языке.

    В данный момент Copilot работает бесплатно, его не нужно отдельно включать. В разделе Сервис \ Настройки \ Copilot доступно несколько настроек:


    Настройки Copilot


    Настройки оплаты:

    • Использовать MQL5-аккаунт — в данный момент этот режим работает бесплатно. В последующем вы сможете оплачивать подписку напрямую с баланса вашего аккаунта MQL5.
    • Использовать ключ OpenAI — если вы уже оплатили подписку и у вас есть ключ, можете использовать его.

    Настройки запросов:

    • Модель — нейросеть, которая будет обрабатывать ваши запросы. На данный момент доступны text-davinci-003 и gpt-3.5-turbo. В последующем будет добавлена поддержка gpt-4.
    • Максимум токенов — количество единиц текста, которое модель может возвращать в ответ на промпт.
    • Вариативность — влияет на то, насколько строго нейросеть будет придерживаться промпта. Чем больше значение, тем более случайным может быть результат. В моделях OpenAI соответствует параметру temperature.

  2. Добавлена возможность просматривать свойства моделей ONNX.

    Теперь прямо в редакторе можно в удобном виде посмотреть содержимое файла *.onnx. Чтобы посмотреть, как это выглядит, найдите проект ONNX.Price.Prediction в разделе "Инструменты \ Публичные проекты", а затем нажмите "Присоединиться" в контекстном меню. Проект загрузится на компьютер и появится в Навигаторе.


    Открывайте модели ONNX прямо в MetaEditor


  3. Добавлена возможность визуализации моделей машинного обучения и нейронных сетей через Netron. Этот просмотрщик поддерживает множество популярных моделей: ONNX, TensorFlow Lite, Caffe, Keras, ncnn и т.д.

    Для просмотра модели выберите ее файл в Навигаторе и нажмите "Открыть в Netron". Если эта утилита еще не установлена, будет открыта ее страница на GitHub, откуда вы можете скачать установочный файл для своей операционной системы. Например, Netron-Setup-X.X.X.exe — для Windows. После установки программы модель сразу же будет открываться на просмотр из Навигатора.


    Визуализируйте модели машинного обучения через Netron


    Поддерживаемые форматы:

    • armnn, caffemodel, circle, ckpt, cmf, dlc, dnn, h5, har, hd5, hdf5, hn, keras, kmodel,
    • lite, mar, meta, mge, mlmodel, mlnet, mlpackage, mnn, model, nb, ngf, nn, nnp,
    • om, onnx, ort, paddle, param, pb, pbtxt, pdiparams, pdmodel, pdopt, pdparams, prototxt, pt, pth, ptl,
    • rknn, t7, tfl, tflite, tmfile, tm, tnnproto, torchscript, uff, xmodel

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

Tester

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

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

Web Terminal

  1. Доработан раздел торговой истории:

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


    Обновленный раздел торговой истории

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

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

  4. Добавлен перевод интерфейса на арабский, болгарский, вьетнамский, греческий, индонезийский, малайский, нидерландский, персидский, польский, тайский, украинский и хинди. Теперь веб-терминал доступен уже на 24 языках.
  5. Исправлен перевод на турецкий язык.
  6. Исправлена модификация и удаление отложенных ордеров в мобильной версии веб-терминала.
  7. Исправлена подсказка о закрытом рынке, отображаемая на графике.
  8. Исправлено отображение прибыли на кнопке закрытия позиции в торговом диалоге. Ошибка возникала при частичном закрытии.
  9. Исправлено отображение торговых уведомлений на графике.
  10. Исправлено изменение объема при помощи стрелок в стакане цен.
  11. Исправлена ошибка, в некоторых случаях приводившая к сбросу настроек индикаторов на графике.
  12. Исправлена проверка имени пользователя при открытии новых счетов. Ранее наличие апострофа в имени считалось ошибкой.
  13. Исправлена обработка реквотов. В некоторых случаях диалог с предложением новых цен мог не отображаться.
  14. Исправлено отображение индикатора Ichimoku Kinko Hyo. Теперь линии Chikou-span, Up kumo и Down kumo отображаются с корректным смещением.
  15. Исправлена проверка начальной маржи при открытии нового ордера. Ошибка возникала при использовании хеджинговой системы учета позиций.
  16. Исправлена прокрутка в окне спецификации контракта.

MQL5.community

  1. Полностью обновлен сайт сети распределенных вычислений MQL5 Cloud Network — https://cloud.mql5.com.

    Узнайте, как использовать мощности тысяч компьютеров по всему миру для оптимизации своих торговых стратегий. Благодаря MQL5 Cloud Network даже самые долгие и тяжелые расчеты можно выполнить в считанные минуты. Здесь же вы узнаете, как стать участником сети и зарабатывать на предоставлении своих вычислительных ресурсов.


    Посетите обновленный сайт MQL5 Cloud Network


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


    Улучшенный раздел скриншотов в Маркете


  3. Улучшен раздел Фриланс. Теперь при размещении первых заказов пользователи будут получать больше подсказок:

    • Примеры технического задания и напоминание о необходимости его прикрепить
    • Инструкции по прохождению шагов
    • Советы по использованию шаблонов

    Все это поможет не запутаться в процессе и получить желаемый результат.


    Фриланс стал более дружелюбным


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

24 марта 2023
MetaTrader 5 build 3660: Улучшения и исправления

Terminal

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

MQL5

  • Исправлена проверка глобальных переменных. При объявлении одинаковых переменных в разных пространствах имен компилятор выдавал ошибочное предупреждение о том, что переменная уже объявлена.

Web Terminal

  1. Добавлен перевод пользовательского интерфейса на португальский. Теперь веб-терминал доступен на 12 языках.
  2. Исправлен диалог добавления индикатора Standard Deviation.
  3. Мелкие исправления и улучшения.
17 марта 2023
MetaTrader 5 build 3640: веб-терминал на 11 языках

Web Terminal

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


    Интерфейс веб-терминала доступен на 11 языках


  2. Оптимизирован механизм подключения к торговому серверу.

MQL5

  1. MQL5: Добавлены флаги COPY_TICKS_VERTICAL и COPY_RATES_VERTICAL для методов CopyTicks, CopyTicksRange и CopyRates соответственно.

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

    const long   ExtOutputShape[] = {1,1};    // форма выходных данных модели
    const long   ExtInputShape [] = {1,10,4}; // форма входных данных модели
    #resource "Python/model.onnx" as uchar ExtModel[]// модель в виде ресурса
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    int OnStart(void)
      {
       matrix rates;
    //--- получаем 10 баров
       if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC,2,10))
          return(-1);
    //--- подаем на вход набор векторов OHLC
       matrix x_norm=rates.Transpose();
       vector m=x_norm.Mean(0);               
       vector s=x_norm.Std(0);
       matrix mm(10,4);
       matrix ms(10,4);

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

    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    int OnStart(void)
      {
       matrix rates;
    //--- получаем 10 баров
       if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC|COPY_RATES_VERTICAL,2,10))
          return(-1);
    //--- подаем на вход набор векторов OHLC
  2. Добавлено значение CHART_SHOW_TRADE_HISTORY в перечисление ENUM_CHART_PROPERTY_INTEGER. Свойство управляет отображением сделок из торговой истории на графике. Для получения и установки свойства используйте функции ChartGetInteger и ChartSetInteger. Подробнее об отображении сделок на графике читайте в документации платформы.

MetaEditor

  • Исправлено зависание интерфейса, происходившее в редких случаях при компиляции файлов.

Terminal

  • Исправления по крешлогам.
10 марта 2023
MetaTrader 5 build 3620: улучшения веб-терминала, поддержка ONNX и ускоренное умножение матриц в MQL5

Terminal

  1. Исправлена ошибка при подсчете итоговой прибыли в торговом отчете.
  2. Обновлены фундаментальные данные по торговым инструментам, доступные через Обзор рынка.
  3. Исправлен запуск торговой платформы под Wine 7.0.1 при работе в Linux-системах.
  4. Исправлено добавление символов в Обзор рынка через строку поиска. Символ, найденный по описанию, было невозможно добавить в список кликом мыши на его строке.

MQL5

  1. Добавлена поддержка работы с моделями ONNX (Open Neural Network Exchange).

    ONNX — открытая библиотека для построения нейронных сетей глубокого обучения. Этот формат поддерживается множеством платформ, включая Chainer, Caffee2 и PyTorch. Создав ONNX модель при помощи специализированных инструментов, вы можете интегрировать ее в свою MQL5-программу и использовать для принятия торговых решений.

    Описание всех поддерживаемых функций доступно в документации. Пример работы с тестовой моделью доступен в публичных проектах в MetaEditor. Найдите проект ONNX.Price.Prediction в разделе "Инструменты \ Публичные проекты", а затем нажмите "Присоединиться" в контекстном меню. Проект загрузится на компьютер и появится в Навигаторе:


    Пример работы с ONNX моделю в публичных проектах


    Скомпилируйте проект и запустите его на EURUSD H1, чтобы посмотреть результат.

    Помимо готовой модели и MQL5-кода для ее запуска, в проекте также доступен Python скрипт PricePredictionTraining.py. Он показывает, как самостоятельно создать модель ONNX. Для работы скрипта установите на свой компьютер Python, а также необходимые модули из командной строки:

    python.exe -m pip install --upgrade pip
    python -m pip install --upgrade tensorflow
    python -m pip install --upgrade pandas
    python -m pip install --upgrade scikit-learn
    python -m pip install --upgrade matplotlib
    python -m pip install --upgrade tqdm
    python -m pip install --upgrade metatrader5
    python -m pip install --upgrade onnx==1.12
    python -m pip install --upgrade tf2onnx
    Подробные инструкции по работе с ONNX доступны в документации.

  2. Добавлена поддержка нового алгоритма умножения матриц General Matrix Multiplication (GeMM). Он позволяет значительно ускорить вычисления на большинстве процессоров за счет распараллеливания задач и более правильного использования кэшей L1/L2/L3. Скорость вычисления при этом сравнима с такими известными пакетами, как Math Kernel Library (MKL) и OpenBLAS. В ближайшее время мы опубликуем подробные сравнительные тесты.

    Новый алгоритм на данный момент поддерживается в методе matrix::GeMM. Если ваш процессор поддерживает инструкции AVX и FMA (большинство процессоров, выпущенных после 2013 года), алгоритм будет задействован автоматически.

  3.  Добавлена поддержка передачи матриц и векторов в DLL. Теперь вы можете импортировать функции, использующие этот тип данных, из внешних библиотек.

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

    MQL5
    #import "mmlib.dll"
    bool sgemm(uint flags,matrix<float> &C,const matrix<float> &A,const matrix<float> &B,ulong M,ulong N,ulong K,float alpha,float beta);
    #import
    C++
    extern "C" __declspec(dllexport) bool sgemm(UINT flags,float *C,const float *A,const float *B,UINT64 M,UINT64 N,UINT64 K,float alpha,float beta)
    Для правильной обработки матриц и векторов, кроме их буферов, следует передавать их размеры.

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

    Функция CopySeries позволяет за один раз получать только нужные таймсерии в разные указанные массивы, при этом они все синхронизированы между собой. Это означает, что все значения в полученных массивах по конкретному индексу N будут принадлежать одному и тому же бару на указанной паре символ/таймфрейм. В этом случае не требуется заботиться о том, чтобы все полученные таймсерии были синхронизированы по времени открытия бара.

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

    struct MqlRates
      {
       datetime time;         // время начала периода
       double   open;         // цена открытия
       double   high;         // наивысшая цена за период
       double   low;          // наименьшая цена за период
       double   close;        // цена закрытия
       long     tick_volume;  // тиковый объем
       int      spread;       // спред
       long     real_volume;  // биржевой объем
      }

    Таким образом, если необходимо получить значения таймсерий time, close и real_volume для последних 100 баров текущего символа/таймфрейма, вызов должен быть следующим:

    datetime  time[];
    double    close[];
    long      volume[];
    CopySeries(NULL,0,0,100,COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_VOLUME_REAL,time,close,volume);
    

    При этом важен порядок массивов "time, close, volume" — он должен соответствовать порядку полей в структуре MqlRates. А вот порядок значений в маске rates_mask значения не имеет, маска могла быть такой :

    COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE

    Пример

    //--- input parameters
    input datetime InpDateFrom=D'2022.01.01 00:00:00';
    input datetime InpDateTo  =D'2023.01.01 00:00:00';
    input uint     InpCount   =20;
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart(void)
      {
    //--- массивы для получения таймсерий из ценовой структуры Rates
       double   open[];
       double   close[];
       float    closef[];
       datetime time1[], time2[];
    //---запросим цены закрытия в массив типа double
       ResetLastError();
       int res1=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
                           COPY_RATES_TIME|COPY_RATES_CLOSE, time1, close);
       PrintFormat("1. CopySeries  returns %d values. Error code=%d", res1, GetLastError());
       ArrayPrint(close);
       
    
    //--- теперь запросим еще цены открытия, а цены закрытия в массив типа float
       ResetLastError();
       int res2=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
                           COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_OPEN, time2, open, closef);
       PrintFormat("2. CopySeries  returns %d values. Error code=%d", res2, GetLastError());
       ArrayPrint(closef);
    //--- сравним полученные данные
       if((res1==res2) && (time1[0]==time2[0]))
         {
          Print("  | Time             |    Open      | Close double | Close float |");
          for(int i=0; i<10; i++)
            {
             PrintFormat("%d | %s |   %.5f    |   %.5f    |   %.5f   |",
                         i, TimeToString(time1[i]), open[i], close[i], closef[i]);
            }
         }
    /*  Результат
            1. CopySeries  returns 0 values. Error code=0
            [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
            [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
            2. CopySeries  returns 0 values. Error code=0
            [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
            [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
              | Time             |    Open      | Close double | Close float |
            0 | 2023.03.01 17:00 |   1.06660    |   1.06722    |   1.06722   |
            1 | 2023.03.01 18:00 |   1.06722    |   1.06733    |   1.06733   |
            2 | 2023.03.01 19:00 |   1.06734    |   1.06653    |   1.06653   |
            3 | 2023.03.01 20:00 |   1.06654    |   1.06520    |   1.06520   |
            4 | 2023.03.01 21:00 |   1.06520    |   1.06573    |   1.06573   |
            5 | 2023.03.01 22:00 |   1.06572    |   1.06649    |   1.06649   |
            6 | 2023.03.01 23:00 |   1.06649    |   1.06694    |   1.06694   |
            7 | 2023.03.02 00:00 |   1.06683    |   1.06675    |   1.06675   |
            8 | 2023.03.02 01:00 |   1.06675    |   1.06684    |   1.06684   |
            9 | 2023.03.02 02:00 |   1.06687    |   1.06604    |   1.06604   |
    */
      }
  5. Исправлена ошибка, в редких случаях приводившая к получению некорректного тикета ордера после отправки запроса функцией OrderSend. Ошибка могла возникать при параллельной торговле на одном счете через разные платформы.
  6. Исправлена ошибка импорта EX5-библиотек. Она возникала, если имя импортируемой библиотеки совпадало с именем файла, в который она импортируется.

MetaEditor

  1.  Добавлена рассылка Push-уведомлений участникам групповых проектов. Теперь каждый участник всегда будет в курсе любых изменений в файлах или настройках проекта. Для получения уведомлений укажите свой MetaQuotes ID в разделе "Настройки \ Безопасность" вашего профиля MQL5.community.


    Push-уведомления об изменениях в проекте


  2. Обновлены иконки файлов в Навигаторе. Новые более простые метафоры облегчат восприятие информации.

Tester

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

MetaTrader 5 Web Terminal build 3620

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


    Новые цветовые схемы для веб-терминала


  2. Переработано окно спецификации торгового инструмента. Все данные перекомпонованы в компактные логические блоки для более удобного просмотра.


    Обновленное окно спецификации торгового инструмента


  3. Исправлено открытие реальных счетов через веб-терминал. В некоторых случаях после заполнения регистрационной формы сервер мог возвращать ошибку.
  4. Исправлена ошибка в торговом диалоге. Если пользователь открывал диалог модификации позиции, а затем закрывал позицию кнопкой "X" в окне инструментов, содержимое диалога не сбрасывалось. Теперь в этом случае диалог будет автоматически возвращаться в режим выставления нового ордера.
  5. Исправлено отображение поля Server в диалоге управления счетами.
  6. Исправлено отображение текущего таймфрейма на панели инструментов.
  7. Исправлено отображение объема в количестве единиц базового актива в торговом диалоге.
  8. Исправлена модификация уровней "Стоп Лосс" и "Тейк Профит". В некоторых случаях модификация одного значения могла приводить к сбросу второго.
  9. Исправлено отображение предупреждения о рисках инвестора.
6 марта 2023
MetaTrader 5 для iPhone/iPad: улучшение торговых и аналитических функций графиков
  1. Добавлена возможность выставлять стоп и стоп-лимитные ордера с графика.

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


    Выставляйте стоп и стоп-лимитные ордера с графика


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


    Управляйте позициями и ордерами с графика


  3. Улучшена функция сдвига правой границы ценового графика. Теперь для изменения сдвига достаточно прокрутить график к последней цене до появления вертикального разделителя. Далее потяните за треугольник у нижней шкалы графика:


    Изменяйте отступ графика, потянув за треугольник у нижней шкалы


  4. Добавлена возможность копировать аналитические объекты на графике. Это поможет быстрее наносить разметку. Вызовите меню объекта долгим нажатием на нем и выберите "Копировать":

    Создавайте копии аналитических объектов


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


    Управляйте отображением индикаторов на разных таймфреймах


  6. Добавлено отображение комиссий по инструменту в окне спецификации.


    Узнайте размер комиссии в спецификации инструмента


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


    Помощь при восстановлении пароля


  8. Добавлена возможность поделиться ссылкой на канал в сообществе MQL5.community.


    Делитесь ссылкой на свой канал через приложение


  9. Улучшен пользовательский опыт при подключении к счету с ограниченной торговлей.

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

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


    Помощь пользователю при ограниченной торговле


  10. Улучшена работа с SSL-сертификатами, используемыми при расширенной аутентификации.

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


    Улучшена работа с SSL-сертификатами


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

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

  11. Построение ценовых графиков переведено на Metal — последнее поколение графического API, используемого в устройствах от Apple. Это существенно увеличит производительность при отображении графиков, индикаторов и объектов.
  12. Исправлена подстановка уровней Стоп Лосс и Тейк Профит в стакане цен. Теперь для счетов, работающих в режиме FIFO, значения стоп-уровней будут автоматически устанавливаться в соответствии со стоп-уровнями уже открытых позиций по тому же инструменту. Это необходимо для соблюдения правила FIFO.
  13. Исправлено реквотирование. При получении реквота пользователю дается короткое время на решение, принимать новые цены или нет. При отсутствии решения запрос автоматически отклоняется, а окно реквота закрывается.
  14. Исправлено отображение времени в разделе "График" при использовании темной темы интерфейса.
16 декабря 2022
MetaTrader 5 build 3550: улучшения и исправления

Terminal

  1. Terminal: Обновлены переводы пользовательского интерфейса.
  2. Исправления по крешлогам.

Web Terminal

9 декабря 2022
MetaTrader 5 build 3540: 2FA/TOTP аутентификация и улучшенный Обзор рынка в веб-терминале

Web Terminal

  1. Добавлена поддержка 2FA/TOTP-аутентификации с помощью Google Authenticator и других подобных приложений.

    Использование двухфакторной аутентификации позволяет дополнительно защитить ваш торговый аккаунт от неавторизованного доступа даже в случае утечки логина и постоянного пароля к нему. Существует множество мобильных приложений, которые позволяют проводить двухэтапную аутентификацию с помощью алгоритма Time-based One-time Password Algorithm (TOTP). Среди наиболее известных Google Authenticator, Microsoft Authenticator, LastPass Authenticator и Authy. Теперь в клиентском терминале MetaTrader 5 можно авторизоваться с помощью одноразовых паролей, получаемых из таких Authenticator-приложений.

    Чтобы включить двухэтапную аутентификацию, сначала авторизуйтесь в веб-терминале MetaTrader 5 обычным способом. Затем нажмите на свой счет в меню и выберите "Enable 2FA/TOTP " в открывшемся диалоге. Запустите Authenticator на мобильном телефоне, нажмите в нем кнопку "+" для добавления вашего торгового счета и отсканируйте QR-код из терминала. Введите полученный код в поле "One-time password" и нажмите кнопку "Enable 2FA" — секрет для вашего счета будет добавлен на торговом сервере брокера.


    Добавлена поддержка 2FA/TOTP-аутентификации с помощью Google Authenticator и других подобных приложений


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


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


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

    Если вы решите удалить сохраненный секрет из приложения Authenticator, предварительно отключите использование 2FA/TOTP-аутентификации, используя соответствующую команду в меню счета. Если 2FA/TOTP-аутентификация недоступна на вашем счете, попросите брокера включить эту опцию.

  2. Расширено количество информации, отображаемой в Market Watch. Теперь помимо текущих цен Bid/Ask и процента изменения цены вы можете посмотреть:

    • Максимальную и минимальную цену Bid/Ask за текущую торговую сессию
    • Цены открытия текущей и закрытия предыдущей торговой сессии

    Для настройки отображаемой информации используйте контекстное меню:


    Дополнительная информация в Обзоре рынка


  3. Добавлен показ уведомления о рисках при включении соответствующей настройки на стороне брокера. Некоторые регуляторы требуют, чтобы трейдер прочел и принял уведомление перед тем, как приступить к торговле.
  4. Исправлено отображение верхней панели инструментов на моделях iPhone с "челкой" в верхней части экрана. В некоторых случаях она могла закрывать кнопки на панели.
  5. Исправлено отображение итоговых финансовых показателей счета (прибыль, эквити и т.д.) в браузере Google Chrome. В некоторых случаях значения могли не обновляться.

Terminal

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

MQL5

  1. В класс COpenCL стандартной библиотеки добавлены новые методы:

    • BufferFromMatrix — заполнение буфера устройства данными из матрицы
    • BufferToMatrix — чтение данных из буфера устройства в матрицу
    • ContextCreate — создание контекста устройства (первая часть метода Initialize)
    • ProgramCreate — создание программы на основе исходного кода OpenCL (вторая часть метода Initialize)
    • ContextClean — освобождение всех данных, принадлежащих контексту устройства (аналог метода Shutdown, но без удаления контекста)
    • GetDeviceInfoInteger — получение целочисленного свойства устройства
    • GetKernelInfoInteger — получение целочисленного свойства кернела
    • GetDeviceInfo — получение любого одиночного целочисленного свойства устройства, не присутствующего в перечислении ENUM_OPENCL_PROPERTY_INTEGER

    Пример использования GetDeviceInfo:
    long preferred_workgroup_size_multiple=OpenCL.GetDeviceInfo(0x1067);
  2. Добавлены значения TERMINAL_CPU_NAME и TERMINAL_OS_VERSION в перечисление ENUM_TERMINAL_INFO_STRING. Они позволяют получить наименование процессора и операционной системы пользователя.
    void OnStart()
      {
       string cpu,os;
    //---
       cpu=TerminalInfoString(TERMINAL_CPU_NAME);
       os=TerminalInfoString(TERMINAL_OS_VERSION);
       PrintFormat("CPU: %s, OS: %s",cpu,os);
      }
    
    Результат:
    CPU: Intel Xeon  E5-2630 v4 @ 2.20GHz, OS: Windows 10 build 19045
  3. Исправлена работа параметра "table_or_sql" в функциях DatabasePrint и DatabaseExport. Теперь в нем можно передавать имя таблицы, а не только SQL-запрос.

MetaEditor

  1. Исправлена проверка на максимальное количество столбцов в базе данных, которые могут быть отображены. Теперь отобразить можно до 64 колонок.
  2. Исправлена работа точек останова в коротких конструкциях вида IF[ if(cond) break; ].
25 ноября 2022
MetaTrader 5 build 3520: добавлена 2FA/TOTP аутентификация с помощью Google Authenticator

Terminal

  1. Добавлена поддержка 2FA/TOTP-аутентификации с помощью Google Authenticator и других подобных приложений.

    Использование двухфакторной аутентификации позволяет дополнительно защитить ваш торговый аккаунт от неавторизованного доступа даже в случае утечки логина и постоянного пароля к нему. Существует множество мобильных приложений, которые позволяют проводить двухэтапную аутентификацию с помощью алгоритма Time-based One-time Password Algorithm (TOTP). Среди наиболее известных Google Authenticator, Microsoft Authenticator, LastPass Authenticator и Authy. Теперь в клиентском терминале MetaTrader 5 можно авторизоваться с помощью одноразовых паролей, получаемых из таких Authenticator-приложений.

    Чтобы включить двухэтапную аутентификацию, сначала авторизуйтесь в клиентском терминале MetaTrader 5 обычным способом. Затем правой кнопкой по торговому счету вызовите меню и выполните команду "Разрешить 2FA/TOTP". Запустите Authenticator на мобильном телефоне, нажмите в нем кнопку "+" для добавления вашего торгового счета и отсканируйте QR-код из терминала. Введите полученный код в поле "One-time password" и нажмите кнопку "Enable 2FA" — секрет для вашего счета будет добавлен на торговом сервере брокера.


    Добавлена поддержка 2FA/TOTP-аутентификации с помощью Google Authenticator и других подобных приложений

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



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

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

MQL5

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

  2. Для получения информации о последней ошибке OpenCL в перечисления добавлены новые значения, которые позволяют получить код ошибки и текстовое описание.
    1. В перечисление ENUM_OPENCL_PROPERTY_INTEGER добавлено значение CL_LAST_ERROR (код 4094) 

      Для получения последней ошибки OpenCL через CLGetInfoInteger параметр handle игнорируется, то есть не имеет значения. Описание ошибок: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS.
      Для неизвестного кода ошибки вернётся строка "unknown OpenCL error N", где вместо N будет код ошибки.

      Пример:
      //--- первый параметр handle игнорируется при получении кода последней ошибки
      int code = (int)CLGetInfoInteger(0,CL_LAST_ERROR);

    2. В перечисление ENUM_OPENCL_PROPERTY_STRING добавлено значение CL_ERROR_DESCRIPTION (4093).
      Текстовое описание ошибки OpenCL можно получить с помощью CLGetInfoString. Описание ошибок: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS.

      При использовании CL_ERROR_DESCRIPTION в качестве параметра handle в CLGetInfoString следует передать код ошибки. Если вместо кода ошибки передать CL_LAST_ERROR, то функция вернёт описание последней ошибки.

      Пример:
      //--- получить код последней OpenCL ошибки
      int    code = (int)CLGetInfoInteger(0,CL_LAST_ERROR);
      string desc; // для получения текстового описания ошибки
      
      //--- используем код ошибки для получения текстового описания ошибки
      if(!CLGetInfoString(code,CL_ERROR_DESCRIPTION,desc))
         desc = "cannot get OpenCL error description, " + (string)GetLastError();
      Print(desc);
      
      
      //--- чтобы получить описание последней OpenCL ошибки без предварительного получения кода, нужно передать CL_LAST_ERROR  
      if(!CLGetInfoString(CL_LAST_ERROR,CL_ERROR_DESCRIPTION, desc))
         desc = "cannot get OpenCL error description, " + (string)GetLastError();
      Print(desc);
      Пока в качестве описания ошибки отдаётся имя внутреннего перечисления, расшифровку которого можно посмотреть на странице https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS. Например, если получено значение CL_INVALID_KERNEL_ARGS, описание для него "Returned when enqueuing a kernel when some kernel arguments have not been set or are invalid."

  3. Исправлена работа метода matrix::MatMul. При работе с матрицами большого размера на некоторых размерах терминал аварийно завершал работу.

  1. Исправления по крешлогам.
18 ноября 2022
MetaTrader 5 build 3510: улучшения веб-терминала

MetaTrader 5 WebTerminal

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

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


    Операции можно отcортировать по основным параметрам: дате, тикету, символу, объему и т.д.

  2. Улучшен доступ к информации о ваших торговых счетах.

    • В десктопной версии данные текущего счета в меню-бутерброде теперь кликабельны. Нажав на счет, вы перейдете к просмотру его деталей.
    • В мобильной версии отображение текущего счета добавлено в разделе "Settings". Нажав на счет, вы перейдете к просмотру его деталей.


    Улучшен доступ к информации о ваших торговых счетах

  3. Исправлено отображение типа счета в окне управления счетами.
  4. Исправлено отображение эквити и свободной маржи после обновления страницы с веб-терминалом в мобильных браузерах.
  5. Исправлено отображение нижней панели в мобильном браузере Firefox.

Terminal

  1. Terminal: Исправлена ошибка в расчете графиков баланса и эквити в торговом отчете.

MQL5

  1. Изменилось поведение typename(expr). Теперь функция отдает полный тип с модификаторами и размерностями (для массивов):
    class A
      {
      };
    
    void OnStart(void)
      {
       const A *const arr[][2][3]={};
       Print(typename(arr));
      }
    
    Результат:
    "class A const * const [][2][3]"

Исправления по крешлогам.
11 ноября 2022
MetaTrader 5 build 3500: улучшения и исправления

Terminal

  1. В контекстное меню разделов "Торговля" и "История"  добавлена команда для доступа к новому торговому отчету:

    Добавлена команда для доступа к новому торговому отчету


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

  2. Исправлен расчет начального депозита в торговом отчете.
  3. Исправлена установка уровней "Стоп Лосс" и "Тейк Профит" при использовании панелей быстрой торговли на графике и в "Обзоре рынка". Уровни могли ошибочно наследоваться от ранее открытых позиций, даже если это не требовалось (функционал предназначен для счетов FIFO).
  4. Обновлены переводы пользовательского интерфейса.

MQL5

  1. Исправлена ошибка компилятора, которая позволяла обращаться к полю структуры по константной строке, значением которой является имя поля.
  2. Исправлена проверка состояния клавиш с помощью TerminalInfoInteger(TERMINAL_KEYSTATE_*).

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


MetaTrader 5 WebTerminal build 3500

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

4 ноября 2022
MetaTrader 5 build 3490: мобильная версия веб-терминала и новые методы матриц в MQL5

Мобильная версия веб-терминала

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

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

Помимо этого, в веб-терминал внесено множество исправлений и улучшений.

Новый веб-терминал MetaTrader 5 поддерживает все функции, которые нужны современному трейдеру. Приложение позволяет:

  • Работать с демонстрационными и реальными счетами
  • Получать котировки любых финансовых инструментов
  • Торговать на любых рынках
  • Проводить технический анализ котировок при помощи 30+ индикаторов и 20 графических объектов
  • Анализировать данные Экономического календаря


Terminal

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

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


  2. В настройки терминала добавлена вкладка OpenCL для управления доступными устройствами. Новый менеджер OpenCL позволяет явно указывать устройства, которые будут использоваться для расчетов.

    В настройки терминала добавлена вкладка OpenCL для управления доступными устройствами.

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

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

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

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

  4. Исправлено удаление уровней Стоп Лосс и Тейк Профит кнопками "Х" в разделе "Инструменты\Торговля". Ошибка возникала при отключенной функции быстрой торговли. Теперь при нажатии кнопки будет открываться торговый диалог с пустым значением соответствующего уровня.

  5. Внесены правки в торговый отчет — исправлены подписи на графиках и расчёт итоговой комиссии. Кроме того, в некоторых случаях показывался некорректный Profit в статистике отчета, а также неверные значения в тултипах при наведении на графики эквити и баланса.

MQL5

  1. Добавлены методы векторов и матриц CopyTicks и CopyTicksRange. Они позволяют легко копировать массивы тиковых ценовых данных в векторы и матрицы.
    bool matrix::CopyTicks(string symbol,uint flags,ulong from_msc,uint count);
    bool vector::CopyTicks(string symbol,uint flags,ulong from_msc,uint count);
    
    bool matrix::CopyTicksRange(string symbol,uint flags,ulong from_msc,ulong to_msc);
    bool matrix::CopyTicksRange(string symbol,uint flags,ulong from_msc,ulong to_msc);
    Тип копируемых данных указывается в параметре flags при помощи перечисления ENUM_COPY_TICKS. Доступны следующие значения:
    COPY_TICKS_INFO    = 1,       // тики, вызванные изменениями Bid и/или Ask
    COPY_TICKS_TRADE   = 2,       // тики, вызванные изменениями Last и Volume
    COPY_TICKS_ALL     = 3,       // все тики, в которых есть изменения
    COPY_TICKS_TIME_MS = 1<<8,    // время в миллисекундах
    COPY_TICKS_BID     = 1<<9,    // цена Bid
    COPY_TICKS_ASK     = 1<<10,   // цена Ask
    COPY_TICKS_LAST    = 1<<11,   // цена Last
    COPY_TICKS_VOLUME  = 1<<12,   // объем
    COPY_TICKS_FLAGS   = 1<<13,   // флаги тика
    При выборе нескольких типов данных (доступно только для матриц) порядок строк в матрице будет соответствовать порядку значений в перечислении.

  2. Расширены возможности методов matrix::Assign и vector::Assign.
    Теперь матрице можно назначить одномерный массив или вектор:
    bool matrix::Assign(const vector &vec);
    Результатом будет однострочная матрица.
    Также вектору теперь можно назначить матрицу (будет выполнено сглаживание матрицы):
    bool vector::Assign(const matrix &mat);
    
  3. Добавлены методы Swap для векторов и матриц.
    bool vector::Swap(vector &vec);
    bool vector::Swap(matrix &vec);
    bool vector::Swap(double &arr[]);
    bool matrix::Swap(vector &vec);
    bool matrix::Swap(matrix &vec);
    bool matrix::Swap(double &arr[]);
    Каждый массив, вектор или матрица ссылаются на буфер памяти, который содержит элементы данного объекта. Метод Swap фактически меняет местами указатели на данные буферы, не проводя записи элементов в памяти. Поэтому матрица остается матрицей, а вектор вектором. При обмене матрицы и вектора вы получите однострочную матрицу с элементами вектора и вектор с элементами матрицы в плоском представлении (смотрите метод Flat).
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //---
      matrix a= {{1, 2, 3}, {4, 5, 6}};
      Print("a before Swap: \n", a);
      matrix b= {{5, 10, 15, 20}, {25, 30, 35, 40}, {45, 50, 55, 60}};
      Print("b before Swap: \n", b);  
    //--- обменяем указатели на матрицы местами
      a.Swap(b);
      Print("a after Swap: \n", a);
      Print("b after Swap: \n", b);
      /*
      a before Swap:
      [[1,2,3]
      [4,5,6]]
      b before Swap:
      [[5,10,15,20]
      [25,30,35,40]
      [45,50,55,60]]
      
      a after Swap:
      [[5,10,15,20]
      [25,30,35,40]
      [45,50,55,60]]
      b after Swap:
      [[1,2,3]
      [4,5,6]]
      */
      vector v=vector::Full(10, 7);
      Print("v before Swap: \n", v);
      Print("b before Swap: \n", b);
      v.Swap(b);
      Print("v after Swap: \n", v);
      Print("b after Swap: \n", b);
      /*
      v before Swap:
      [7,7,7,7,7,7,7,7,7,7]
      b before Swap:
      [[1,2,3]
      [4,5,6]]
      
      v after Swap:
      [1,2,3,4,5,6]
      b after Swap:
      [[7,7,7,7,7,7,7,7,7,7]]
      */
     }
    Метод Swap также позволяет работать с динамическими массивами (массив фиксированного размера в качестве параметра передавать нельзя). При этом массив может быть любой размерности, но согласованного размера. Это означает, что общий размер матрицы или вектора должен быть кратен нулевой размерности массива. Нулевой размерностью массива называется количество элементов, которые содержатся по первому индексу массива. Например, для динамического трехмерного массива double array[][2][3] нулевой размерностью будет произведение размеров второго и третьего измерения, то есть 2x3=6. Значит, такой массив можно использовать в методе Swap только с матрицами и векторами, общий размер которых кратен 6: 6, 12, 18, 24 и т.д.

    Покажем это на примере:
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- заполним матрицу 1x10 значением 7.0
      matrix m= matrix::Full(1, 10, 7.0);
      Print("matrix before Swap:\n", m);
    //--- попробуем провести обмен между матрицей и массивом
      double array_small[2][5]= {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}};
      Print("array_small before Swap:");
      ArrayPrint(array_small);
      if(m.Swap(array_small))
       {
        Print("array_small after Swap:");
        ArrayPrint(array_small);
        Print("matrix after Swap: \n", m);
       }
      else // размер матрицы не кратен размеру первого измерения массива
       {
        Print("m.Swap(array_small) failed. Error ", GetLastError());
       }
      /*
      matrix before Swap:
      [[7,7,7,7,7,7,7,7,7,7]]
      array_small before Swap:
               [,0]     [,1]     [,2]     [,3]     [,4]
      [0,]  1.00000  2.00000  3.00000  4.00000  5.00000
      [1,]  6.00000  7.00000  8.00000  9.00000 10.00000
      m.Swap(array_small) failed. Error 4006
      */
    //--- возьмем матрицу побольше и снова попробуем провести обмен
      double array_static[3][10]= {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
         {2, 4, 6, 8, 10, 12, 14, 16, 18, 20},
         {3, 6, 9, 12, 15, 18, 21, 24, 27, 30}
       };
      Print("array_static before Swap:");
      ArrayPrint(array_static);
      if(m.Swap(array_static))
       {
        Print("array_static after Swap:");
        ArrayPrint(array_static);
        Print("matrix after Swap: \n", m);
       }
      else // статический массив нельзя использовать для обмена с матрицей
       {
        Print("m.Swap(array_static) failed. Error ", GetLastError());
       }
      /*
      array_static before Swap:
             [,0]     [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]     [,9]
      [0,]  1.00000  2.00000  3.00000  4.00000  5.00000  6.00000  7.00000  8.00000  9.00000 10.00000
      [1,]  2.00000  4.00000  6.00000  8.00000 10.00000 12.00000 14.00000 16.00000 18.00000 20.00000
      [2,]  3.00000  6.00000  9.00000 12.00000 15.00000 18.00000 21.00000 24.00000 27.00000 30.00000
      m.Swap(array_static) failed. Error 4006
      */
    //--- еще одна попытка обменять массив и матрицу
      double array_dynamic[][10];    // динамический массив
      ArrayResize(array_dynamic, 3); // выставим размер первого измерения
      ArrayCopy(array_dynamic, array_static);
    //--- теперь для обмена используем динамический массив
      if(m.Swap(array_dynamic))
       {
        Print("array_dynamic after Swap:");
        ArrayPrint(array_dynamic);
        Print("matrix after Swap: \n", m);
       }
      else //  нет ошибки
       {
        Print("m.Swap(array_dynamic) failed. Error ", GetLastError());
       }
      /*
      array_dynamic after Swap:
            [,0]    [,1]    [,2]    [,3]    [,4]    [,5]    [,6]    [,7]    [,8]    [,9]
      [0,] 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000
      matrix after Swap:
      [[1,2,3,4,5,6,7,8,9,10,2,4,6,8,10,12,14,16,18,20,3,6,9,12,15,18,21,24,27,30]]
      */
     }
  4. Добавлены методы LossGradient для векторов и матриц. Данный метод вычисляет вектор или матрицу частных производных функции потерь по предсказанным значениям. В линейной алгебре такой вектор называется градиентом и применяется в машинном обучении.
    vector vector::LossGradient(const vector &expected,ENUM_LOSS_FUNCTION loss) const;
    matrix matrix::LossGradient(const matrix &expected,ENUM_LOSS_FUNCTION loss) const;
  5. Включено использование FOREIGN KEYS в SQLite, что позволяет строить связи между таблицами в SQL-запросах.   Пример:
    CREATE TABLE artist(
      artistid    INTEGER PRIMARY KEY, 
      artistname  TEXT
    );
    
    CREATE TABLE track(
      trackid     INTEGER, 
      trackname   TEXT, 
      trackartist INTEGER,
      FOREIGN KEY(trackartist) REFERENCES artist(artistid)
    );

  6. Исправлен выбор нужного метода класса в зависимости от константности метода и объекта.

MetaEditor

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

MetaTester

  1.  Повышена чувствительность у переключателя скорости тестирования в визуальном режиме.

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


предыдущая123456789101112131415