MetaEditor, Open AI and ChatGPT - page 7

 
//(USER) Do you know the main chapter from reference "Matrix and Vector Methods" ?
//(COPILOT) Yes, I can help with that. The "Matrix and Vector Methods" chapter in the MQL5 language documentation covers various functions and techniques for working with matrices and vectors. This is essential for algorithmic trading, where mathematical computations are often required for analyzing market data, building indicators, and developing trading strategies.
//
// Here's an overview of the main topics typically covered in this chapter:
//
// 1. **Matrix Operations**:
//    - **Matrix Creation**: Functions for creating matrices.
//    - **Matrix Addition and Subtraction**: Functions to add or subtract matrices.
//    - **Matrix Multiplication**: Functions to multiply matrices or a matrix by a scalar.
//    - **Matrix Transposition**: Functions to transpose a matrix.
//    - **Matrix Inversion**: Functions to invert a matrix, if possible.
//    - **Matrix Determinant**: Functions to calculate the determinant of a matrix.
//
// 2. **Vector Operations**:
//    - **Vector Creation**: Functions for creating vectors.
//    - **Vector Addition and Subtraction**: Functions to add or subtract vectors.
//    - **Dot Product**: Functions to calculate the dot product of two vectors.
//    - **Cross Product**: Functions to calculate the cross product of two vectors.
//    - **Vector Norm**: Functions to calculate the norm (magnitude) of a vector.
//    - **Vector Normalization**: Functions to normalize a vector.
//
// 3. **Advanced Mathematical Functions**:
//    - **Eigenvalues and Eigenvectors**: Functions to compute the eigenvalues and eigenvectors of a matrix.
//    - **Singular Value Decomposition (SVD)**: Functions to perform SVD on a matrix.
//    - **Cholesky Decomposition**: Functions to perform Cholesky decomposition on a matrix.
//
// 4. **Utility Functions**:
//    - **Matrix and Vector Comparison**: Functions to compare matrices and vectors.
//    - **Matrix and Vector Copying**: Functions to copy matrices and vectors.
//    - **Matrix and Vector Resizing**: Functions to resize matrices and vectors.
//
// 5. **Error Handling**:
//    - **Error Checking**: Functions to check for errors in matrix and vector operations, such as dimension mismatches.
//
// These functions and methods are crucial for implementing complex mathematical models and performing various numerical analyses required in trading algorithms. If you need more detailed information or specific examples, you can refer to the MQL5 documentation or ask for particular details here.
//
//(USER)so there are matrix and vector types which are not bound to standard library classes?
//(COPILOT) No, MQL5 does not have built-in matrix and vector types like some other programming languages. Instead, you typically need to use arrays to represent matrices and vectors. MQL5 provides a robust set of functions and features for handling arrays, which you can leverage to create and manipulate matrices and vectors.
//
// Here is an example of how you might represent and work with matrices and vectors in MQL5 using arrays:
//
// ### Vector Example
//

// Define a vector as a one-dimensional array
double vector[] = {1.0, 2.0, 3.0};

// Function to print a vector
void PrintVector(double &vector[]) {
    for (int i = 0; i < ArraySize(vector); i++) {
        Print(vector[i]);
    }
}

// Main function
void OnStart() {
    PrintVector(vector);
}

//
// ### Matrix Example
//

// Define a matrix as a two-dimensional array
double matrix[2][3] = {
    {1.0, 2.0, 3.0},
    {4.0, 5.0, 6.0}
};

// Function to print a matrix
void PrintMatrix(double &matrix[][]) {
    int rows = ArrayRange(matrix, 0);
    int cols = ArrayRange(matrix, 1);

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            Print(matrix[i][j]);
        }
    }
}

// Main function
void OnStart() {
    PrintMatrix(matrix);
}

//
// ### Operations on Vectors and Matrices
//
// You can define functions to perform common operations on vectors and matrices, such as addition, subtraction, and multiplication. Here is an example of vector addition:
//

// Function to add two vectors
void AddVectors(double &result[], const double &vector1[], const double &vector2[]) {
    int size = ArraySize(vector1);
    ArrayResize(result, size);

    for (int i = 0; i < size; i++) {
        result[i] = vector1[i] + vector2[i];
    }
}

// Main function
void OnStart() {
    double vector1[] = {1.0, 2.0, 3.0};
    double vector2[] = {4.0, 5.0, 6.0};
    double result[];

    AddVectors(result, vector1, vector2);

    PrintVector(result);
}

//
// For more complex operations, such as matrix multiplication, you will need to write additional logic to handle the operations correctly.
//
// ### Matrix Multiplication Example
//

// Function to multiply two matrices
void MultiplyMatrices(double &result[][], const double &matrix1[][], const double &matrix2[][]) {
    int rows1 = ArrayRange(matrix1, 0);
    int cols1 = ArrayRange(matrix1, 1);
    int rows2 = ArrayRange(matrix2, 0);
    int cols2 = ArrayRange(matrix2, 1);

    if (cols1 != rows2) {
        Print("Matrix dimensions do not match for multiplication");
        return;
    }

    ArrayResize(result, rows1);
    for (int i = 0; i < rows1; i++) {
        ArrayResize(result[i], cols2);
        for (int j = 0; j < cols2; j++) {
            result[i][j] = 0;
            for (int k = 0; k < cols1; k++) {
                result[i][j] += matrix1[i][k] * matrix2[k][j];
            }
        }
    }
}

// Main function
void OnStart() {
    double matrix1[2][3] = {
        {1.0, 2.0, 3.0},
        {4.0, 5.0, 6.0}
    };
    double matrix2[3][2] = {
        {7.0, 8.0},
        {9.0, 10.0},
        {11.0, 12.0}
    };
    double result[][];

    MultiplyMatrices(result, matrix1, matrix2);

    PrintMatrix(result);
}

//
// By using arrays and custom functions, you can effectively work with vectors and matrices in MQL5.
//
//(USER) So you don't know about the chapter Martix and Vector Methods?
//(COPILOT) In MQL5, the primary focus is on developing trading algorithms and strategies for the MetaTrader 5 platform. While the language does not inherently include advanced mathematical constructs like matrix and vector operations as built-in features, you can certainly implement such methods if needed.
//
// If you need to work with matrices and vectors in MQL5, you would typically define your own classes or functions to handle these operations. Here’s a brief example of how you might define basic vector operations in MQL5:
//

// Define a simple vector class
class Vector {
public:
    double x, y, z;

    // Constructor
    Vector(double _x, double _y, double _z) {
        x = _x;
        y = _y;
        z = _z;
    }

    // Vector addition
    Vector Add(Vector v) {
        return Vector(x + v.x, y + v.y, z + v.z);
    }

    // Vector subtraction
    Vector Subtract(Vector v) {
        return Vector(x - v.x, y - v.y, z - v.z);
    }

    // Scalar multiplication
    Vector Multiply(double scalar) {
        return Vector(x * scalar, y * scalar, z * scalar);
    }

    // Dot product
    double Dot(Vector v) {
        return x * v.x + y * v.y + z * v.z;
    }

    // Cross product
    Vector Cross(Vector v) {
        return Vector(
            y * v.z - z * v.y,
            z * v.x - x * v.z,
            x * v.y - y * v.x
        );
    }

    // Print vector
    void Print() {
        Print("Vector(", x, ", ", y, ", ", z, ")");
    }
};

// Example usage
void OnStart() {
    Vector v1 = Vector(1.0, 2.0, 3.0);
    Vector v2 = Vector(4.0, 5.0, 6.0);

    Vector v3 = v1.Add(v2);
    v3.Print(); // Output: Vector(5.0, 7.0, 9.0)

    Vector v4 = v1.Cross(v2);
    v4.Print(); // Output: Vector(-3.0, 6.0, -3.0)
}

//
// This is a basic implementation and can be expanded based on your specific requirements. For matrix operations, you would follow a similar approach by creating a matrix class and implementing the necessary methods for matrix addition, subtraction, multiplication, etc.
//
// If you need more advanced mathematical libraries, you might consider using external libraries or integrating with other programming languages that specialize in numerical computations, and then interface those with your MQL5 code.
//
//(USER)No, I don't mean any self built classes. There is AN ENTIRE CHAPTER "Matrix and Vector Methods" IN DOCUMENTATION
// that you seem to know, but then you don't?
//(COPILOT) I'm sorry for any confusion earlier. Yes, MQL5 does indeed have built-in support for matrix and vector operations. The chapter "Matrix and Vector Methods" in the MQL5 documentation provides detailed information about these functionalities.
//
// MQL5 includes a set of functions specifically designed for handling matrices and vectors, which can be very useful for various numerical and analytical tasks, such as technical analysis, financial modeling, and more.
//
// Here are some of the key functions and methods provided for matrix and vector operations:
//
// ### Matrix Functions
// 1. **Matrix Creation and Initialization**
//    - `MatrixCreate(rows, cols)` - Creates a matrix with the specified number of rows and columns.
//    - `MatrixInitialize(matrix, value)` - Initializes all elements of the matrix with the specified value.
//
// 2. **Matrix Operations**
//    - `MatrixAdd(matrix1, matrix2)` - Adds two matrices.
//    - `MatrixSubtract(matrix1, matrix2)` - Subtracts one matrix from another.
//    - `MatrixMultiply(matrix1, matrix2)` - Multiplies two matrices.
//    - `MatrixTranspose(matrix)` - Transposes a matrix.
//    - `MatrixInverse(matrix)` - Calculates the inverse of a matrix.
//    - `MatrixDeterminant(matrix)` - Computes the determinant of a matrix.
//
// 3. **Matrix Utility Functions**
//    - `MatrixPrint(matrix, format)` - Prints the matrix in a specified format.
//    - `MatrixCopy(matrix)` - Copies a matrix.
//
// ### Vector Functions
// 1. **Vector Creation and Initialization**
//    - `VectorCreate(size)` - Creates a vector of the specified size.
//    - `VectorInitialize(vector, value)` - Initializes all elements of the vector with the specified value.
//
// 2. **Vector Operations**
//    - `VectorAdd(vector1, vector2)` - Adds two vectors.
//    - `VectorSubtract(vector1, vector2)` - Subtracts one vector from another.
//    - `VectorMultiply(vector, scalar)` - Multiplies a vector by a scalar.
//    - `VectorDotProduct(vector1, vector2)` - Computes the dot product of two vectors.
//    - `VectorCrossProduct(vector1, vector2)` - Computes the cross product of two vectors.
//
// 3. **Vector Utility Functions**
//    - `VectorPrint(vector, format)` - Prints the vector in a specified format.
//    - `VectorCopy(vector)` - Copies a vector.
//
// ### Example Code
// Here is an example of how you might use some of these functions in MQL5:
//

#include <Matrix.mqh>
#include <Vector.mqh>

void OnStart()
{
    // Create and initialize matrices
    double matrix1[2][2] = {{1, 2}, {3, 4}};
    double matrix2[2][2] = {{5, 6}, {7, 8}};
    
    // Add matrices
    double resultMatrix[2][2];
    MatrixAdd(matrix1, matrix2, resultMatrix);
    MatrixPrint(resultMatrix, "Result of Matrix Addition:");
    
    // Create and initialize vectors
    double vector1[3] = {1, 2, 3};
    double vector2[3] = {4, 5, 6};
    
    // Compute dot product
    double dotProduct = VectorDotProduct(vector1, vector2);
    Print("Dot Product: ", dotProduct);
    
    // Compute cross product
    double crossProduct[3];
    VectorCrossProduct(vector1, vector2, crossProduct);
    VectorPrint(crossProduct, "Cross Product:");
}

void MatrixPrint(const double &matrix[][], const string &message)
{
    Print(message);
    for (int i = 0; i < ArraySize(matrix, 0); i++)
    {
        string row = "";
        for (int j = 0; j < ArraySize(matrix, 1); j++)
        {
            row += DoubleToString(matrix[i][j], 2) + " ";
        }
        Print(row);
    }
}

void VectorPrint(const double &vector[], const string &message)
{
    Print(message);
    string vec = "";
    for (int i = 0; i < ArraySize(vector); i++)
    {
        vec += DoubleToString(vector[i], 2) + " ";
    }
    Print(vec);
}

//
// This example demonstrates the creation, initialization, and basic operations on matrices and vectors in MQL5. You can find more detailed information and additional functions in the official MQL5 documentation under the "Matrix and Vector Methods" chapter.
//
//(USER) We are chasing tails here. Thanks for your effort, but that was not what I am asking.
//(COPILOT) I understand that you're looking for assistance with MQL5, but it seems like there was some confusion in your previous communication. If you could provide more details about what you're trying to achieve or the specific problem you're facing, it would help me offer a more precise solution. Here are some common examples and scenarios in MQL5 that might be of help:
//
// ### Example 1: Simple Moving Average (SMA) Calculation
//

//+------------------------------------------------------------------+
//|                                                     SMA Example  |
//|                        Copyright 2023, MetaQuotes Software Corp. |
//|                                       https://www.mql5.com       |
//+------------------------------------------------------------------+
#property strict

// Input parameters
input int    sma_period = 14;  // Period for the Simple Moving Average

// Indicator buffer
double sma_buffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   // Set the indicator buffer
   SetIndexBuffer(0, sma_buffer);

   // Define the indicator properties
   IndicatorShortName("Simple Moving Average");
   SetIndexLabel(0, "SMA");

   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   // Calculate Simple Moving Average
   for (int i = 0; i < rates_total; i++)
     {
      if (i >= sma_period - 1)
        {
         double sum = 0.0;
         for (int j = 0; j < sma_period; j++)
           {
            sum += close[i - j];
           }
         sma_buffer[i] = sum / sma_period;
        }
      else
        {
         sma_buffer[i] = 0.0;
        }
     }

   return(rates_total);
  }
//+------------------------------------------------------------------+

//
// ### Example 2: Expert Advisor (EA) for Opening a Trade
//

//+------------------------------------------------------------------+
//|                                                     EA Example   |
//|                        Copyright 2023, MetaQuotes Software Corp. |
//|                                       https://www.mql5.com       |
//+------------------------------------------------------------------+
#property strict

input double lot_size = 0.1;  // Lot size for the trade
input int    stop_loss = 50;  // Stop loss in points
input int    take_profit = 100; // Take profit in points

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   // Print a message in the expert log
   Print("Expert Advisor initialized.");
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   // Print a message in the expert log
   Print("Expert Advisor deinitialized.");
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   // Check if there are open positions
   if (PositionsTotal() == 0)
     {
      // Open a buy order
      OpenBuyOrder();
     }
  }

//+------------------------------------------------------------------+
//| Function to open a buy order                                     |
//+------------------------------------------------------------------+
void OpenBuyOrder()
  {
   double price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double sl = price - stop_loss * _Point;
   double tp = price + take_profit * _Point;

   // Define trade request
   MqlTradeRequest request;
   ZeroMemory(request);
   request.action = TRADE_ACTION_DEAL;
   request.symbol = _Symbol;
   request.volume = lot_size;
   request.type = ORDER_TYPE_BUY;
   request.price = price;
   request.sl = sl;
   request.tp = tp;
   request.deviation = 10;
   request.magic = 123456;
   request.comment = "Buy Order";

   // Define trade result
   MqlTradeResult result;
   ZeroMemory(result);

   // Send trade request
   if (OrderSend(request, result))
     {
      Print("Buy order opened successfully.");
     }
   else
     {
      Print("Error opening buy order: ", GetLastError());
     }
  }
//+------------------------------------------------------------------+

//
// Please provide more details about what you're trying to achieve or the specific issue you're encountering so I can give more targeted assistance.
//


Try asking him about the chapter "Matrix and Vector Methods", which Copilot seems to know but refuses to build stuff with anything else then multidimensional double arrays or Alglib Matrix classes... :/ Copilot doesn't do it, ChatGPT 4o on open.ai does it though.

Most of the code works with slight adjustments and Copilot doesn't mix mql5 with mql4 any more which is already really good.
 
Alexey Volchanskiy #:

The problem is that ChatGPT 3.5 and ChatGPT 4 don't remember new knowledge on their own. They only remember the dialogue with you for the duration of the session. So teaching them is a waste of time.

How can say to ChatGPT to build a graphic line cart performance?I 'd like build a label where is draw a line graphic in real time of performance every time a trade is close.

MetaEditor, Open AI and ChatGPT - Test version of MQ5 Copilot in beta 3647
MetaEditor, Open AI and ChatGPT - Test version of MQ5 Copilot in beta 3647
  • 2023.03.24
  • Alain Verleyen
  • www.mql5.com
Test version of mql5 copilot in beta 3647. In today's beta version 3647, we've included the first version of copilot, a feature to enhance the editor's ability to write code. Besides, let's be honest, copilot is the poorest of all the candidates
 

Integrating AI model into already existing MQL5 trading strategy

Incorporating an AI model into an MQL5 trading strategy can help overcome existing challenges by infusing machine learning-based adaptability and decision-making capabilities. By using techniques like Long Short Term Memory (LSTM) or predictive analytics, AI can analyze extensive historical and real-time datasets to generate smarter trading actions. Unlike rigid, predefined strategies, AI-enhanced systems dynamically adapt and refine their approaches by learning from evolving market conditions. This leads to sharper timing for trades, more effective risk mitigation, and increased profitability over time.
Integrating AI model into already existing MQL5 trading strategy
Integrating AI model into already existing MQL5 trading strategy
  • www.mql5.com
This topic focuses on incorporating a trained AI model (such as a reinforcement learning model like LSTM or a machine learning-based predictive model) into an existing MQL5 trading strategy.
 
 
 
Only if that AI named Luci, maybe I will use it for creating EAs.
 

Forum on trading, automated trading systems and testing of trading strategies

Are there any serious plans to upgrade MetaEditor to a professional-grade programming IDE?

Renat Fatkhullin , 2025.05.28 19:20

A beta will be released in the coming days, where the MT5 editor storage has been changed to Git.

We are launching a new collaboration project MQL5 Algo Forge: https://forge.mql5.io


Forum on trading, automated trading systems and testing of trading strategies

Are there any serious plans to upgrade MetaEditor to a professional-grade programming IDE?

Renat Fatkhullin , 2025.05.29 12:58

I have explained many times that only professional developers create products that are widely used. They need more and more features.

That's why we put so much effort into developing the MQL5 language. The new beta will feature a major upgrade of OpenBLAS mathematics.

We are also preparing a new compiler for release with a lot of new features. It will not be in beta yet.

For Low code and non-professional developers, we will later upgrade AI Assistant and offer our own MCP server.


 

Forum on trading, automated trading systems and testing of trading strategies

Are there any serious plans to upgrade MetaEditor to a professional-grade programming IDE?

Renat Fatkhullin , 2025.05.29 13:03

Git is fully integrated into MetaEditor and there is no need to install a third-party Git.

For now, we only offer work with our Algo Forge platform, similar to GitHub. The main MQL5 root will always work with our storage, and in Shared Projects we may allow linking our external storage. To do this, you can specify an account in an external system in the settings.

Our task is to restart joint projects .


Forum on trading, automated trading systems and testing of trading strategies

Are there any serious plans to upgrade MetaEditor to a professional-grade programming IDE?

Renat Fatkhullin , 2025.05.29 13:11

For the last six months we have been busy with server capabilities and have not spent much time on the terminal.

What was done for the terminal:

  • Rewritten GUI libraries to support dark schemes
  • We have updated the visual interface
  • Developed a new compiler - not finished yet
  • Extended OpenBLAS and related math functions

What we will do next in the terminal and editor:

  • Change the chart graphics engine, abandoning the old GDI
  • Increase the chart capabilities by adding a combination of additional symbols on the main chart
  • We will expand the functionality of manual trading
  • Expand our joint work on projects
  • We will enable a new compiler with new intelligence
  • Expand projects
  • The compiler will be able to work with Visual Studio projects and natively compile C/C++ projects to create MQL5 modules/libraries
  • We will introduce a package manager for easy import of modules, they will be natively compiled into a single final EX5 file
  • We will enable native versions for the ARM64 platform, all other components of the system already work natively under ARM64

 

Very important announcement concerning MetaEditor and more:

MetaTrader 5 Platform beta build 5050: 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. Git is the global standard for developers, offering enhanced reliability and flexibility in code management. With the transition to Git, we are introducing MQL5 Algo Forge, a new online portal for project management. This is not just a project list, it is a full-fledged social network for developers. Follow interesting developers, create teams, and collaborate on projects effortlessly.

MetaTrader 5 Platform beta build 5050: Transition to Git and MQL5 Algo Forge developer hub, dark theme and interface improvements
MetaTrader 5 Platform beta build 5050: Transition to Git and MQL5 Algo Forge developer hub, dark theme and interface improvements
  • 2025.05.30
  • MetaQuotes
  • www.mql5.com
On Friday, May 30, 2025, an updated beta version of the MetaTrader 5 platform will be released...
 
Unfortunately also in build 5050 metaeditor AI assistant is still on the outdated models... no o3, o4-mini, o4-mini-high, gpt-4.1, gpt-4.1 mini. Can we get this updated in the next beta?
 
And also why not doing a fork of Visual Code to replace Meta Editor with the proper extension for MQL5 ?