Новая версия платформы MetaTrader 5 build 5260: улучшения в Algo Forge и новые правила наследования в MQL5

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

5 сентября 2025

Terminal

  1.  Исправлено отображение настроек маржи в спецификации торгового инструмента. Ранее при использовании плавающего плеча (например, в зависимости от объема позиций на счете) в некоторых случаях настройки маржи в спецификации контракта показывались неверно.
  2.  Исправлена сортировка заявок в стакане, если по символу разрешена торговля с отрицательными ценами. Теперь корректно и в правильном порядке отображаются заявки с положительными, отрицательными и нулевыми ценами. 
  3. В руководство по терминалу добавлен раздел "Как тестер загружает исторические данные". В нем мы собрали основные сведения, необходимые для понимания работы тестера стратегий с торговой историей. Тестер всегда загружает "буфер истории до старта", чтобы обеспечить стабильность расчётов:
  4. Если данных меньше, тестер сдвигает фактическую дату старта на ближайшую доступную, где условия выполняются.

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

    start time changed to 2024.03.15 00:00 to provide data at beginning
  5. Добавлен перевод терминала на ирландский язык.
  6. Обновлены переводы пользовательского интерфейса.

MQL5

  1. Добавлены 5 новых методов в OpenBLAS — это новый раздел Matrix Balance, расширяющий возможности работы с квадратными матрицами. Новый набор функций обеспечивает:
    • Балансировку матриц для повышения точности вычислений собственных значений.
    • Восстановление собственных векторов после преобразований.
    • Редукцию к форме Хессенберга и Шур-разложение, включая генерацию ортогональных матриц.

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

    Под капотом используются проверенные алгоритмы LAPACK (GEBAL, GEBAK, GEHRD, ORGHR, HSEQR), гарантирующие высокую производительность и надежность:

    • MatrixBalance — балансирует квадратную матрицу (вещественную или комплексную) путем перестановок и/или масштабирования строк и столбцов. Снижает 1-норму, повышая точность последующего расчета собственных значений/векторов (на базе LAPACK-функции GEBAL).
    • EigenVectorsBackward — формирует собственные векторы (правые или левые) исходной матрицы после балансировки, выполняет обратную трансформацию (на основе GEBAK). 
    • ReduceToHessenbergBalanced — преобразует сбалансированную матрицу в верхнетреугольную форму Хессенберга посредством ортогонального преобразования (GEHRD).
    • ReflectHessenbergBalancedToQ — генерирует ортогональную матрицу Q, являющуюся продуктом отражающих матриц, образующихся при редукции к форме Хессенберга (ORGHR).
    • EigenHessenbergBalancedSchurQ — выполняет Шур-разложение: вычисляет собственные значения матрицы Хессенберга, а также матрицы T (верхнетреугольная Шур-форма) и Z (матрица векторов), при необходимости обновляет Q (HSEQR).


  2. Добавлены два новых метода в раздел Eigen Values. Обе функции позволяют эффективно получать собственные векторы после Шур-разложения и дополняют полный набор инструментов линейной алгебры в MQL5:

    • EigenVectorsTriangularZ — вычисляет собственные векторы действительной верхней квазитреугольной или комплексной верхнетреугольной матрицы (Шур-форма). Использует разложение A = Q · T · Qᴴ (TREVC). Отличается высокой точностью.
    • EigenVectorsTriangularZBlocked — блочный вариант вычисления собственных векторов (TREVC3). Работает быстрее, чем EigenVectorsTriangularZ, но может быть менее точным.
  3. Внесено важное изменение при наследовании — правило method hiding.

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

    Если необходимо вызвать скрытый метод предка, следует явно указать область видимости при вызове:
    class Base
      {
    public: 
       void Print(int x)   { ::Print("Base int: ", x); }
       void Print(double y){ ::Print("Base double: ", y); }
      };
    
    class Derived : public Base
      {
    public:
       void Print(string s){ ::Print("Derived string: ", s); }
      };
    
    void OnStart()
      {
       Derived d;
       d.Print("text");    // вызов Derived::Print(string)
       d.Print(10);        // ВНИМАНИЕ! вызов Derived::Print(string), т.к. Base::Print скрыт (недоступен)
       d.Base::Print(10);  // явный вызов скрытого метода предка
      }
    Некоторое время компилятор MQL5 будет выдавать предупреждение, если скрытый метод предка лучше подходит по параметрам вызова, чем доступный метод потомка. Пример для приведенного выше кода d.Print(10):
    call resolves to 'void Derived::Print(string)' instead of 'void Base::Print(int)' due to new rules of method hiding
       see declaration of function 'Derived::Print'
       see declaration of function 'Base::Print'
    implicit conversion from 'number' to 'string'

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

    Чтобы управлять новым поведением, в MQL5 появился оператор using. Он позволяет «подтянуть» в область видимости класса или структуры все перегрузки метода из базового типа:
    class Base
      {
    protected:
       void Print(int x)   { ::Print("Base int: ", x); }
       void Print(double y){ ::Print("Base double: ", y); }
      };
    
    class Derived : public Base
      {
    public:
       void Print(string s){ ::Print("Derived string: ", s); }
       using Base::Print;  // возвращаем перегрузки Print из Base
      };
    
    void OnStart()
      {
       Derived d;
       d.Print("text");   // Derived::Print(string)
       d.Print(42);       // Base::Print(int)
       d.Print(3.14);     // Base::Print(double)
      }
    Если убрать using Base::Print;, то вызовы d.Print(42) и d.Print(3.14) будут недоступны — останется только метод Derived::Print(string)

    Дополнительно в приведенном примере можно увидеть, что методы protected предка, стали доступны в потомке (protected сменился на public)

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

MetaEditor

  1. Ускорены вычисления SHA-1 хэшей для Git-операций при работе с Algo Forge. Это дает прирост производительности более 40% при массовых операциях.
  2. Исправлена логика проверки модификаций файлов для Git-операций. Если изменилось только время модификации, но содержимое осталось прежним, файл больше не считается измененным. Это устраняет ложные детекты и предотвращает конфликты с удаленным репозиторием.

Algo Forge

Опубликована Справка по работе с MQL5 Algo Forge. Из нее вы узнаете все ключевые преимущества Git, без лишней сложности:

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

  • Клонирование чужого проекта
    На forge.mql5.io зайди в проект, который ты хочешь клонировать, и выполни команду Fork. Заполни имя создаваемого форка и описание и сохрани изменения:

    Клонирование проекта

    Затем перейди в MetaEditor с тем же MQL-аккаунтом и выполни команду обновить (Refresh) в Навигаторе.  В папке Shared projects появится твой клонированный проект. Теперь загрузи его с портала Algo Forge командой Git Clone. Ты скачаешь не только все файлы проекта, но и всю историю коммитов и все ветки этого проекта. То есть ты сможешь продолжить работу над форком, имея всю историю клонированного проекта.  

    Команда Git Clone для получения проекта из Algo Forge


Web Terminal

  1. Исправлено отображение времени рабочей и котировочной сессии в спецификации символа.
  2. Исправлено отображение настроек маржи в спецификации символа.
  3. Изменено отображение сессий торговых инструментов в спецификации символа.
  4. Добавлена поддержка торгового счета типа Contest — эти счета отображаются синим цветом, Demo — зеленым.
  5. Исправлена точность расчетов маржи с плавающим плечом в некоторых случаях. 
  6. Исправлена ошибка открытия нового счета — в некоторых случаях не работала кнопка "Next" для перехода к следующему шагу.
  7. Исправлена ошибка, когда нельзя было выставить лимитный ордер между ценами Bid и Ask в режиме биржевого исполнения.
  8. Исправлена ошибка показа цены исполнения ордера. После отсылки приказа в окне будет показан результат его исполнения — успешное совершение торговой операции или отказ с описанием причины, почему она не была исполнена. В некоторых случаях цена исполнения показывалась как "0".
  9. Исправлена ошибка, когда не отображалась кнопка быстрого закрытия позиции.

    Кнопка закрытия позиции

  10. Исправлен показ валют торгового счета в окне выбора из списка счетов.