New MetaTrader 5 Platform Build 5100: Transition to Git and MQL5 Algo Forge developer hub, dark theme and interface improvements

In this version, we have significantly revamped the MetaEditor source code editor. The built-in version control system, MQL5 Storage, has been migrated from Subversion to Git – the global standard for developers. With the transition to Git, we are introducing MQL5 Algo Forge, a new online portal for project management. Also, all platform components now support a dark mode interface

5 June 2025

MetaQuotes Language Editor

  • We have completely revised MQL5 Storage, replacing Subversion with Git as the version control system. Git is the global standard for developers, offering enhanced reliability and flexibility in code management.

    • Flexible branching and merging – create separate branches for new features or experiments and easily merge them into the main project version.
    • Faster repository operations – unlike Subversion, Git stores all data locally, making commits, version switching, and change comparisons significantly faster.
    • Offline work capability – no need for a constant server connection: commit changes locally and push them to an online repository whenever convenient.
    • Advanced change tracking – easily review version history, track modifications with timestamps and authors, and revert to previous versions without complications.
    • Superior merge functionality – advanced comparison and merge tools help minimize conflicts and streamline collaborative development.

    A new level of collaborative development
    With the transition to Git, we are introducing MQL5 Algo Forge, a new online portal for project management. More than just a project list, it is a full-fledged social network for developers – essentially, GitHub for algorithmic traders. Follow interesting developers, create teams, and collaborate on projects effortlessly.




    View project details: structure, files, commits, branches, and more. Track individual contributions, create documentation, and share projects online.




    Monitor all code changes: detect new, modified, and deleted lines. If issues arise, assign tasks to developers directly within the project.




    To enhance Git usability, we have redesigned the Navigator and the active code editing window. We have also introduced a dedicated Git menu on the MetaEditor toolbar:




    Comprehensive Git documentation will be available soon.

Terminal

  1. Added support for a dark color scheme for all components, including the trading terminal, MetaEditor, and the visual tester. The dark theme offers a more comfortable development experience at night. Use the View menu to switch:




    While adapting the interface to support different themes, we have introduced numerous improvements to the display of dialogs, menus, panels, and buttons for a more comfortable user experience. In MetaEditor, cursor position information and the text input mode indicator (INS/OVR) are now displayed in the upper-right corner. The bottom status bar has been removed to save the workspace.

  2. Added 12-month VPS rental option. By purchasing long-term hosting upfront, you save one-third of the total cost.




  3. Optimized memory usage. The terminal now consumes fewer system resources, resulting in improved performance.
  4. Optimized display of account trading history. The platform can now display millions of records correctly.
  5. Added "Reset to default" command to the Window menu. It resets all interface elements, including charts, Navigator, Strategy Tester, and others, to their original positions.
  6. Fixed error causing position modification dialog to freeze under certain conditions.
  7. Fixed value calculation for open positions with negative prices.
  8. Fixed margin rate calculations in trading symbol specifications with negative prices.
  9. Fixed calculation of current MFE and MAE values and display of their graphs in trading reports.
  10. Fixed scaling of oscillators in chart subwindows. The vertical scale for oscillators is now displayed correctly.
  11. Fixed visibility of order books and option boards when switching the full-screen mode.
  12. Added position ticket display in account trading history. Use the context menu to enable the relevant column.
  13. Fixed liquidation value calculation on the Exposure tab for futures and options.
  14. Fixed issue with copying newly created account data to the clipboard. During the final step of demo or preliminary account registration, the user is provided with account details: login, passwords, etc. These can be copied to the clipboard to save in a separate file. The corresponding command now functions correctly on macOS.
  15. Fixed display of the VPS log section. The page could display an error under certain conditions.
  16. Fixed HiDPI monitor support on Linux.
  17. Updated translations of the user interface.

MQL5

  1. Added matrix multiplication operator @. It follows linear algebra rules and allows the multiplication of matrices and vectors, as well as scalar (dot) products of vectors.

    Matrix multiplication (matrix × matrix)
    matrix A(2, 3);
    matrix B(3, 2);
    matrix C = A @ B; // Result: Matrix C of size [2,2]
    Matrix multiplication (matrix × vector)
    matrix M(2, 3);
    vector V(3);
    vector R = M @ V; // Result: Vector R of 2 elements
    Matrix multiplication (vector x matrix)
    matrix M(2, 3);
    vector V(1, 2);
    vector R = V @ M; // Result: Vector R of 3 elements
    Scalar multiplication (vector × vector)
    vector V1(1, 3), V2(1, 3);
    double r = V1 @ V2; // Result: Scalar
  2. Added 'ddof' parameter in methods Std, Var, and Cov. This parameter defines the number of degrees of freedom subtracted from the denominator when calculating the standard deviation. For Std and Var, the default parameter is 0, for Cov it is 1.

    How ddof affects calculation:

    • By default, ddof=0, meaning the population standard deviation is calculated.
    • If ddof=1, the function computes the sample standard deviation, which adjusts for finite sample sizes, commonly used in statistics when analyzing a subset of data.

  3. Added new OpenBLAS methods:

    Eigenvalues and Eigenvectors

    • EigenTridiagonalDC – computes eigenvalues and eigenvectors of a symmetric tridiagonal matrix using the divide-and-conquer algorithm (LAPACK function STEVD).
    • EigenTridiagonalQR – computes eigenvalues and eigenvectors of a symmetric tridiagonal matrix using the QR algorithm (LAPACK function STEV).
    • EigenTridiagonalRobust – computes eigenvalues and eigenvectors of a symmetric tridiagonal matrix using the MRRR (Multiple Relatively Robust Representations) algorithm (LAPACK function STEVR).
    • EigenTridiagonalBisect – computes eigenvalues and eigenvectors of a symmetric tridiagonal matrix using the bisection algorithm (LAPACK function STEVX).
    • ReduceToBidiagonal – reduces a general real or complex m-by-n matrix A to upper or lower bidiagonal form B by an orthogonal transformation: Q**T * A * P = B. If m≥n, B is an upper bidiagonal matrix; otherwise, B is lower bidiagonal. (LAPACK function GEBRD).
    • ReflectBidiagonalToQP – generates orthogonal matrices Q and P**T (or P**H for complex types) determined by ReduceToBidiagonal method when reducing a real or complex matrix A to bidiagonal form: A = Q * B * P**T. Q and P**T are defined as products of elementary reflectors H(i) or G(i) respectively. (LAPACK functions ORGBR, UNGBR).
    • ReduceSymmetricToTridiagonal – reduces a real symmetric or complex Hermitian matrix A to tridiagonal form B by an orthogonal similarity transformation: Q**T * A * Q = B. (LAPACK functions SYTRD, HETRD).
    • ReflectTridiagonalToQ – generates orthogonal matrix Q  which is defined as the product of n-1 elementary reflectors of order n, as returned by ReduceSymmetricToTridiagonal.

    • LinearEquationsSolution – computes the solution to the system of linear equations with a square coefficient matrix A and multiple right-hand sides.
    • LinearEquationsSolutionTriangular – computes the solution to the system of linear equations with a square triangular coefficient matrix A and multiple right-hand sides.
    • LinearEquationsSolutionSy – computes the solution to the system of linear equations with a symmetric or Hermitian conjugated matrix A and multiple right-hand sides.
    • LinearEquationsSolutionComplexSy – computes the solution to the system of linear equations with a complex symmetric matrix A and multiple right-hand sides.
    • LinearEquationsSolutionGeTrid – computes the solution to the system of linear equations with a symmetric or Hermitian conjugated positive-definite matrix A and multiple right-hand sides.
    • LinearEquationsSolutionSyPD – computes the solution to the system of linear equations with a general (nonsymmetric) tridiagonal coefficient matrix A and multiple right-hand sides.
    • LinearEquationsSolutionSyTridPD – computes the solution to the system of linear equations with a symmetric tridiagonal positive-definite coefficient matrix A and multiple right-hand sides.
    • FactorizationQR – computes the QR factorization of a general m-by-n matrix: A = Q * R (LAPACK function GEQRF).
    • FactorizationQRNonNeg – computes the QR factorization of a general m-by-n matrix: A = Q * R, where R is an upper triangular matrix with nonnegative diagonal entries (LAPACK function GEQRFP).
    • FactorizationQRPivot – computes the QR factorization of a general m-by-n matrix with column pivoting: A * P = Q * R (LAPACK function GEQP3).
    • FactorizationLQ – computes the LQ factorization of a general m-by-n matrix: A = L * Q (LAPACK function GELQF).
    • FactorizationQL – computes the QL factorization of a general m-by-n matrix: A = Q * L (LAPACK function GEQLF).
    • FactorizationRQ – computes the RQ factorization of a general m-by-n matrix: A = R * Q (LAPACK function GERQF).
    • FactorizationPLU – computes an LU factorization of a general M-by-N matrix A using partial pivoting with row interchanges (LAPACK function GETRF).
    • FactorizationPLUGeTrid – computes an LU factorization of a general (non-symmetric) tridiagonal N-by-N matrix A using elimination with partial pivoting and row interchanges (LAPACK function GTTRF).
    • FactorizationLDL – computes the factorization of a real symmetric or complex Hermitian matrix A using the Bunch-Kaufman diagonal pivoting method (LAPACK functions SYTRF and HETRF).
    • FactorizationLDLSyTridPD – computes the factorization of a symmetric positive-definite or, for complex data, Hermitian positive-definite tridiagonal matrix A (LAPACK function PTTRF).
    • FactorizationCholesky – computes the factorization of a real symmetric or complex Hermitian positive-definite matrix A (LAPACK function POTRF).
    • FactorizationCholeskySyPS – computes the Cholesky factorization with complete pivoting of a real symmetric (complex Hermitian) positive semidefinite n-by-n matrix (LAPACK function PSTRF).

  4. Added Random function and method for filling vectors and matrices with random values. Random values are generated uniformly within the specified range.
    static vector vector::Random(
      const ulong   size,       // vector length
      const double  min=0.0,    // min value
      const double  max=1.0     // max value
       );
    
    static matrix matrix::Random(
      const ulong   rows,       // number of rows
      const ulong   cols        // number of columns
      const float   min=0.0,    // min value
      const float   max=1.0     // max value
       );
  5. Added support for additional aliases for integer types. This will simplify code porting from other languages such as C and C++.

    These aliases do not introduce new types but provide alternative names for existing types in MQL5. They can be used in all contexts where the base types are applicable.

    • int8_t
    • uint8_t
    • int16_t
    • uint16_t
    • int32_t
    • uint32_t
    • int64_t
    • uint64_t

  6. Added new functions for detecting the terminal color scheme:


    To detect a color scheme change, use the OnChartEvent handler. When the theme changes, the CHARTEVENT_CHART_CHANGE event is triggered twice.

  7. Fixed a bug that caused MetaEditor to crash when compiling code containing the Array::Reserve method. The 'Reserve' method does not change the array size, but reserves space for the specified number of elements to prevent memory reallocation when adding new elements.
  8. Fixed the behavior of the Array::Push method, which adds new elements to the end of an array. The issue occurred in arrays with preallocated buffer space.
  9. Resolved issues in functions for working with OpenCL.

MetaTester

  1. Accelerated the optimization of trading strategies.
  2. Fixed a bug that, in certain cases, led to excessive memory usage by tester agents when executing tasks from the MQL5 Cloud Network.

Web Terminal

  1. Fixed the password-saving option in the account connection dialog.
  2. Fixed chart movement buttons. In some cases, using these buttons caused the chart to disappear.
  3. Corrected validation for the "Middle Name" field in the real account registration form. It is now optional.
  4. Fixed opening of demo accounts. In certain cases, users were incorrectly redirected to the broker's website.
  5. Fixed the visibility of buttons for opening demo and real accounts. These buttons are now hidden if the respective function is disabled by the broker.
  6. Fixed the "Deposit" field behavior in the demo account opening form.
  7. Fixed the display of the "Trading" field in the contract specification.
  8. Fixed the symbol search field in the "Market Watch" window. The "X" button now correctly appears for exiting search mode.
  9. Fixed the display of a tooltip for the email confirmation code field in the account opening form.


The update will be available through the Live Update system.