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

 

В пятницу 1 августа 2025 года будет выпущена обновленная версия платформы MetaTrader 5.

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

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

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

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


MetaTrader 5 Client Terminal

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


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


  2. Terminal: Исправлено отображение панелей инструментов, открепленных от основного окна.
  3. Terminal: Исправлен расчет ликвидационной стоимости портфеля в разделе «Активы». Позиции по некоторым инструментам могли не учитываться.
  4. Terminal: Исправлено отображение отрицательных цен в стакане цен. Теперь они сортируются корректно.
  5. Terminal: Исправлен импорт ценовой истории в пользовательские торговые инструменты. Для инструментов, находящихся в корневой папке, соответствующие команды могли быть недоступны.
  6. MQL5: Добавлены новые методы 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 — проверяет, является ли квадратная матрица скалярной.

  7. MQL5: Добавлен метод Conjugate для комплексных матриц и векторов. Он изменяет знак мнимой части комплексного числа и возвращает измененную матрицу или вектор.
  8. MQL5: Усилены правила скрытия методов. При наличии в производном классе метода с тем же именем, что и в базовом, теперь по умолчанию вызывается версия из производного класса. Чтобы обратиться к базовому методу, теперь требуется квалификатор:
    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)'
  9. MQL5: Запрещено дублирование имен в одной области видимости. Например, ранее вы могли объявлять параметр input и функцию с одинаковым именем в одном файле. Теперь такое дублирование недопустимо:
    input int somename=42;
    
    int somename(int x)
      {
       return(42);
      }
  10. MQL5: Добавлена строгая проверка типов значений по умолчанию в перечислениях. Для параметров-функций, принимающих enum, теперь проверяется не только значение, но и точное соответствие типа:
    int somename(ENUM_TIMEFRAMES TF=PERIOD_CURRENT);
    
    int somename(ENUM_TIMEFRAMES TF=0)   // ошибка, несоответствие типа параметра по умолчанию, несмотря на их одинаковые значения
      {
       return(42);
      }
  11. MQL5: Запрещены одинаковые идентификаторы в разных перечислениях. Идентификатор внутри одного перечисления теперь не может повторяться в другом в одной области видимости:
    enum A
      {
       Value
      };
      
    enum B
      {
       Value  // ошибка, имя Value уже используется в перечислении A
      };
      
    void OnStart(void)
      {
       enum C
         {
          Value // ошибки нет, в области видимости OnStart имя Value не используется
         };
      }
    В разных областях видимости можно использовать одинаковые имена.

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

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

    Теперь необходимо явно указывать параметры шаблона и все аргументы:
    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);  // ошибки нет
  13. MQL5: Улучшена поддержка ONNX. Добавлена неявная конверсия знакового типа при передаче массивов ulong в функциях, что облегчает интеграцию MQL5 с моделями ONNX.
    OnnxSetInputShape( … , ulong_array );
    OnnxSetOutputShape( … , ulong_array );
  14. MQL5: Исправлено отображение типов в предупреждениях о неявном преобразовании строк.
  15. MQL5: Обновлен пакет интеграции с Python. Для установки обновления выполните команду:
    pip install --upgrade MetaTrader5
  16. MetaEditor: Исправлена работа команды «Откатиться к ревизии», используемой для MQL5 Storage. Теперь оценка конфликтов между версиями, которые могут возникнуть при откате, производится до операции. Если откат невозможен, операция отменяется.
  17. Tester: Исправлена работа функции OrderCalcMargin для счетов с биржевой моделью расчетов.
  18. Tester: Исправлено переключение между графиками при визуальном тестировании мультивалютных экспертов.
  19. Обновлены переводы пользовательского интерфейса.

MetaTrader 5 Web Terminal

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


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

 
MetaQuotes:
матриц и векторов
А про сортировку матриц и векторов ничего) Всё же надеюсь что сделали.
 

MetaQuotes:
MQL5: Запрещены одинаковые идентификаторы в разных перечислениях. Идентификатор внутри одного перечисления теперь не может повторяться в другом в одной области видимости:

enum A
  {
   Value
  };
  
enum B
  {
   Value  // ошибка, имя Value уже используется в перечислении A
  };
  
void OnStart(void)
  {
   enum C
     {
      Value // ошибки нет, в области видимости OnStart имя Value не используется
     };
  }

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

То есть, внутри OnStart C::Value скрывает A::Value? Или как это работает? Объясните кто-нибудь, пожалуйста.

[edit] Почему "в области видимости OnStart имя Value не используется"? Из OnStart видно A::Value (который в global scope). Супер непонятная логика для меня.
 
Vladislav Boyko # :

То есть, внутри OnStart C::Value скрывает A::Value? Или как это работает? Объясните кто-нибудь, пожалуйста.

Да, как и всегда (по крайней мере последние 10 лет), ничего не изменилось.

 
Alain Verleyen #:

Да, как и всегда (по крайней мере последние 10 лет), ничего не изменилось.

Понял, спасибо!

 
 Горячие клавиши появятся когда то ? Типа CTRL+H горизонтальная линия    CTRL+V вертикальная линия . Еще вопрос . Будет ли возможность установить терминал не на системный диск ?  
 
anotherfxtrader #:
 Горячие клавиши появятся когда то ? Типа CTRL+H горизонтальная линия    CTRL+V вертикальная линия . Еще вопрос . Будет ли возможность установить терминал не на системный диск ?  

ctrl+F сразу и горизонтальная и вертикальная линия )))

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

 
Aleksandr Slavskii #:

ctrl+F сразу и горизонтальная и вертикальная линия )))

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

Спасибо большое !! Хм странно ,раньше он (терминал) вообще не спрашивал директорию. 

 
anotherfxtrader #:

Спасибо большое !! Хм странно ,раньше он (терминал) вообще не спрашивал директорию. 

В инсталлере всегда была и есть кнопка настроек.

 
Renat Fatkhullin #:

В инсталлере всегда была и есть кнопка настроек.

Спасибо Ренат за ответ . Скажите, не ли планах добавления возможности отключения логов ?   
 
anotherfxtrader #:
Спасибо Ренат за ответ . Скажите, не ли планах добавления возможности отключения логов ?   

Зачем?

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