Новая версия платформы MetaTrader 5 build 5200: расширение OpenBLAS и усиление контроля в MQL5

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

31 июля 2025

Terminal

  1. Добавлена возможность автоматически применять светлую или темную тему интерфейса в зависимости от настроек Windows. Для этого включите новую опцию «Вид \ Цветовые схемы \ Системная». При каждом запуске платформа будет проверять, какой интерфейс вы используете в системе, и адаптироваться соответствующим образом.


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


  2. Исправлено отображение панелей инструментов, открепленных от основного окна.
  3. Исправлен расчет ликвидационной стоимости портфеля в разделе «Активы». Позиции по некоторым инструментам могли не учитываться.
  4. Исправлено отображение отрицательных цен в стакане цен. Теперь они сортируются корректно.
  5. Исправлен импорт ценовой истории в пользовательские торговые инструменты. Для инструментов, находящихся в корневой папке, соответствующие команды могли быть недоступны.
  6. Обновлены переводы пользовательского интерфейса.

MQL5

  1. Добавлены новые методы OpenBLAS:

    Приведение матриц

    • ReduceToHessenberg — преобразует вещественную или комплексную общую матрицу A размером n на n к матрице B верхней формы Хессенберга с помощью ортогонального преобразования подобия: Q**T * A * Q = H. LAPACK-функция GEHRD.
    • ReflectHessenbergToQ — генерирует ортогональную матрицу Q, которая определяется как произведение n-1 элементарных рефлекторов порядка n, возвращаемых функцией ReduceToHessenberg: Q = H(1) H(2) . . . H(n-1). LAPACK-функция ORGHR.

    Вычисление собственных значений и собственных векторов

    • EigenHessenbergSchurQ — вычисляет собственные значения матрицы Хессенберга H и матриц T и Z из разложения Шура: H = Z T Z**T. Здесь T — верхняя квазитреугольная матрица (форма Шура), а Z — ортогональная матрица векторов Шура. LAPACK-функция HSEQR.

    Решение систем линейных уравнений

    • SylvesterEquationTriangular — решает уравнение Сильвестра для вещественных квазитреугольных или комплексных треугольных матриц: op(A)*X + X*op(B) = scale*C или op(A)*X - X*op(B) = scale*C, где op(A) = A или A**T или A**H, а A и B — верхнетреугольные. LAPACK-функция TRSYL.
    • SylvesterEquationTriangularBlocked — решает уравнение Сильвестра для вещественных квазитреугольных или комплексных треугольных матриц: op(A)*X + X*op(B) = scale*C или op(A)*X - X*op(B) = scale*C, где op(A) = A, A**T или A**H, а A и B — верхнетреугольные матрицы. LAPACK-функция TRSYL3. Это блочная (BLAS уровня 3) версия TRSYL. Быстрее до 5 раз, но менее точная.

    Факторизованные расчеты

    • SylvesterEquationSchur — решает уравнение Сильвестра для вещественных квазитреугольных или комплексных треугольных матриц: A*X + X*B = C, где A и B — верхнетреугольные матрицы. A имеет размер m на m, а B — n на n; правая часть C и решение X имеют размер m на n. LAPACK-функция TRSYL.
    • SylvesterEquationSchurBlocked — решает уравнение Сильвестра для вещественных квазитреугольных или комплексных треугольных матриц: A*X + X*B = C, где A и B — верхнетреугольные матрицы. A имеет размер m на m, а B — n на n; правая часть C и решение X имеют размер m на n. LAPACK-функция TRSYL3. Это блочная (BLAS уровня 3) версия TRSYL. Быстрее до 5 раз, но менее точная.

    Расчет норм матриц для разных структур

    • MatrixNorm — возвращает значение 1-нормы, бесконечной нормы, нормы Фробениуса или наибольшего абсолютного значения любого элемента прямоугольной матрицы общего вида. LAPACK-функция LANGE.
    • MatrixNormGeTrid — возвращает значение 1-нормы, бесконечной нормы, нормы Фробениуса или наибольшего абсолютного значения любого элемента общей трехдиагональной матрицы. LAPACK-функция LANGT.
    • MatrixNormHessenberg — возвращает значение 1-нормы, бесконечной нормы, нормы Фробениуса или наибольшего абсолютного значения любого элемента верхней матрицы Хессенберга. LAPACK-функция LANHS.
    • MatrixNormSy — возвращает значение 1-нормы, бесконечной нормы, нормы Фробениуса или наибольшего абсолютного значения любого элемента действительной симметричной или комплексной эрмитовой матрицы. LAPACK-функции LANSY и LANHE.
    • MatrixNormComplexSy — возвращает значение 1-нормы, бесконечной нормы, нормы Фробениуса или наибольшего абсолютного значения любого элемента комплексной симметричной (не эрмитовой) матрицы. LAPACK-функция LANSY.
    • MatrixNormSyTrid — возвращает значение 1-нормы, бесконечной нормы, нормы Фробениуса или наибольшего абсолютного значения любого элемента действительной симметричной или комплексной эрмитовой трехдиагональной матрицы. LAPACK-функции LANST и LANHT.
    • MatrixNormTriangular — возвращает значение 1-нормы, бесконечной нормы, нормы Фробениуса или наибольшего абсолютного значения любого элемента трапециевидной матрицы размером m на n или треугольной матрицы. LAPACK-функция LANTR.

    Анализ структурных свойств матриц

    • IsSymmetric — проверяет, является ли квадратная матрица симметричной.
    • IsHermitian — проверяет, является ли квадратная комплексная матрица эрмитовой.
    • IsUpperTriangular — проверяет, является ли квадратная матрица верхнетреугольной.
    • IsLowerTriangular — проверяет, является ли квадратная матрица нижнетреугольной.
    • IsTrapezoidal — проверяет, является ли прямоугольная (не квадратная) матрица размером m на n верхней или нижней трапециевидной.
    • IsUpperHessenberg — проверяет, является ли квадратная матрица верхней матрицей Хессенберга.
    • IsLowerHessenberg — проверяет, является ли квадратная матрица нижней матрицей Хессенберга.
    • IsTridiagonal — проверяет, является ли квадратная матрица трехдиагональной.
    • IsUpperBidiagonal — проверяет, является ли квадратная матрица верхней бидиагональной.
    • IsLowerBidiagonal — проверяет, является ли квадратная матрица нижней бидиагональной.
    • IsDiagonal — проверяет, является ли квадратная матрица диагональной.
    • IsScalar — проверяет, является ли квадратная матрица скалярной.

  2. Добавлен метод Conjugate для комплексных матриц и векторов. Он изменяет знак мнимой части комплексного числа и возвращает измененную матрицу или вектор.
  3. Усилены правила скрытия методов. При наличии в производном классе метода с тем же именем, что и в базовом, теперь по умолчанию вызывается версия из производного класса. Чтобы обратиться к базовому методу, теперь требуется квалификатор:
    struct A
      {
       int y;
      
       string func(double x)
         {
          return(__FUNCSIG__);
         }
      };
      
    struct B : public A
      {
       string func(int x)   // метод скрывает A::func
         {
          return(__FUNCSIG__);
         }
      };
      
    void OnStart(void)
      {
       B b;
       b.func(M_PI);          // по новым правилам это вызов B::func
       b.A::func(M_PI);       // вызов скрытого метода A::func
      }
    Это упрощает чтение кода и устраняет неоднозначность, ранее сопровождавшуюся лишь предупреждением компилятора.

    Ранее при компиляции было предупреждение:
    deprecated behavior, hidden method calling will be disabled in a future MQL compiler version
    Теперь это изменение вступило в силу.

    Некоторое количество билдов в журнал будет выводиться предупреждение, если по параметрам доступен более подходящий скрытый метод.
    call resolves to 'string B::func(int)' instead of 'string A::func(double)' due to new rules of method hiding
       see declaration of function 'B::func'
       see declaration of function 'A::func'
    truncation of constant value from 'double(3.141592653589793)' to 'int(3)'
  4. Запрещено дублирование имен в одной области видимости. Например, ранее вы могли объявлять параметр input и функцию с одинаковым именем в одном файле. Теперь такое дублирование недопустимо:
    input int somename=42;
    
    int somename(int x)
      {
       return(42);
      }
  5. Добавлена строгая проверка типов значений по умолчанию в перечислениях. Для параметров-функций, принимающих enum, теперь проверяется не только значение, но и точное соответствие типа:
    int somename(ENUM_TIMEFRAMES TF=PERIOD_CURRENT);
    
    int somename(ENUM_TIMEFRAMES TF=0)   // ошибка, несоответствие типа параметра по умолчанию, несмотря на их одинаковые значения
      {
       return(42);
      }
  6. Запрещены одинаковые идентификаторы в разных перечислениях. Идентификатор внутри одного перечисления теперь не может повторяться в другом в одной области видимости:
    enum A
      {
       Value
      };
      
    enum B
      {
       Value  // ошибка, имя Value уже используется в перечислении A
      };
      
    void OnStart(void)
      {
       enum C
         {
          Value // ошибки нет, в области видимости OnStart имя Value не используется
         };
      }
    В разных областях видимости можно использовать одинаковые имена.

  7. Включены жесткие требования к шаблонным функциям-инициализаторам. При создании матриц/векторов через функции-инициализаторы отключены:

    • Автотипизация шаблонных функций
    • Значения параметров по умолчанию

    Теперь необходимо явно указывать параметры шаблона и все аргументы:
    template<typename T>
    void Initializer(matrix<T>& mat,int method=0);
    
    matrix<double> A(10,10,Initializer,42);          // ошибка, функция Initializer должна быть типизирована явно
    matrix<double> A(10,10,Initializer<double>);     // ошибка, отсутствует параметр 'method' для вызова функции Initializer (значения по умолчанию больше не поддерживаются)
    matrix<double> A(10,10,Initializer<double>,42);  // ошибки нет
  8. Улучшена поддержка ONNX. Добавлена неявная конверсия знакового типа при передаче массивов ulong в функциях, что облегчает интеграцию MQL5 с моделями ONNX.
    OnnxSetInputShape( … , ulong_array );
    OnnxSetOutputShape( … , ulong_array );
  9. Исправлено отображение типов в предупреждениях о неявном преобразовании строк.
  10. Обновлен пакет интеграции с Python. Для установки обновления выполните команду:
    pip install --upgrade MetaTrader5

MetaEditor

  1. MetaEditor: Исправлена работа команды «Откатиться к ревизии», используемой для MQL5 Storage. Теперь оценка конфликтов между версиями, которые могут возникнуть при откате, производится до операции. Если откат невозможен, операция отменяется.
  2. Обновлены переводы пользовательского интерфейса.

Tester

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

Web Terminal

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