Terminal
- Исправлено отображение настроек маржи в спецификации торгового инструмента. Ранее при использовании плавающего плеча (например, в зависимости от объема позиций на счете) в некоторых случаях настройки маржи в спецификации контракта показывались неверно.
- Исправлена сортировка заявок в стакане, если по символу разрешена торговля с отрицательными ценами. Теперь корректно и в правильном порядке отображаются заявки с положительными, отрицательными и нулевыми ценами.
- В руководство по терминалу добавлен раздел "Как тестер загружает исторические данные". В нем мы собрали основные сведения, необходимые для понимания работы тестера стратегий с торговой историей. Тестер всегда загружает "буфер истории до старта", чтобы обеспечить стабильность расчётов:
- Добавлен перевод терминала на ирландский язык.
- Обновлены переводы пользовательского интерфейса.
Если данных меньше, тестер сдвигает фактическую дату старта на ближайшую доступную, где условия выполняются.
Из-за этих требований иногда возникает ситуация: тестирование начинается не с указанной даты, а с более поздней. В журнале тестера это сопровождается сообщением:
start time changed to 2024.03.15 00:00 to provide data at beginning
MQL5
- Добавлены 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).
- Добавлены два новых метода в раздел Eigen Values. Обе функции позволяют эффективно получать собственные векторы после Шур-разложения и дополняют полный набор инструментов линейной алгебры в MQL5:
- EigenVectorsTriangularZ — вычисляет собственные векторы действительной верхней квазитреугольной или комплексной верхнетреугольной матрицы (Шур-форма). Использует разложение A = Q · T · Qᴴ (TREVC). Отличается высокой точностью.
- EigenVectorsTriangularZBlocked — блочный вариант вычисления собственных векторов (TREVC3). Работает быстрее, чем EigenVectorsTriangularZ, но может быть менее точным.
- Внесено важное изменение при наследовании — правило 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'
- Добавлен оператор 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
- Ускорены вычисления SHA-1 хэшей для Git-операций при работе с Algo Forge. Это дает прирост производительности более 40% при массовых операциях.
- Исправлена логика проверки модификаций файлов для Git-операций. Если изменилось только время модификации, но содержимое осталось прежним, файл больше не считается измененным. Это устраняет ложные детекты и предотвращает конфликты с удаленным репозиторием.
Algo Forge
Опубликована Справка по работе с MQL5 Algo Forge. Из нее вы узнаете все ключевые преимущества Git, без лишней сложности:
- надёжное хранение истории версий и работа с ветками
- быстрые эксперименты и безопасное слияние изменений,
- собственный репозиторий или форк чужого проекта в один клик,
- прозрачная работа в команде с фиксацией вклада каждого,
- каталог открытых проектов и возможность учиться у других.
Клонирование чужого проекта
На forge.mql5.io зайди в проект, который ты хочешь клонировать, и выполни команду Fork. Заполни имя создаваемого форка и описание и сохрани изменения:
Затем перейди в MetaEditor с тем же MQL-аккаунтом и выполни команду обновить (Refresh) в Навигаторе. В папке Shared projects появится твой клонированный проект. Теперь загрузи его с портала Algo Forge командой Git Clone. Ты скачаешь не только все файлы проекта, но и всю историю коммитов и все ветки этого проекта. То есть ты сможешь продолжить работу над форком, имея всю историю клонированного проекта.
Web Terminal
- Исправлено отображение времени рабочей и котировочной сессии в спецификации символа.
- Исправлено отображение настроек маржи в спецификации символа.
- Изменено отображение сессий торговых инструментов в спецификации символа.
- Добавлена поддержка торгового счета типа Contest — эти счета отображаются синим цветом, Demo — зеленым.
- Исправлена точность расчетов маржи с плавающим плечом в некоторых случаях.
- Исправлена ошибка открытия нового счета — в некоторых случаях не работала кнопка "Next" для перехода к следующему шагу.
- Исправлена ошибка, когда нельзя было выставить лимитный ордер между ценами Bid и Ask в режиме биржевого исполнения.
- Исправлена ошибка показа цены исполнения ордера. После отсылки приказа в окне будет показан результат его исполнения — успешное совершение торговой операции или отказ с описанием причины, почему она не была исполнена. В некоторых случаях цена исполнения показывалась как "0".
- Исправлена ошибка, когда не отображалась кнопка быстрого закрытия позиции.
- Исправлен показ валют торгового счета в окне выбора из списка счетов.
- Новая версия платформы MetaTrader 5 build 5200: расширение OpenBLAS и усиление контроля в MQL5
- Новый MetaTrader 5 для iPhone/iPad: торговый отчет и дополнительные индикаторы
- Новая версия платформы MetaTrader 5 build 5120: улучшения и исправления
- Новая версия платформы MetaTrader 5 build 5100: Переход на Git и хаб разработчиков MQL5 Algo Forge, темная тема и улучшения интерфейса
- MetaTrader 5 для iPhone/iPad: линейка, текстовые объекты для графиков и таймер бара