Матрицы и векторы в MQL5 - страница 3

 

Факторизация матриц: Более практичное моделирование

Факторизация матриц: Более практичное моделированиеМатричная факторизация: Более практичное моделирование

В предыдущей статье "Факторизация матриц: Основы" я немного рассказал о том, как вы, мои дорогие читатели, можете использовать матрицы в своих общих расчетах. Однако тогда я хотел, чтобы вы понимали, как производятся вычисления, поэтому не уделял особого внимания созданию правильной модели матриц.
Matrix Factorization: A more practical modeling
Matrix Factorization: A more practical modeling
  • www.mql5.com
You might not have noticed that the matrix modeling was a little strange, since only columns were specified, not rows and columns. This looks very strange when reading the code that performs matrix factorizations. If you were expecting to see the rows and columns listed, you might get confused when trying to factorize. Moreover, this matrix modeling method is not the best. This is because when we model matrices in this way, we encounter some limitations that force us to use other methods or functions that would not be necessary if the modeling were done in a more appropriate way.
 

Форум о трейдинге, автоматизированных торговых системах и тестировании торговых стратегий

Машинное обучение в трейдинге: теория, модели, практика и альго-трейдинг

Ренат Фатхуллин, 2025.06.09 14:15

К вашему сведению, новинка по машинному обучению на MQL5:

  • MQL5: Добавлен оператор умножения матриц @. Он работает по правилам линейной алгебры и позволяет перемножать матрицы и векторы, а также выполнять скалярное произведение векторов.

    Умножение матриц (матрица × матрица)
    matrix A( 2 , 3 );
    matrix B( 3 , 2 );
    matrix C = A @ B; // Результат: матрица C размером [2,2]
    Умножение матриц (матрица × вектор)
    matrix M( 2 , 3 );
    vector V( 3 );
    vector R = M @ V; // Результат: вектор R из 2 элементов
    Умножение матриц (вектор × матрица)
    matrix M( 2 , 3 );
    vector V( 1 , 2 );
    vector R = V @ M; // Результат: вектор R из 3 элементов
    Точечное произведение (вектор × вектор)
     vector V1( 1 , 3 ), V2( 1 , 3 );
    double r = V1 @ V2; // Результат: скаляр
  • MQL5: В методы Std, Var и Cov добавлен параметр ddof. Он определяет количество степеней свободы, которые вычитаются из делителя при вычислении стандартного отклонения. Для Std и Var параметр по умолчанию равен 0, для Cov - 1.

    Как влияет ddof:

    • По умолчанию ddof=0, и стандартное отклонение рассчитывается для всей популяции (популяционное стандартное отклонение).
    • Если ddof=1, то используется выборочное стандартное отклонение, которое корректирует оценку для конечной выборки (используется в статистике при работе с подмножеством данных).

  • MQL5: Добавлены новые методы OpenBLAS:

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

    • EigenTridiagonalDC - вычисляет собственные значения и собственные векторы симметричной трехдиагональной матрицы с помощью алгоритма "разделяй и властвуй" (LAPACK-функция STEVD).
    • EigenTridiagonalQR - вычисляет собственные значения и собственные векторы симметричной трехдиагональной матрицы с помощью алгоритма QR (функция LAPACK STEV).
    • EigenTridiagonalRobust - вычисляет собственные значения и собственные векторы симметричной трехдиагональной матрицы с помощью алгоритма MRRR (Multiple Relatively Robust Representations) (LAPACK-функция STEVR).
    • EigenTridiagonalBisect - вычисляет собственные значения и собственные векторы симметричной трехдиагональной матрицы с помощью алгоритма биссекции (LAPACK-функция STEVX).
    • ReduceToBidiagonal - приводит общую вещественную или комплексную матрицу m×n к верхней или нижней бидиагональной форме B с помощью ортогонального преобразования: Q**T * A * P = B. Если m≥n, то B - верхнебидиагональная, иначе - нижнебидиагональная. (LAPACK-функция GEBRD).
    • ReflectBidiagonalToQP - генерирует ортогональные матрицы Q и P**T (или P**H для комплексных типов), определенные методом ReduceToBidiagonal при приведении вещественной или комплексной матрицы A к бидиагональному виду: A = Q * B * P**T. Q и P**T - произведения элементарных отражателей H(i) или G(i), соответственно. (Функции LAPACK ORGBR, UNGBR).
    • ReduceSymmetricToTridiagonal - сводит вещественную симметричную или комплексную эрмитову матрицу A к трехдиагональной форме B с помощью ортогонального преобразования подобия: Q**T * A * Q = B. (функции LAPACK SYTRD, HETRD).
    • ReflectTridiagonalToQ - генерирует ортогональную матрицу Q, которая является произведением n-1 элементарных отражателей порядка n, возвращаемых функцией ReduceSymmetricToTridiagonal.

    • LinearEquationsSolution - вычисляет систему линейных уравнений с квадратной матрицей коэффициентов A и несколькими правыми сторонами.
    • LinearEquationsSolutionTriangular - вычисляет систему линейных уравнений с квадратно-треугольной матрицей коэффициентов A и несколькими правыми сторонами.
    • LinearEquationsSolutionSy - вычисляет систему линейных уравнений с симметричной или эрмитовой сопряженной матрицей A и несколькими правыми сторонами.
    • LinearEquationsSolutionComplexSy - вычисляет систему линейных уравнений с комплексной симметричной матрицей A и несколькими правыми сторонами.
    • LinearEquationsSolutionGeTrid - вычисляет систему линейных уравнений с симметричной или эрмитовой сопряженной положительно определенной матрицей A и несколькими правыми сторонами.
    • LinearEquationsSolutionSyPD - вычисляет систему линейных уравнений с общей (несимметричной) трехдиагональной матрицей коэффициентов A и несколькими правыми сторонами.
    • LinearEquationsSolutionSyTridPD - вычисляет систему линейных уравнений с симметричной трехдиагональной положительно определенной матрицей A и несколькими правыми сторонами.
    • FactorizationQR - вычисляет QR-факторизацию общей матрицы m-by-n: A = Q * R (LAPACK-функция GEQRF).
    • FactorizationQRNonNeg - вычисляет QR-факторизацию общей матрицы m-by-n: A = Q * R, где R - верхняя треугольная матрица с неотрицательными записями на диагонали (LAPACK-функция GEQRFP).
    • FactorizationQRPivot - вычисляет QR-факторизацию общей матрицы m-by-n с перестановкой столбцов: A * P = Q * R (LAPACK-функция GEQP3).
    • FactorizationLQ - выполняет LQ-факторизацию общей матрицы m-by-n: A = L * Q (LAPACK-функция GELQF).
    • FactorizationQL - выполняет QL-факторизацию общей матрицы m-by-n: A = Q * L (LAPACK-функция GEQLF).
    • FactorizationRQ - выполняет RQ-факторизацию общей матрицы m-by-n: A = R * Q (LAPACK-функция GERQF).
    • FactorizationPLU - вычисляет LU-факторизацию общей матрицы A размером m-by-n, используя частичный выбор поворотных точек и перестановку строк (LAPACK-функция GETRF).
    • FactorizationPLUGeTrid - вычисляет LU-факторизацию общей (несимметричной) n-by-n трехдиагональной матрицы A с использованием частичного выбора точек поворота и перестановки строк (LAPACK-функция GTTRF).
    • FactorizationLDL - вычисляет факторизацию вещественной симметричной или комплексной эрмитовой матрицы A с помощью выбора диагональных точек вращения по методу Банча-Кауфмана (LAPACK-функции SYTRF и HETRF).
    • FactorizationLDLSyTridPD - вычисляет факторизацию симметричной положительно определенной (для вещественных данных) или эрмитовой положительно определенной (для комплексных данных) трехдиагональной матрицы A (LAPACK PTTRF).
    • FactorizationCholesky - вычисляет факторизацию для вещественной симметричной или комплексной эрмитовой положительно-определенной матрицы A (функция LAPACK POTRF).
    • FactorizationCholeskySyPS - вычисляет полную поворотную факторизацию Холески вещественной симметричной (или комплексной эрмитовой) положительной полудефинитной n-by-n матрицы A (функция LAPACK PSTRF).

  • MQL5: Добавлена функция Random и метод заполнения векторов и матриц случайными значениями. Случайные значения генерируются равномерно в заданном диапазоне.
     static vector vector ::Random(
       const ulong    size,       // длина вектора
       const double   min= 0.0 ,     // минимальное значение
       const double   max= 1.0      // максимальное значение
       );
    
    static matrix matrix ::Random(
       const ulong    rows,       // количество строк
       const ulong    cols         // количество столбцов
       const float    min= 0.0 ,     // минимальное значение
       const float    max= 1.0      // максимальное значение
       );

  •  

    Новые математические функции (интересно проверить): Справочник MQL5 - Матрицы и векторы - МетодыOpenBLAS - https://www.mql5.com/ru/docs/matrix/openblas

    Подробнее: Новая платформа MetaTrader 5 Build 5200: расширенная поддержка OpenBLAS и улучшенное управление на MQL5

    Documentation on MQL5: Matrix and Vector Methods / OpenBLAS
    Documentation on MQL5: Matrix and Vector Methods / OpenBLAS
    • www.mql5.com
    OpenBLAS is a high-performance open-source linear algebra library that implements BLAS (Basic Linear Algebra Subprograms) and some LAPACK functions...
     

    Форум о трейдинге, автоматизированных торговых системах и тестировании торговых стратегий

    Самообучающийся эксперт

    Сергей Голубев, 2025.08.27 05:48

    Самооптимизирующиеся эксперты на MQL5 (часть 13): Легкое введение в теорию управления с использованием матричной факторизации

    Самооптимизирующиеся эксперты на MQL5 (часть 13): Легкое введение в теорию управления с использованием матричной факторизации

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

     

    Форум о трейдинге, автоматизированных торговых системах и тестировании торговых стратегий

    Самообучающийся эксперт

    Сергей Голубев, 2025.09.12 05:18

    Самооптимизирующиеся эксперты на MQL5 (часть 14): Рассматриваем преобразования данных как параметры настройки нашего регулятора обратной связи

    Самооптимизирующиеся эксперты на MQL5 (часть 14): Рассмотрение преобразований данных как параметров настройки нашего контроллера обратной связи

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

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


     

    Форум о трейдинге, автоматизированных торговых системах и тестировании торговых стратегий

    Самообучающийся эксперт

    Сергей Голубев, 2025.10.16 08:47

    Самооптимизирующиеся эксперты на MQL5 (часть 15): Идентификация линейной системы

    Самооптимизирующиеся эксперты на MQL5 (часть 15): Идентификация линейных систем

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

     

    Форум о трейдинге, автоматизированных торговых системах и тестировании торговых стратегий

    Самообучающийся эксперт

    Сергей Голубев, 2025.11.01 10:47

    Самооптимизирующиеся эксперты на MQL5 (часть 16): Идентификация линейной системы с супервизией

    Самооптимизирующиеся эксперты на MQL5 (часть 16): Идентификация линейных систем под наблюдением

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