What's new in MetaTrader 5

The history of updates of the desktop, mobile and web platforms

29 April 2022
MetaTrader 5 build 3280: Improvements and fixes based on traders' feedback


  1. Fixed filling of standard Trailing Stop levels in the context menu of open orders and positions.

  2. Updated user interface translations.
Fixed errors reported in crash logs.
21 April 2022
MetaTrader 5 build 3270: Improvements and fixes


  1. Built-in chat improvements.
    • Updated design. Messages now appear without encircling bubbles to optimize display and space utilization. Added avatars and date separators.
    • Copy and Delete commands have been added to the message menu.
    • Bug fixes and stability improvements.

  2. Fixed bulk position closing commands. An error occurred on accounts with the hedging position accounting system.
  3. Fixed accounting for certain deal types when generating the history of positions.

Fixed errors reported in crash logs.
15 April 2022
MetaTrader 5 build 3260: Bulk operations, matrix and vector functions, and chat enhancements


  1. Added commands for bulk closing of positions and cancellation of pending orders.
    New "Bulk Operations" command has been added to the context menu of the Trade tab. The list of available commands is formed automatically, depending on the selected operation and on your account type.

    The following commands are always available in the menu:
    • Closing all positions On hedging accounts, the system tries to close positions by opposite ones (Close By), and then it closes the remaining positions following a regular procedure.
    • Close all profitable or all losing positions
    • Delete all pending orders
    • Delete pending orders of certain types: Limit, Stop, Stop Limit

    If you select a position, additional commands appear in the menu:
    • Close all positions for the symbol
    • Close all positions in the same direction (on hedging accounts)
    • Close opposite positions for the same symbol (on hedging accounts)
    • Position reversal (on netting accounts)

    If you select a pending order, additional commands appear in the menu:
    • Delete all pending orders for the same symbol
    • Delete all pending orders of the same type for the same symbol

    These commands are only available if One Click Trading is enabled in platform settings: Tools \ Options \ Trade.
  2. Enhanced internal chart features:
    • Added ability to reply to messages. The source message text will be cited in the reply.
    • Added ability to create messages with different content types, such as images with text and text with attachments, among others.
    • Fixed display of the separator between read and unread messages.
    • Error fixes and stability improvements.

  3. Optimized and accelerated operation of the terminal's graphical system. Interface rendering will require less resources.
  4. Fixed calculation of daily price changes for futures. If the broker provides a clearing price, this price will be used for calculations.
    ((Last - Clearing Price)/Clearing Price)*100
    A detailed description of all calculation types is available in the Documentation.

  5. Fixed errors during MQL5 service purchases:
    • Payment systems could return errors for successful operations under certain conditions.
    • An incorrect price could be displayed at intermediary product renting steps in the Market.

  6. Fixed operation of the "Start" button in the purchased/downloaded Market product page. Now the button correctly launches the application on the first open chart.
  7. Fixed accounting for certain deal types when generating the history of positions.


  1. Added new functions for working with matrices and vectors:
    • Median — returns the median of the matrix or vector elements
    • Quantile — returns the q-th quantile of matrix/vector elements or elements along the specified axis
    • Percentile — returns the q-th percentile of matrix/vector elements or elements along the specified axis
    • Std — computes the standard deviation of matrix or vector elements
    • Var — computes the variance of matrix or vector elements
    • CorrCoef — computes the matrix/vector correlation coefficient
    • Correlate — computes the cross-correlation of two vectors
    • Convolve — returns the discrete, linear convolution of two vectors
    • Cov — computes the covariance matrix

  2. We have started adding built-in methods for numeric arrays. The new methods enhance usability, increase code compactness, and improve code compatibility with other languages.

    The following three methods are already available:
    • ArgSort — sorts arrays by the specified dimension; the last one is used by default (axis=-1).
    • Range — returns the number of elements in the specified array dimension. Analogue of ArrayRange.
    • Size — returns the number of array elements. Analogue of ArraySize.

    void OnStart()
       int arr[4][5]=
            {22, 34, 11, 20,  1},
            {10, 36,  2, 12,  5},
            {33, 37, 25, 13,  4},
            {14,  9, 26, 21, 59}
       ulong indexes[4][5];
    //--- Sort the array
    // Result log:
    // indexes
    //     [,0][,1][,2][,3][,4]
    // [0,]   4   2   3   0   1
    // [1,]   2   4   0   3   1
    // [2,]   4   3   2   0   1
    // [3,]   1   0   3   2   4

  3. We have started adding built-in methods for strings.
    The following methods are currently available:
    • BufferSize — returns buffer size allocated for the string.
    • Compare — compares two strings and returns the comparison result as an integer.
    • Length — returns the number of characters in a string.
    • Find — searches for a substring in a string.
    • Upper — capitalizes a string.
    • Lower — converts a string to lowercase.
    • Replace — replaces a substring.
    • Reserve — reserves a buffer for a string.

    All methods are analogous to string functions.

      void OnStart()
         string test="some string";
         PrintFormat("String length is %d",test.Length());
      // Result log:
      // String length is 11
    • Added SYMBOL_SUBSCRIPTION_DELAY value into the ENUM_SYMBOL_INFO_INTEGER enumeration for the delay in quotes delivery for specific symbols.

      It is only used for subscription-based trading symbols. The delay is usually applicable to data provided in trial mode.

      The property can only be requested for symbols selected in the Market Watch. Otherwise, the ERR_MARKET_NOT_SELECTED (4302) error will be returned.

    • Added ACCOUNT_HEDGE_ALLOWED property into the ENUM_ACCOUNT_INFO_INTEGER enumeration — enables the opening of opposite positions and pending orders. The property is only used for hedging accounts to comply with specific regulatory requirements, according to which an account cannot have opposite positions for the same symbol, while same-direction positions are allowed.

      If this option is disabled, accounts are not allowed to have opposite-direction positions and orders for the same financial instrument. For example, if the account has a Buy position, the user cannot open a Sell position or place a pending Sell order. If the user tries to perform such an operation, the TRADE_RETCODE_HEDGE_PROHIBITED error will be returned.

    • New properties in the ENUM_SYMBOL_INFO_DOUBLE enumeration:

      Use the values to obtain swap calculation rates for specific days of the week. 1 — single swap, 3 — triple swap, 0 — no swap.

    • Fixed operation of CopyTicks and CopyTicksRange functions. An error could cause the return of outdated data when crossing through midnight. The error occurred when no ticks were provided for the financial instrument.
    • Fixed errors reported in crash logs.

    11 February 2022
    MetaTrader 5 build 3210: New matrix methods and control over indicator minimum/maximum values


    1. Added Min, Max, ArgMin, ArgMax and Sum functions for vectors and matrices. Use the functions to find the minimum and the maximum values, relevant indexes and the sum.
    2. Added support for Flat methods for the matrix. With these methods, a matrix element can be addressed through one index instead of two.
      double matrix::Flat(ulong index) const;      // getter
      void matrix::Flat(ulong index,double value); // setter

      Pseudocode for calculating the address of a matrix element:

      ulong row=index / mat.Cols();
      ulong col=index % mat.Cols();

      For example, for 'matrix mat(3,3)', access to elements can be written as follows:

        reading: 'x=mat.Flat(4)', which is equivalent to 'x=mat[1][1]'
        writing: 'mat.Flat(5, 42)', equivalent to 'mat[1][2]=42'

      If the function is called with an invalid matrix index, the OutOfRange critical execution error will be thrown.

    3. Improved formatting of floating-point numbers in MQL5-program input parameters. When reading some real numbers, numbers with many zeros were substituted into the input parameters, for example, 0.4 was represented as 0.400000000002.
    4. Fixed errors in the Math\Stat\Math.mqh math library. The MathSample function from this library has been revised to match the traditional behavior of similar math libraries when sampling with backtracking.
    5. Fixed CopyTicks/CopyTicksRange error which could cause the return of outdated data when crossing over the midnight, when no ticks are provided for the financial instrument.
      Using these properties, you can fix or unfix the minimum and maximum indicator values using the IndicatorSetInteger function. When calling IndicatorSetInteger(INDICATOR_FIXED_MINIMUM/INDICATOR_FIXED_MAXIMUM, true), the current minimum or maximum value is used.


    1. Revised Sharpe Ratio calculation algorithm to match the traditional formula, in which the value corresponds to a one-year interval. The previous algorithm was based on the variability of obtained PnL and it ignored equity fluctuations against open positions. Now the calculation includes equity movements, while the Sharpe ratio is interpreted in a classical way:
      • Sharpe Ratio < 0              The strategy is unprofitable and is not suitable. Bad.
      • 0 < Sharpe Ratio  < 1.0    The risk does not pay off. Such strategies can be considered when there are no alternatives. Indefinite.
      • Sharpe Ratio ≥ 1.0          If the Sharpe ration is greater than one. This can mean that the risk pays off and that the portfolio/strategy can show results. Good.
      • Sharpe Ratio ≥ 3.0          A high value indicates that the probability of obtaining a loss in each particular deal is very low. Very good.


    1. Optimized memory consumption by the terminal.
    2. Improved platform operation with a network subsystem to enhance performance and to reduce network delays.
    3. Removed the display of the zero grid level in indicators when grid rendering is disabled.

    28 January 2022
    MetaTrader 5 platform build 3180: Vectors and matrices in MQL5 and improved usability


    1. Added chart window activation when moving a Market Watch symbol or a trading operation from account history to it.

      Both of these actions change the chart financial instrument to the selected one. Previously, they did not let the chart window become active. Accordingly, some further actions, such as calling a trading dialog (F9) or changing the scale (+/-) using hotkeys, could erroneously be applied to another chart. Now the chart, whose symbol has been changed by dragging, becomes selected for further work right away.

    2. Added opening a new order window when double-clicking on a trade operation in the account history. A financial instrument from the operation a user has clicked on is immediately inserted into the dialog allowing for faster trading. A similar command has been added to the context menu.

    3. Added smart inclusion of real or tick volumes when opening new charts. This data is important when analyzing the market. However, not all traders are aware of its availability in the platform.

      Real trading volumes have a higher priority. If they are provided by a broker, their display is enabled on the chart. Otherwise, the display of tick volumes is enabled.

      The mechanism is used only if the chart is opened with the default.tpl template. Volumes are no longer enabled when reopening a chart if a user has manually disabled them in the chart settings. Custom templates are not affected.

    4. Optimized and greatly accelerated the user interface display.
    5. Improved the chart printing function called via the File menu:
      • Fixed saving print settings
      • Improved the printed page appearance: increased grid lines, removed the program name, updated the header font
      • Enlarged the print dialog for correct interface display

    6. Fixed the volume field operation in the fast trading panel of the chart. Before the fix, the value was reset to the previous one after entering a new value and pressing Tab.
    7. Fixed trading history display on the chart. Previously, operations of the previous account were not removed from charts when switching between accounts.
    8. Fixed paying for MQL5.com via PayPal.
    9. Fixed the platform freeze when displaying an option volatility chart.
    10. Fixed phone number verification in the real account registration window. In some cases, the platform did not allow a user to proceed to the next registration stage after a correct number was entered.
    11. Fixed checking the rights when joining a group chat with MQL5.com members. Previously, a newly joined user could only read messages without being able to write them.
    12. Changed the chart text in case of data absence. Now "Waiting for update" is replaced with a symbol name, timeframe and symbol.
    13. Improved support for negative prices added in build 2450. Zero values can now also be displayed for the appropriate Market Watch symbols.
    14. Fixed display of product logos in the Market when working under Wine.


    1. We continue adding vector and matrix support. The new functions significantly expand the possibilities for neural network-based solution developers.

      Multiple functions are currently ready for use:

      • Eye — construct a matrix with ones on a specified diagonal and zeros elsewhere.
      • Identity — construct a matrix having a specified size with ones on the main diagonal and zeros elsewhere.
      • Ones — construct a matrix having a specified size filled with ones.
      • Zeroes — construct a matrix having a specified size filled with zeros.
      • Full — construct a matrix having a specified size filled with specified values.
      • Copy — construct a copy of a matrix or vector.
      • Diag — extract a diagonal from a matrix and fill in the specified diagonal with values from a vector.
      • Tri — construct a matrix with ones on a specified diagonal and below, and zeros elsewhere.
      • Row — return a matrix row as a vector and fill in the specified row with values from the vector.
      • Col — return a matrix column as a vector and fill in the specified column with values from the vector.
      • Rows — return the number of rows in a matrix.
      • Cols — return the number of columns in a matrix.
      • Transpose — transpose a matrix.
      • * — product of matrices, vectors and scalars — dot product.
      • Power — raise a matrix to a power.
      • Kron — Kronecker product.
      • Cholesky — Cholesky decomposition.
      • QR — QR factorization of a matrix.
      • SVD — singular decomposition.
      • LU — LU decomposition of a matrix.
      • LUP — LUP decomposition of a matrix.
      • Norm — calculate matrix norm.
      • Cond — compute the condition number of a matrix.
      • Spectrum — compute spectrum of a matrix
      • Det — compute the determinant of a matrix.
      • Rank — compute matrix rank.
      • SLogDet — compute the sign and base logarithm of the determinant of a matrix.
      • Trace — compute matrix trace.
      • Solve — solve a system of linear equations.
      • LstSq — solve a system of linear equations using the least squares method.
      • Inv — compute the inverse of a matrix.
      • PInv — compute the pseudo-inverse of a matrix by the Moore-Penrose method.
      • Compare — compare two matrices using epsilon.

      For more details please read the relevant MQL5 documentation.

    2. Fixed errors when handling files and databases related to path length limitation. In particular, the DatabaseOpen function allowed setting the path larger than the acceptable one causing incorrect database creation. Now the function returns the ERR_TOO_LONG_FILE_NAME error code correctly.
    3. Fixed variable constancy control. Previously, the compiler could occasionally skip the "constant variable cannot be passed as reference" error.
    4. Fixed erroneous compiler warnings about using an uninitialized variable.
    5. Fixed ChartWindowOnDropped function operation for indicators. Previously, it always returned zero.
    6. Added support for Python 3.10 to the Python integration module.


    1. Fixed displaying the VPS item in the Navigator. Previously, it could occasionally disappear when switching between accounts.


    1. Fixed unwrapping of complex expressions in the debug observation window.


    1. Fixed export of test reports to files. Some values could be rounded incorrectly if a currency with a precision of 0 decimal places was used as a deposit currency. For example, JPY.
    22 October 2021
    MetaTrader 5 platform build 3091: Improvements


    1. Fixed opening of an empty page when purchasing MQL5 services. Now operation results are immediately displayed to the user.
    2. Fixed excessive compression of document images which users upload when requesting real accounts. This has improved the quality of automatic KYC checks and has facilitated the entire account opening procedure.
    3. Fixed operation of graphs which are opened upon testing completion.


    1. Added support for SQLite 3.36.0.


    1. Added background highlighting for matching brackets. The option can be enabled via MetaEditor's general settings.
    2. Improved MQL5 program debugger.

    Fixed errors reported in crash logs.
    21 October 2021
    MetaTrader 5 build 3090: Improvements and fixes


    1. Fixed an error which could cause custom trading symbols to disappear under certain conditions.
    2. Improved menu and toolbar icons.
    3. Three new languages have been added to MQL5.com: French, Italian and Turkish.

      Now the largest community of algorithmic traders MQL5.community is available in 11 languages. We have already localized the website interface, documentation and important forum topics. Articles and Economic Calendar in the new languages will also become available soon.

    4. Fixed errors reported in crash logs.


    1. Fixed bugs in the StringConcatenate function.
    2. Fixed setting of the _LastError value when working with the FileSave function. The variable could contain a null value instead of the description of the function error under certain conditions.
    3. Fixed data import from resources to double type arrays.


    1. Fixed an error which caused the chart window to freeze during visual testing.
    Updated documentation
    14 October 2021
    MetaTrader 5 build 3081: Improvements in MQL5 services and design updates


    1. Improved navigation in MQL5.community services.

      Market, Signals and VPS sections have been moved from the main platform workspace to the Navigator. The new positioning provides easy access to the desired products and enables efficient management of purchases and subscriptions. "How it works" sections have been added to each service, to provide the basic usage information.

      Improved navigation through MQL5.community services

    2. All menu and toolbar icons have been completely redesigned. The terminal interface has become more user-friendly:

      • Removed small elements from icons
      • Reduced the number of used colors to avoid color noise
      • Fewer gradients are used to improve readability
      • More straightforward metaphors are used

      All menus, toolbars and dialogs have been redesigned in the platform

    3. Added the display of costs resulting from deal execution. The relevant information is shown in the trading history. This feature is used by NFA regulated brokers.

      The account history now shows deal costs>

      If your broker enables cost calculation on the server, the new Costs column will appear in your account trading history. The column shows the deal execution cost relative to the current mid-point price of the symbol (mid-point spread cost).

    4. Launched Korean version of MQL5.com.

      This is the eighth language available at MQL5.community, the largest community of algorithmic traders. The website interface, articles, the Economic Calendar and important forum topics are already available in Korean. MQL5 documentation will be translated soon.

    5. Fixed loading of custom trading instruments. In some cases, newly created symbol settings could overwrite existing symbol settings.
    6. Fixed the on-chart display of the signal trading history. Previously, the relevant option enabled the display of all trades for all financial instruments, and not only for the chart symbols.
    7. Added export of the Fee column to the trading history report. Previously the value was only displayed in the history, but it could not be saved to a file.
    8. Optimized and accelerated operation of one-click trading panels in Market Watch and on charts.
    9. Fixed operation of the Margin Ratios field for custom trading instruments. The values could be reset to zero under certain conditions.
    10. We continue implementing the Subscriptions service through which traders can purchase additional trading services from brokers. Fixed errors in the quotes subscription window.
    11. Fixed display of the Trend Line analytical object. Previously the line could disappear upon scaling or upon chart window resizing.
    12. Fixed display of the Rectangle analytical object. The object could disappear if one of the anchor points was beyond the chart visibility area.
    13. Fixes and operation speed improvements related to operation of built-in MQL5.community charts.
    14. Fixed rounding of the Value parameter in the list of open positions. The fractional part could be hidden in previous versions.
    15. Fixed mobile phone verification during the account opening process. Phone numbers could be identified as incorrect for some Chinese operators.
    16. Added support for MQL5 account passwords longer than 32 characters.
    17. Fixed export of certificates when working in Wine. This option is used for accounts with extended authentication, when migrating such accounts from desktop to mobile.
    18. Fixed buttons opening MQL5 services in the lower panel of the Toolbox window. The buttons were inactive when the window was undocked.
    19. Added limitation on the "File \ New Chart" menu size. Now the menu can contain no more than 128 submenus with symbol groups, each having no more than 32 symbols. The limitation speeds up the terminal operation and avoids freezing when adding a large number of trading symbols (2,000 or more) to Market Watch.


    1. We continue adding vector and matrix support. The new functions will significantly expand the possibilities for neural network-based solution developers.
    2. Added DEAL_SL and DEAL_TP values in the ENUM_DEAL_PROPERTY_DOUBLE enumeration — the Stop Loss and Take Profit levels of a deal.

      The relevant values for entry and reversal deals are set in accordance with the Stop Loss/Take Profit of orders, which initiated these deals. The Stop Loss/Take Profit values ​​of appropriate positions as of the time of position closure are used for exit deals.

    3. Added the MQL_HANDLES_USED value in the ENUM_MQL_INFO_INTEGER enumeration — the number of active class objects (handles) in an MQL program. These include both dynamic (created via new) and non-dynamic objects, global/local variables or class members. The more handles a program uses, the more resources it consumes.

    4. Added new methods for working with the MqlCalendarValue structure which describes an economic calendar event:

      • HasActualValue(void) — returns true if the actual value is set; otherwise returns false
      • HasForecastValue(void) — returns true if the forecast value is set; otherwise returns false
      • HasPreviousValue(void) — returns true if the previous value is set; otherwise returns false
      • HasRevisedValue(void) — returns true if the revised value is set; otherwise returns false
      • GetActualValue(void) — returns the actual value of an event (double) or nan if the relevant value is not set
      • GetForecastValue(void) — returns the forecast value of an event (double) or nan if the relevant value is not set
      • GetPreviousValue(void) — returns the previous value of an event (double) or nan if the relevant value is not set
      • GetRevisedValue(void) — returns the revised value of an event (double) or nan if the relevant value is not set

    5. Fixed debugging of the MQL5 programs which use libraries in the form of EX5 files.
    6. Accelerated compilation of programs containing large arrays initialized by a sequence.
    7. Fixed execution of the CopyTicksRange function with custom trading symbol data. The function could return data out of the requested period.
    8. Fixed verification of the availability of all template parameters during specialization by parameters. Code compilation with debug templates could cause "code generation error" under certain conditions.


    1. Added capability to automatically renew Signal subscriptions.

      Your subscription will not end abruptly, as the system will automatically renew it for another month through the payment method that you previously used for the initial subscription purchase.

      Enable auto renewal for your Signal subscription

      If you made your previous payment using a card and the renewal payment fails, the system will try to make a payment from your MQL5 account balance.

      Do not worry about changes in subscription prices. If the price grows, auto-renewal will be canceled. You will receive a relevant notification by email.

      You can enable or disable the auto renewal option at any moment via the My Subscriptions section at MQL5.com.

      Manage auto renewals from the My Subscriptions section at MQL5.com

    2. Fixed display of the Signals showcase. Now the system correctly identifies the compatibility of signals with the current account.


    1. Added product search by the author's name and login in the Market showcase. Previously, the service only supported search by product name and description.


    1. Improved the auto subscription renewal option.

      Previously, the payment for the renewal could only be made from the MQL5 account balance. The user had to make sure the relevant amount is available on their account.

      Now there is no need to top up the MQL5 account. The system will renew the subscription using the same payment method which you used for the initial subscription. If you paid for the VPS with a card and enabled the auto renewal option, the system will use the same payment method for the new subscription period. If the payment fails, the system will try to make a payment from your MQL5 account balance.

      Use cards and other payment methods for auto renewal

      With the new option, you can be sure that your Expert Advisors and signal subscriptions will not stop due to the end of the VPS period. Furthermore, there is no need to check and top up your balance manually.
      The option will only be used for new subscriptions. Payments for the renewal of existing subscriptions will be made from the MQL5 account balance.


    1. Fixed visual testing errors. Under certain conditions, charts could fail to display indicators used in Expert Advisors.


    1. Fixed jumping to the function or variable declaration using Alt+G. The action could fail if the declaration was below the call line.
    2. Added display of the object type for references to class objects in the debugger.
    3. Added capability to display union in the list of watched expressions.

    MetaTrader 5 iPhone/iPad, MetaTrader 5 Android

    1. Added display of a disclaimer during application start. Please read it carefully. Additionally, some brokers can automatically create a demo account during the first start of the application. In this case, you will see the relevant terms.

      Disclaimers added in MetaTrader 5 for iPhone/iPad

    2. Added capability to connect an account to monitoring in the Signals service directly from the mobile application. This can be done by selecting "Account Monitoring" from the menu. For convenience, the account number and the broker name are automatically added to the registration window. You should additionally specify the signal name and an investor password.

      Connect your account to the monitoring to access advanced trading statistics, to share the results with other traders or to start selling your signals.

    3. Added support for Huawei AppGallery and HMS Services for mobile terminals running on Android OS. Huawei smartphone owners can install the app from the relevant store and use push notifications.
    Updated documentation
    18 June 2021
    MetaTrader 5 build 2980: Push notifications for trade operations


    1. Added ability to receive push notifications from the server. You will be notified of executed trading operations even if your terminal is closed.

      In earlier versions, notifications on a mobile device could only be delivered from the trader's desktop terminal. Upon the execution of a trading operation, the terminal sent the relevant notification to MetaQuotes ID specified in settings. Notifications could only be sent from a running terminal. This requirement has been lifted. If a Take Profit triggers on the server while your computer is turned off, you will receive a notification about a closed position from the server.

      To start receiving notifications from the server, you should:

      • Have a real account as server notifications do not work for demo accounts
      • Install MetaTrader 5 for iOS or Android on your smartphone
      • Open the Messages section in the mobile terminal, find your MetaQuotes ID and specify it in the desktop terminal settings
      • Enable server notifications in desktop terminal settings

      The availability of server notifications should be provided by your broker

      Three notification types are supported: orders, deals and balance operations. When you enable the option, the available notification types will be displayed in the terminal log:
      '1222': subscribed to deals, orders, balance notifications from trade server

    2. Updated MetaTrader VPS Showcase. The VPS section has become more convenient:
      • The interface adapts to any screen width.
      • The showcase takes up less space vertically to fit in the workspace.
      • The necessary information appears only when it is needed. Payment details only appear after you select a payment plan.

      Terminal: In the Strategy Tester panel, added commands for quick switching to MQL5 services and to the Toolbox window. The commands are only displayed in the Overview section, while in other tabs the panel is used to manage testing.

    3. Added saving of window states for MQL5 services. If you leave the Market open before closing the terminal, the relevant window will be open the next time you launch the terminal.
    4. Fixed periodic synchronization of the MQL5 account state. Signal copying could fail under certain conditions due to an error.
    5. Fixed display of a selection of recommended Market products.
    6. Fixed signals context menu in the Navigator. You can use the menu to view the signal to which you are subscribed or to unsubscribe from a signal.


    1. Fixed "-" operator error in the implementation of complex numbers in the Standard Library (file MQL5\Include\Math\Alglib\complex.mqh).
    2. Now you can use any expressions in initialization sequences, not just constant ones. This improves usability and compatibility with C ++ code.
      struct POINT
         int x,y;
      int GetYFunc(y)
         return(y * y);
      void SomeFunction(int x1,int x2,int y)
         POINT pt={ x1+x2, GetYFunc(y) };
    3. Fixed an error which occurred during the compilation of union with huge data arrays.
    4. MQL5: Fixed operation of the StringToCharArray function. Now it converts the entire passed string to a Char array instead of stopping at the first terminating null character.
    5. Added control for the explicit presence of a constructor call for classes/structures if their parent class does not have a default constructor.


    1. Added display of a call place for inline functions in the profiler report.
      In the below example, the func(); call is now highlighted as follows:

      The func function itself is not highlighted since its full code is placed in OnStart.

    2. Added ability to create empty projects. This is a useful feature for non-standard development projects with specific file structures for which the default templates are not suitable.

      An empty settings file "mqproj" will be created in this case. Source code files should be created manually.

    3. Implemented faster launching of MetaEditor.
    4. Fixed data display in the list of observed expressions during debugging. The list could display incorrect variable values under certain conditions.
    5. Fixed automatic addition of ".py" extension to Python script files created using the MQL Wizard.
    Updated documentation.

    21 May 2021
    MetaTrader 5 Build 2940: Positioning of MQL5 Services showcases in the workspace and updated design


    1. Trading services, including Market, Signals and Virtual Hosting are now conveniently displayed in the platform's main working area.

      In earlier versions, MQL5 Services purchasing areas were located in the small Toolbox window below the main window. The new placement enables the display of fully featured showcases with convenient purchasing options. The removal of unnecessary tabs from the lower area provides more space for other platform functions.

      Access to additional services does not interfere with the major functions, such as trading and chart analysis.

      • Service tabs are located at the end of the bar, after all chart tabs.
      • Unused service windows can be closed. To re-open them, use the Navigator, the toolbar or the "Services" menu.

      We have also completely redesigned the services. The design has become more elegant and lightweight. Signals feature additional data, which were previously available only via the MQL5.community website showcase: a polar diagram with the main characteristics, reliability and activity metrics and other variables.

    2. Added support for IPv6 addresses.

      IPv4 which is used in every network was created more than 30 years ago. It contains IP addresses of 32 bits, which are represented as four 8-bit numbers separated by dots. This algorithm produces more than four billion unique IP addresses. However, the rapidly growing number of users and devices has accelerated the depletion of the pool of available addresses.

      To avoid the depletion problem, some products feature additional support for the modern IPv6 standard. This protocol uses a 128-bit address, represented as x:x:x:x:x:x:x:x, where each x is a hexadecimal value of six 16-bit address elements. Theoretically, this format allows 5 x 10 ^ 28 unique addresses. In addition to an extensive address space, this protocol has other advantages over the older version. For further details please refer to specialized articles.

      The MetaTrader 5 platform is fully IPv6-ready. If your broker or provider switches to the new protocol, the protocol support will be seamlessly enabled in the platform, with no additional action required from your end.

    3. We continue implementing the Task Manager functionality presented in build 2815. We have added an explicit indication for charts, on which MQL program debugging or profiling is running.

    4. Implemented faster platform launching under Wine on macOS and Linux computers. General optimization and bug fixes:
      • Improved display of menus, toolbars and dialog boxes.
      • Fixed errors in displaying the "Market", "Signals" and "VPS" sections. In particular, we have fixed the loading of product logos on the "Market" showcase.
      • Updated package for easy MetaTrader 5 installation on macOS computers. With this package, the platform can be installed similarly to any other application.
        The package includes additional components which enable a more stable and a faster operation. All package users are strongly advised to reinstall MetaTrader 5 by downloading the latest version from https://download.mql5.com/cdn/web/metaquotes.software.corp/mt5/MetaTrader5.pkg.zip

      If you are using CrossOver, please completely reinstall MetaTrader 5 to obtain the latest 64-bit platform version.
    5. Fixed "Ctrl+F9" keyboard shortcut action. It activates the Trade tab in the Toolbox.


    1. We continue limiting the circulation of older technologies, including 32-bit components.
      • 32-bit terminals are no longer allowed to load programs from the Market.
      • 32-bit terminals cannot connect to the hosting service.
      • The 32-bit MetaEditor version does not support additional file protection via MQL5 Cloud Protector.
      • MQL5 programs compiled under old MetaEditor versions (released 5 years ago or more) cannot run in the new terminal version.

      Support for the 32-bit platform version was discontinued a year ago, after the release of build 2361. We strongly recommend upgrading to the 64-bit MetaTrader 5 version in order to access all the platform's features without any limitation.
      Furthermore, we recommend all Sellers, who have previously uploaded 32-bit product versions to the Market, to recompile them using the latest 64-bit MetaEditor and to upload the new versions. The ability to run 32-bit MQL5 programs in terminals will be completely disabled soon.

    2. Added support for operations with complex numbers.

      Added new built-in type "complex".
      struct complex
         double             real;   // Real part
         double             imag;   // Imaginary part
      The "complex" type can be passed by value as a parameter for MQL5 functions (in contrast to ordinary structures, which are only passed by reference). For functions imported from DLLs, the "complex" type must be passed only by reference.

      The 'i' suffix is used to describe complex constants:
      complex square(complex c)
      void OnStart()
         Print(square(1+2i));  // A constant is passed as a parameter
      // "(-3,4)" will be output, which is a string representation of the complex number 
      Only simple operations are currently available for complex numbers: =, +, -, *, /, +=, -=, *=, /=, ==,!=.

      Support for additional mathematical functions will be added later, enabling the calculation of the absolute value, sine, cosine and others.

    3. New error code TRADE_RETCODE_HEDGE_PROHIBITED — opening of a position or placing of a pending order is not allowed because hedge positions are prohibited. The error is returned if a user tries to execute a trading operation in case the hedging is disabled for the account and an opposite order or position already exists for the same symbol.


    1. Fixed debugging and profiling termination in non-visual mode.
    2. Fixed indicator profiling on real data. Such profiling could fail to start under certain conditions.


    1. Fixed environment migration to a VPS. An error could occur for Expert Advisors containing indicators as resources.


    1. Fixed trading mode checks for copied signals. Symbol trading can be limited on the broker side, i.e. the broker can set 'long only', 'short only' or 'close only' conditions. In earlier versions, synchronization required full trading conditions and thus copying was not allowed for all other cases. After the update, partially limited conditions will be considered as "trading". This ability will be especially useful for stock brokers' clients who wish to copy signals.


    1. Fixed trading session checks during testing. Trading operation execution could fail during testing under certain conditions, in which case the "market closed" error was returned even if the operation was initiated within a trading session.
    Updated documentation.

    2 April 2021
    MetaTrader 5 build 2875: Improvements and fixes


    1. Fixed a bug which caused updated MQL5 standard programs to be copied to the terminal's root data directory instead of the MQL5 subdirectory. Due to this error, additional "Experts", "Images", "Include" and other folders could be created under the data directory.

      After the platform update, these folders will be checked and automatically deleted.
    2. Fixed an error which used to prevent users from logging into the built-in MQL5.community chat.


    1. Fixed optimization of Expert Advisors via the MQL5 Cloud Network. The optimization could fail to start under certain conditions.


    1. Fixed errors and crashes during MQL5 program debugging and profiling.

    Updated documentation.
    26 March 2021
    MetaTrader 5 build 2860: Improvements for Wine and SQL integration enhancements


    1. Added ability to enable/disable additional MQL5.community services. For example, if you are not interested in MQL5 programming articles or copy trading features of the Signals service, you can disable the relevant section to optimize resources and terminal workspace.

      All services are enabled by default.

    2. We have significantly optimized terminal operation under Wine on macOS and Linux:
      • Now undocked service windows (Navigator, Toolbox) cannot be dragged beyond terminal borders. Previously, this could cause difficulty in dragging windows back to the terminal.
      • Fixed resizing of service window contents when resizing the window.
      • Fixed display of performance metrics in Task Manager.
      • Improved display of icons on the toolbar.
      • Fixed unread message counter in chats.
      • Fixed display of chart system commands: Hide, Expand and Close.
      • Fixed log display.
      • Fixed display of chart tooltips.
      • Fixed chart print commands.
      • Fixed display of the top menu when using Linux skins.
      • Fixed search in GitHub, MSDN and Stack Overflow in MetaEditor.
      We recommend all users to update Wine to the latest stable version. This will increase the platform performance and reliability.
    3. Added support for "Market To Limit" orders when trading on BORSA Istanbul. Such an order is initially executed as a market order. If liquidity is not enough, the remaining volume is added to the order book as a limit order with the last deal price.
    4. Fixed volatility chart display. Now, the chart is built in accordance with the expiry date selected on the options board.
    5. Fixed adding of trading instruments to the Market Depth via the quick search bar. If the symbol name has a space, this symbol will not be added to the list.


    1. Expanded possibilities for working with SQL databases. Queries now support a variety of statistical and mathematical functions.

      Statistical functions
      • mode
      • median (50th percentile)
      • percentile_25
      • percentile_75
      • percentile_90
      • percentile_95
      • percentile_99
      • stddev or stddev_samp — sample standard deviation
      • stddev_pop — population standard deviation
      • variance or var_samp — sample variance
      • var_pop — population variance

      Mathematical functions

        count(*) as book_count,
        cast(avg(parent) as integer) as mean,
        cast(median(parent) as integer) as median,
        mode(parent) as mode,
        percentile_90(parent) as p90,
        percentile_95(parent) as p95,
        percentile_99(parent) as p99
      from moz_bookmarks;
    2. Added new macros:

      • __COUNTER__ — increases by one on each call. Separate counters are provided when used in templates and macros.
      • __RANDOM__ — generates a random ulong number; it is an analogue of the MathRand function.

    3. Fixed operation of synchronous chart requests in cases when the chart symbol does not exist. Now, the functions return a relevant error instead of waiting indefinitely for a result. A situation with a non-existent symbol be caused by switching between trading accounts with different sets of trading instruments.
    4. Optimized and accelerated CopyTicks* functions.


    1. Changed order of profiling and debugging using historical data.

      Profiling now always runs in non-visual mode. Default debugging also runs in non-visual mode. The appropriate option can be enabled manually in MetaEditor settings:

    2. Added ability to profile services. The process is similar to other MQL5 programs.
    3. Fixed display of function names in the profiler report. Under certain conditions, the names could be specified as <unknown>.

    Documentation has been updated.

    26 February 2021
    MetaTrader 5 build 2815: Access to the Depth of Market from Python, revamped Debugger, and Profiler improvements


    1. Added ability to access Depth of Market data via the Python API.
      Three new functions allow quick obtaining of data for statistical calculations and machine learning tasks, which can be implemented using a plethora of out-of-the-box Python libraries.
      • market_book_add — subscribes the MetaTrader 5 terminal to receive events related to changes in the Depth of Market for the specified symbol.
      • market_book_get — returns a tuple from BookInfo containing the Depth of Market records for the specified symbol.
      • market_book_release — cancels MetaTrader 5 terminal subscription to events related to changes in the Depth of Market for the specified symbol.

    2. The maximum length of Push messages has been increased from 256 to 1024 characters. Now, you can send more information from your MQL5 programs on mobile devices.
    3. Added a preliminary version of the Task Manager, which can be called by pressing the F2 key.
      The Task Manager enables monitoring of resources consumed by the platform. You can view the amount of memory consumed by charts, CPU resources used by Expert Advisors and other performance metrics. If your platform performance slows down, you can easily detect and fix the problem.

    4. Enhanced Subscriptions service. A special indication has been added for symbols having delayed quotes:
      • Symbols in Market Watch are marked with a clock icon, and the delay value is displayed in the tooltip
      • Data delay notification is displayed on charts

    5. Fixed display of the Subscriptions list when there is no trading account connection.
    6. Fixed links in emails and newsletters. All links now open in the default browser. Previously, links opened only in Internet Explorer.
    7. Fixed connections from the WebRequest function to hosts with IPv6 addresses and Cloudflare protection.
    8. Improved functionality and responsiveness of the VPS service.
    9. Improved operation under Wine and MacOS/Crossover, including the version for macOS Big Sur with the M1 processor.


    1. Fixed error in the ArrayPrint function. The function could occasionally fail to print arrays.
    2. Optimized file operations performed by File* functions. Now, file reading and writing operations run much faster.
    3. Removed the restriction requiring the specification of size for the second, third and fourth dimensions of a dynamic array, when the array is used as a function parameter. This increases code reuse and flexibility.
      void func(int &arr[ ][ ][ ][ ])
    4.  Fixed ArrayBsearch function operation. The function could return an incorrect index of the found element during a binary search.


    1. More new features have become available in the revamped debugger.
      • Arrays are now displayed in the observation window in accordance with the sorting set by ArraySetAsSeries.
      • Added support for local static variables.
      • Fixed display of the specified array element value.
      • Fixed handling of 'static' class fields.
      • Other improvements for more accurate and reliable debugging.

    2. Added option "Enable optimizations in profiling".
      Code optimization mode can be disabled in order to include more details in the profiling report. Code speed without optimization can be several times slower, but this mode provides a wider code coverage. Please note that with optimization code bottlenecks can be imprecise.
      A milder profiling mode can be set by disabling the "Enable inlining in profiling".

      The optimization management option has also been added to project settings.
      • If optimization is disabled in the project, then the new option is ignored, and thus optimization will always be disabled for profiling (including inlining operations).
      • If optimization is enabled in the project, then the new option will be taken into account during profiling compilation.

    3. Added logging for debugging and profiling processes. Environment settings are logged at operation start; collected data statistics is logged at operation stop.
      MQL5 profiler    starting 'ExpertMACD.ex5' on history with parameters:
      MQL5 profiler       symbol: 'EURUSD'
      MQL5 profiler       period: 'H1'
      MQL5 profiler       date from: '2021.01.01'
      MQL5 profiler       date to: '2021.02.22'
      MQL5 profiler       ticks mode: 'every tick'
      MQL5 profiler       execution delay: 0 ms
      MQL5 profiler       deposit: 10000
      MQL5 profiler       currency: 'USD'
      MQL5 profiler       leverage: 1:100
      MQL5 profiler       profit in pips: NO
      MQL5 profiler    profile data received (4640 bytes)
      MQL5 profiler    758 total measurements, 0/0 errors, 470 kb of stack memory analyzed
      MQL5 profiler    7782 total function frames found (1929 mql5 code, 342 built-in, 1403 other, 4108 system)


    1. Fixed specification of non-trading hours in advanced testing settings.

    Updated documentation.
    15 January 2021
    MetaTrader 5 build 2755: Popup Prices window and Debugger improvements


    1.  Revised Popup Prices window which allows viewing financial symbol prices on any screen size.

      The window now supports multi-column presentation, enabling the efficient utilization of screen space. To switch the display mode, use the window properties dialog.

      Further improvements in this window are as follows:

      • Added column selection menu. The menu features the same symbol properties which are available in Market Watch.
      • Optimized operation with a large number of financial instruments. The window performance is now equally high for 10 and for 1000 instruments.
      • Added display of brief instrument information in a tooltip.
      • Fixed applying of color settings for displaying rising and falling prices.

    2. Added display of deals on the tick chart of the synthetic Market Depth.

      Synthetic Market Depth is used for the symbols, for which Level 2 prices are not provided. In this case, levels are built automatically, at distances equal to a price change step, starting from the best Bid and Ask prices. Now, if the last deal price and volume data is provided for a symbol, the relevant data is displayed on the tick chart. The information is displayed as circles:
      • Red circles show Sell transactions.
      • Blue circles show Buy transactions.
      • Green circles appear when the direction of the transaction is undefined.

      The larger the circle, the greater the volume of the transaction.

    3. Fixed calculation of Greeks in the options board. An error could occur if the option's underlying asset had a zero last deal price.
    4. We continue implementing the new "Subscriptions" service, which enables the provision of additional trading services. Recently, we have fixed the display of dependent subscriptions. Such subscriptions are used for bundled services.
    5. Improved platform operation under Wine.


    1. Added generation of ChartEvent events upon the release of the right and middle mouse buttons. This event can be utilized when creating graphical panels. To enable the events, disable the chart context menu via the CHART_CONTEXT_MENU property.
    2. Fixed a bug causing a significant error in the Sleep function waiting time.


    1. We have initiated the global update of the debugger. The window of observed expressions has been significantly improved. Now, it allows viewing the contents of arrays and objects as drop-down lists, as well as pointer values.

      To view an array or object, double-click on it in the observation window.

    2. Fixed freezing when opening some projects.

    Documentation has been updated.
    26 November 2020
    MetaTrader 5 build 2715: General improvements


    1. Fixed platform freezing when using the options board. Freezing could be caused by a zero tick size specified in trading instrument settings.
    2. Fixed UI display errors on HiDPI displays.


    1. Fixed string to time conversion by the StringToTime function. An error could occur when specifying time as "yyyymmdd [hhmiss]".
    2. Fixed operation of implicit copy operator for objects containing dynamic arrays. Now, the operation reduces the destination object size to the copied object size.
      struct MyStruct
        string Array[];
      void OnStart()
        MyStruct a1,a2;
      Earlier, the "a1" array size was equal to 3 after the function call. Now, the size will be 1.


    1. Updated rating calculation algorithm for MQL5 Cloud Network testing agents. The rating is now determined more accurately and is changed less frequently.

    Documentation has been updated.
    12 November 2020
    MetaTrader 5 Platform Build 2690: MetaEditor improvements


    1. Fixed display of the synthetic Market Depth feature. Previously, this feature could be unavailable for some symbols.

      Synthetic Market Depth is used for the symbols, for which Level 2 prices are not provided. In this case, levels are built automatically, at distances equal to a price change step, starting from the best Bid and Ask prices. This is a convenient tool for placing, modifying and deleting orders, quickly and with maximum clarity.


    1. Optimized and greatly accelerated access to Last prices from MQL5 programs, using the SymbolInfoTick function.
    2. Fixed resetting of Ichimoku Kinko Hyo indicator parameters from a dialog box.

    3. Fixed freezing of Copy* functions when history is not available for a trading instrument.
    4. More improvements within the total update of the code profiler. The following improvements have been implemented, in addition to the innovations presented in build 2650:
      • Improved data presentation
      • Shorter column names are now used in the report
      • Ability to save profiling reports to a file
      • Added display of a tooltip with a row number for functions in the report.


    1. Added ability to disable clipboard tracking and to clear clipboard history.

      The clipboard tracking function improves the source code usability by providing quick access to recently used data. Press Alt+V in any source code position, select any of the earlier copied lines from the menu, and the line will be inserted in the selected position.
      Use the appropriate toolbar command or editor settings to enable/disable tracking.

    2. Fixed calculation of some observed expressions during program debugging.


    1. Trading is now prohibited for Expert Advisors running in the Strategy Tester in the frame receiving mode.
    2. Fixed importing of optimization results in the Strategy Tester. An error could cause timeframe values to be imported incorrectly.

    Documentation has been updated.
    9 October 2020
    New MetaTrader 5 platform build 2650: Background chart loading and MQL5 code profiler improvements


    1. The Options tab features a new setting entitled "Preload chart data for open positions and orders".

      In order to save traffic, the trading platform downloads symbol price history only when the relevant data is requested, for example when the price chart is opened or when testing is launched. However, this may not always be convenient for actively used symbols. If you enable the new option, the charts of the symbols for which you have open positions or pending orders, will be updated in the background mode whenever you launch the platform. Thus, you will not have to wait for data download after chart opening, and the relevant data will be immediately available for analysis.

    2. Fixed generation of daily bars after weekends.
    3. Fixed chart updating. Charts could occasionally fail to update after the additional download of updated price data.
    4. Optimized updating of the account trading history cache. The optimization enables the reduction of data delays when using History* functions.
    5. Fixed display of the Comment column when displaying trading history as positions.
    6. Fixed display of the Signal subscription renewal button.


    1. More improvements within the total update of the code profiler. The following functions have been implemented in addition to the innovations presented in build 2615:

      Added new parameters
      We have previously announced the usage of the Sampling method for the new profiler. The profiler makes pauses in the MQL program operation (~1000 times per second) and collects statistics on how many pauses were performed in certain code segments. This also includes the analysis of call stacks to determine the share of each function in the total code operation time. After profiling, users receive statistics on how many times the operation was paused and how many times each of the functions appeared in the call stack:

      • Total CPU [unit,%] — how many times the function appeared in the call stack.
      • Self CPU [unit,%] — the number of "pauses" which occurred directly within the specified function. This variable is crucial in identifying bottlenecks: according to statistics, pauses occur more often where more processor time is required.

      Added ability to disable function inlining during profiling
      During the compilation of MQL programs, functions are inlined, i.e. the function code is added directly to the function call site. This enables significant performance acceleration. However, this procedure makes the profiling of functions difficult. On order to obtain a report on "pure" functions, you can disable inlining in the MetaEditor settings:

      Updated report design
      We have redesigned the profiling report and the presentation of profiling information in the source code window. The modernized design will be more familiar to Visual Studio users.

    2. Fixed CopyTicksRange function operation. The function could sometimes return incomplete data.
    3. New error code TRADE_RETCODE_HEDGE_PROHIBITED — opening of a position or placing of a pending order is not allowed because hedge positions are prohibited. The error is returned if a user tries to execute a trading operation in the case the hedging is disabled for the account and the user already has an opposite order or position for the same symbol.
    4. Removed the ability to call MessageBox when debugging indicators. MessageBox cannot be called from indicators because it suspends the thread execution for the whole time while waiting for the user's response.
    5. Optimized and significantly accelerated addition of trading instruments to the Market Watch using the SymbolSelect function.
    6. Fixed ArrayInsert function behavior for fixed-sized arrays. Now, the behavior corresponds to its description in the documentation: when elements are inserted, the size of the destination array does not change and the elements to the right of the insert position are shifted to the right (the last 'count' elements are "dropped off"), while the elements are copied from the source to the released space.


    1. Fixed working with custom trading condition settings during testing; the settings dialog has been revised.

      • Fixed calculation of custom commissions. To enable commissions, it is now enough to specify the symbol name rather than the entire path.
      • Rearranged tabs for more efficient operation.
      • Renamed the dialog and the option enabling custom settings.
      • Optimized column width in the settings tables.
      • When the "Use custom settings" option is disabled, all other settings in the dialog are deactivated. Previously, the settings remained editable, and users might mistakenly think the settings would be applied during testing.

    2. Fixed an occasional error related to the receiving of orders from the trade history by ticket.


    1. Added color scheme presets for the code editing window: light (default), dark and blue. You can customize the editor without having to configure the editor view manually.

      Additionally, it is now possible to customize the border color for the function tooltips.

    2. MetaEditor: All icons in the toolbars have been updated to support HiDPI monitors.

    Documentation has been updated.

    17 September 2020
    MetaTrader 5 build 2615: Fundamental analysis and complex criteria in the Strategy Tester


    1. Expanded fundamental analysis facilities.
      Added new trading instrument properties, which enable a more accurate categorization of symbols:
      • Sector — the sector of the economy which the asset belongs to, such as energy, finance, healthcare and others.
      • Industry — the industry type which the asset belongs to, such as sportswear, accessories, car manufacturing, restaurant business and others.
      • Country — the country of the company whose shares are traded on the stock exchange.
      Based on these properties, a separate system has been implemented in Market Watch, enabling efficient operations with symbols. Select a category from the menu, and all available instruments will be added to a list for in-depth analysis:

      Relevant properties have been added to contract specifications:

      Furthermore, fundamental data on trading symbols can now be opened directly from the platform. Links to the largest aggregators have been added to the Market Watch context menu:

      The availability of extended data is controlled by the broker. However, we have ensured the default availability of the advanced information for the maximum number of instruments. As soon as brokers update their servers to the new version, the appropriate country, sector and industry data will appear in your platforms.
    2. Improved Signals and Market showcases. Rental and subscription buttons have been added to the left-side panel:

      Further improvements concern the section design. This includes brighter button colors, larger MQL5 login buttons and other improvements.

    3. Fixed potential profit/loss calculation for Stop Loss and Take Profit chart levels.

    4. Fixed errors in the calculation of synthetic instruments. The errors could occasionally cause the platform to freeze at startup.
    5. Fixed display of built-in Fractals indicator values in the Data Window.
    6. All icons in the platform toolbars have been updated to support HiDPI monitors.
    7. Fixed position volume adjustment for copied trading signals. The adjustment operation could sometimes fail due to incorrectly applied stop levels, which caused the "invalid stops" error.
    8. Optimized price history rebuilding after relevant changes on the server.
    9. Fixed display of trade level tooltips on charts. In some cases, tooltips were shown on charts even if the display of trade levels was disabled.
    10. Fixed option "Show on Charts \ Auto Update" in the context menu of orders an d positions under the "Toolbox\ Trade" section. Now, if this option is unchecked, trading history display will be disabled for all open charts.


    1. Added MathClassify function. It determines the type of a real number and returns a result as a value from the new ENUM_FP_CLASS enumeration.
      ENUM_FP_CLASS  MathClassify(
         double  value      // real number
      The enumeration contains the following values:
      • FP_SUBNORMAL — a subnormal number which is closer to zero than the smallest representable normal number DBL_MIN — 2.2250738585072014e-308.
      • FP_NORMAL — a normal number in the range between 2.2250738585072014e-308 and 1.7976931348623158e+308.
      • FP_ZERO — a positive or a negative zero.
      • FP_INFINITE — a number which cannot be represented by the appropriate type, positive or negative infinity.
      • FP_NAN is not a number.

      Use the following code to check the real number validity:
         Print("value is not a valid number");
    2. Added symbol properties which can be obtained using SymbolInfoString functions:
      • SYMBOL_COUNTRY — the country of the company whose shares are traded on the stock exchange.
      • SYMBOL_SECTOR_NAME — the sector of the economy which the asset belongs to, such as energy, finance, healthcare and others.
      • SYMBOL_INDUSTRY_NAME — the industry which the asset belongs to, such as sportswear, accessories, car manufacturing, restaurant business and others.

      The properties are returned as a string.

      The sector and the industry which the instrument belongs to can be obtained as an enumeration value. This can be done by requesting the following properties using the SymbolInfoInteger function:
      The ENUM_SYMBOL_SECTOR and ENUM_SYMBOL_INDUSTRY enumerations have been added for working with these properties.

    3. A new memory management mechanism has been implemented in MQL5 programs. It enables up to 3 times faster memory allocation and avoids potential memory access errors.
    4. Optimized and accelerated operations with the account tick history via History* functions.
    5. Fixed WebRequest call from the OnDeinit entry point. In earlier versions, the function call could not be implemented in the case of an Expert Advisor stop.
    6. Fixed WebRequest function calls from services. Previously, a function call could fail after service restart.
    7. Added check for double type support on a device when using OpenCL. The float type cannot be used in financial calculations due to excessive rounding. Therefore, the platform explicitly requires double-support for calculations. If the double type is not supported, an appropriate message will be written to the platform log: device '<name>' does not support type 'double'. Previously, a common error message was shown in such cases.
    8. Fixed application of templates to a chart through the ChartApplyTemplate function.
    9. Fixed ChartSetInteger function call with the CHART_BRING_TO_TOP parameter.
    10. A new Conjugate method has been added to the built-in Alglib library. This method enables conjugate number calculation for complex numbers. The library is located at MQL5\Include\Math\Alglib.
    11. Completely revised code profiler. The new profiler operates with a higher accuracy and at a higher speed.
      • The analysis is now based on the code which is optimized similarly to the compilation of a program's release version. This enables a more accurate determination of code execution speed, as exactly the same code will be used during program execution.
      • The new profiler uses the "Sampling" profiling method. This lightweight and accurate method collects application performance statistics by collecting call stack data and by calculating performance at regular intervals.
      • Unlike the previous versions, the new profiler does not make any changes to the analyzed code. The previously used Instrumentation method added certain constructs to the code, which were used to measure the function speed. This could affect the final code speed.

      The development of the profiler will continue. Further improvements will become available in upcoming platform releases.


    1. Optimized operations with MQL5 Cloud Network. Fixed loading of Expert Advisors on agents.
    2. Added new optimization criterion "Complex Criterion max". This is an integral and complex measure of a test pass quality. It measures multiple parameters:
      • Number of Deals
      • Drawdown
      • Recovery Factor
      • Expected Payoff
      • Sharpe Ratio

      The highest value of one parameter (for example the profit) is not always the best option in terms of the complex analysis. The complex criterion gradually selects the best passes: firstly, by the number of deals, then by the Expected Payoff, Recovery Factor, and so on. The new option allows reception of the best optimization passes according to all parameters. Furthermore, you can select the optimal pass based on the desired parameter, such as the highest profit.

      Select the new criterion in the strategy tester settings and start optimization.

      The "Complex Criterion max" value will be displayed in a separate "Result" tab in optimization results. Passes can be sorted by this column. The new criterion supports color-coded lighting to visually highlight the best passes. Values below 20 are highlighted in red, and values above 80 are shown in dark green.

    3. Fixed calculation of custom commissions in the Strategy Tester.


    1. We have initiated the global revision of smart code management functions (IntelliSense).
      • Hints now show the full function signature in addition to its name.
      • The font for the hints is now set in accordance with MetaEditor settings.
      Further improvements will become available in upcoming platform releases.
    Updated documentation.

    24 July 2020
    MetaTrader 5 build 2560: Built-in learning system improvements


    1. In the previous platform update, we have presented a completely revised learning system. Further improvements have been implemented in the latest version:
      • The progress bar icon has become more visible
      • The text of some hints has been revised
      • Learning progress calculation has been fixed
      Complete all lessons to start using the platform capabilities to the maximum.

    2. Optimized and significantly accelerated processing of large tick streams (with more than tens of thousands of ticks per minute).
    3. Fixed errors in the calculation of price changes relative to the previous session close price. To view this variable, enable the "Daily Change" column in the Market Watch context menu.


    1. Optimized and accelerated access to numerical chart properties via the ChartGetInteger function.
    2. Fixed custom indicator search, when such an indicator is requested from an MQL5 program via the iCustom function.


    1. Added compilation of C/C++ programs in projects.


    1. Significantly optimized work of the MQL5 Cloud Network. Now, the Network can distribute tasks and return calculation results faster due to the improved agent search efficiency.

    Updated documentation.

    10 July 2020
    MetaTrader 5 build 2530: Sorting in Market Watch and advanced operations with optimization results


    1. A sorting option has been added to the Market Watch window:

      • Click on a column name to sort the list by required data, such as the symbol name, close price, daily change or other variables.
      • Use the new menu with the most popular sorting options. Sorting by the highest growth and fall based on a daily symbol price change can be useful when trading exchange instruments.

    2. Redesigned and improved built-in learning system.
      All interactive hints are grouped into various categories for easier navigation. The number of completed and remaining hints is shown for each category.

      Every hint is now provided with a checklist, indicating the key action which the user should execute in order to complete training.
      We have also revised the learning system design and fixed errors in the total progress calculation.

    3. Added automated calculation of a symbol's previous session close time and of its current session open time. If the appropriate data is not provided by the broker directly, the terminal will calculate the values based on the first and the last quotes in a session. The relevant information can be displayed in the Market Watch window: enable appropriate columns in the "Symbols" section or navigate to the "Details" section.

    4. Optimized and accelerated application of prices to open positions. When new ticks arrive in the terminal, prices, profit and margin requirements are updated faster.
    5. Fixed calculation of the built-in Stochastic Oscillator. An error could occur in the case where a limited number of bars was displayed on charts.


    1. Optimized and accelerated AccountInfo* function which provides access to trading account properties.
    2. Optimized and accelerated access to numerical chart properties via the ChartGetInteger function.


    1. The following context menu commands have been added to the code editing tabs for efficient operations with the MQL5 Storage:

      • Compare a working copy of a file with the current revision
      • Revert changes
      • View file change history

    2. Changed the highlighting of matching brackets. Now, highlighting is applied to brackets instead of the background. The highlighting is disabled by default. It can be enabled in editor settings.

    3. Improved search and replace functions:

      • If you select a text in the file and bring up the search box, the text will be automatically substituted in the "Find" field. If no text is selected, a text from the clipboard will be pasted in the "Find" field. If the clipboard is empty, the focus in the search box will be set to the "Find" field.
      • A similar behavior is implemented for the replace window: the selected text is inserted in the search field, and the cursor is moved to the "Replace with" field. Thus, you can immediately enter the required new text.
      • Search and replace results are now displayed in the log instead of the previously used separate dialog box. If the Toolbox window is enabled, the Journal tab will be automatically selected in it. Thus, you do not need to work with extra windows.

    4. Fixed search in the file comparison window when working with the MQL5 Storage.
    5. Added possibility to search and replace data in files connected to the current file via the #include directive.

      The new option enables faster operations with projects consisting of multiple files. For example, to replace a text in all files, you will not need to specify their directories manually. The editor can automatically find them through the #include directives.


    1. We have revised optimization criteria which include two variables, one of which is the balance. Now, the criteria only take into account the second variable and ignore the balance. The new optimization criteria are easier to analyze.

      • Balance + Maximum Profitability -> Maximum Profitability
      • Balance + Maximum Expected Payoff -> Maximum Expected Payoff
      • Balance + Minimum Drawdown -> Minimum Drawdown
      • Balance + Maximum Recovery Factor -> Maximum Recovery Factor
      • Balance + Maximum Sharpe Ratio -> Maximum Sharpe Ratio

    2. New quick commands in the "Optimization parameters" submenu, allow showing or hiding, of all input columns in the table with optimization results:

    3. Added coloring for the optimization results table and graph, for a more convenient visual analysis.
      The graph is colored with a green-to-red gradient, depending on the value of the optimization criterion. The following colors are used for the table:

      • Balance: values above the initial deposit are colored in blue, and those below the initial deposit are shown in red.
      • Profit: blue is used for values greater than zero, and red is used for values less than zero.
      • Expected Payoff: blue is used for values greater than zero, and red is used for values less than zero.
      • Drawdown: from green (0-5%) to red (greater than 30%).
      • Sharpe Ratio: from green (greater than 2) to red (less than 0).
      • Recovery Factor: from green (greater than 2) to red (less than 1).

    4. Filters have been added in the optimization results table. Use the filters to hide unsuccessful passes from the list:

      • Passes without trades
      • Loss-making passes
      • Passes with the drawdown greater than 50%
      • Passes with the Recovery Factor less than 1
      • Passes with the Sharpe Ratio less than 0.5

    5. Optimized work of the MQL5 Cloud Network. Now, when an optimization is launched for the same Expert Advisor, the network tries to use the same testing agents which were used during the previous optimization pass. This is because the required market environment, including the trading history, is already available for such agents.
    Updated documentation.