Release Notes: MetaTrader 4

MetaTrader 4 Forex Trading Platform

19 March 2021
MetaTrader 4 build 1330
The update fixes errors and improves the platform stability.
10 December 2020
MetaTrader 4 build 1320
This version provides error fixes and platform stability improvements. In particular, the update fixes an error in the optimization of data connections between client terminals and brokers' data centers.
26 November 2020
MetaTrader 4 build 1310
This version provides enhancements for built-in services, as well as error fixes and platform stability improvements.
24 July 2020
MetaTrader 4 build 1280
This version provides enhancements for built-in services, as well as error fixes and platform stability improvements.
24 January 2020
MetaTrader 4 build 1260
The update fixes errors and improves the platform stability.
15 September 2019
MetaTrader 4 build 1220
  1. Fixed occasional slowdown caused by operations with a large number of graphical objects from MQL4 programs.
  2. Fixed passing of non-constant string parameters to DLL functions from MQL4 programs.
  3. Fixed errors reported in crash logs.
9 September 2019
New MetaTrader 4 Platform versions

MetaTrader 4 build 1210:

  1. Optimized "Market" and "Signals" section. In the new version, the product and signal showcases run faster and thus provide a better browsing experience.
  2. Added support for "Market", "Signals" and "Search" in Wine. Linux and Mac OS users can now access the largest store of trading applications along with the copy trading service.
  3. Improved search for access points when connecting to broker servers.
  4. Updated and improved interface translations. We have revised each of the 38 available languages to provide traders with a seamless user experience.
  5. Fixed errors reported in crash logs.

MetaTrader 4 iPhone/iPad build 1195:

  1. Multiple improvements and fixes.
20 December 2018
MetaTrader 4 build 1170

The update fixes errors and improves the platform stability.

We remind you that support for older versions of operating systems, including Windows XP/2003/Vista, has been discontinued. The minimum acceptable OS version for the client terminal is Windows 7.
12 December 2018
MetaTrader 4 build 1160
  1. Changed MQL5 Storage operation protocol in MetaEditor

    To support shared projects, we have updated the protocol of operation with the MQL5 Storage. Therefore, you will need to perform a checkout of all data from the storage after the platform update. Data stored at the MQL5 Storage will not be lost or affected during the update. We recommend that you perform the Commit operation to send all local changes to the MQL5 Storage before updating.

  2. Fixed errors and improved the platform stability.
We remind you that support for older versions of operating systems, including Windows XP/2003/Vista, has been discontinued. The minimum acceptable OS version for the client terminal is Windows 7.
9 November 2018
MetaTrader 4 platform beta build 1145

MetaTrader 4 update will be released on November 9, 2018 in beta mode. The update fixes errors and improves the platform stability.

All traders are invited to join the new version test. To receive the update, connect to the MetaQuotes-Demo server located at The update will be installed via the LiveUpdate system.

The release build of the MetaTrader 4 platform will be issued after the test.

We remind you that support for older versions of operating systems, including Windows XP/2003/Vista, has been discontinued. The minimum acceptable OS version for the client terminal is Windows 7.
19 May 2017
MetaTrader 4 build 1090
The new version of MetaTrader 4 platform fixes some bugs in the operation of the client terminal.
12 May 2017
MetaTrader 4 build 1080

A month ago, Microsoft released a major update of their operating system Windows 10 Creators Update (version 1703). After installing this update, some users were unable to run MQL4 programs in their terminals. This issue has been fixed in the new MetaTrader 4 platform build 1080. Now, Expert Advisors and indicators will run on charts correctly, while recompilation using the updated MetaEditor is not required.

Support for MetaTrader 4 client terminal versions below 1065 will be discontinued on the 1st of October 2017. Unsupported terminal builds will not be able to connect to new server versions. We strongly recommend that you update your terminals in advance.

23 March 2017
MetaTrader 4 Platform build 1065

In the new version, an error has been fixed connected with the restart of Expert Advisors on charts after switching timeframes. Now, Expert Advisors do not stop, and are correctly re-initialized.

3 February 2017
MetaTrader 4 Platform build 1045

The release of MetaTrader 4 platform is connected with the release of Windows 10 Insider Preview build 15007. Due to security updates in the new Windows 10 system version, MetaTrader 4 client terminals could occasionally fail to start.

Install the new platform version in order to prepare for the upcoming Windows 10 update.

16 December 2016
MetaTrader 4 build 1031
We have fixed some bugs based on crash reports.
14 October 2016
MetaTrader 4 Android build 996
  1. Added chat enabling traders to chat with other members. Specify the desired user's login in a message recipient's section to send a message directly to this user's mobile device.

  2. Added ability to edit indicator levels.
  3. Added interface translations into Indonesian and Hindi.
30 August 2016
MetaTrader 4 iOS build 975
  1. A new design of messages. Now, messages and push notifications from the desktop platform are displayed as chats similar to popular mobile messengers. 
  2. Now it is possible to switch to one of the 22 available languages straight from the platform. Choose any UI language from the "Settings" section ("About" in iPad) without changing the language setting of your device.
18 August 2016
MetaTrader 4 build 1010: New opportunities of MQL4


  1. Fixed an error which prevented execution of MQL4 applications in terminals running in 32-bit Windows 10, build 1607.
  2. Fixed occasional incorrect display of the Search and Chat buttons.
  3. Fixed occasional duplicate welcome-emails delivered to the terminal when opening a demo account.


  1. Added new 'void *' pointers to enable users to create abstract collections of objects. A pointer to an object of any class can be saved to this type of variable. It is recommended to use the operator dynamic_cast<class name *>(void * pointer) in order to cast back. If conversion is not possible, the result is NULL.
    class CFoo { };
    class CBar { };
    //| Script program start function                                    |
    void OnStart()
       void *vptr[2];
       vptr[0]=new CFoo();
       vptr[1]=new CBar();
       for(int i=0;i<ArraySize(vptr);i++)
          if(dynamic_cast<CFoo *>(vptr[i])!=NULL)
             Print("CFoo * object at index ",i);
          if(dynamic_cast<CBar *>(vptr[i])!=NULL)
             Print("CBar * object at index ",i);
       CFoo *fptr=vptr[1];  // Will return an error while casting pointers, vptr[1] is not an object of CFoo
  2.  Added support for the operator [ ] for strings. The operator enables users to get a symbol from a string by index. If the specified index is outside the string, the result is 0.
    string text="Hello";
    ushort symb=text[0];  // Will return the code of symbol 'H'
  3.  The CopyXXX function that copies history and tick data has become faster.
  4.  Fixed deletion of multiple graphical objects with the specified prefix using the ObjectDeleteAll function. Before the update, the remaining objects could be displayed in a wrong order after the execution of this function.
  5.  Fixed occasional incorrect order of graphical objects display after changing the timeframe.


  1. During terminal synchronization with the virtual server, charts without Expert Advisors are ignored now, even if custom indicators are running on these charts. If you need to migrate a custom indicator, run it on the chart of an "empty" Expert Advisor that does not perform operations. Such an Expert Advisor can be easily generated using the MQL4 Wizard in MetaEditor by selecting "Expert Advisor: template". This update is to ensure that indicators are migrated on purpose.
  2. You can now synchronize Expert Advisors and custom indicators whose names contain non-Latin characters (e.g. Cyrillic or Chinese characters).

Fixed errors reported in crash logs.

1 July 2016
MetaTrader 4 build 985: Built-in Chat


  1. New built-in chat. Now, traders can chat with their friends and fellow traders straight from the platform. The chat maintains the history of messages, as well as it features the number of unread messages. To start a chat, log in to your MQL5 account straight from the chat window or via the platform settings: 'Tools' -> 'Options' -> 'Community'.

  2. Optimized reading of the internal mail database when the terminal starts.


  1. Added an option to show/hide the price and time scale on any chart. In earlier versions, an MQL4 application could only change the CHART_SHOW_PRICE_SCALE and CHART_SHOW_DATE_SCALE properties of the chart, on which it was running.
  2. New MODE_CLOSEBY_ALLOWED property for the MarketInfo function. TRUE means that the Close By operation (closing by a counter position) is allowed for the specified financial symbol.
  3. Fixed passing of a string parameter to the OnChartEvent entry point. The error could cause a false value of the parameter. OnChartEvent allows tracking chart events: keypress events, mouse movement and more.
  4. Implemented faster deletion of multiple graphical objects using the ObjectsDeleteAll function.


  1. Improved automated matching of currency pairs containing RUB and RUR.


  1. Fixed stamping of graphical object creation time during testing. In earlier versions, the current terminal time was added instead of testing time.


  1. Fixed setting of focus in the replace text field when opening a replace dialog box.
  2. Fixed replacing of multiple text occurrences when you search upwards starting from the current positions.
Fixed errors reported in crash logs.

3 June 2016
MetaTrader 4 Build 970: Simplified demo account opening and expanded MQL4 features


  1. Simplified demo account creation dialog. You do not have to fill the large form any more. Simply specify basic data and select trading parameters: account type, deposit and leverage.


  1. The format of the executable EX4 files has changed to implement the new features of the MQL4 language. All EX4 applications compiled in previous builds of MetaEditor will work properly after the update. Thus, the upward compatibility is fully preserved.

    EX4 programs compiled in build 970 and above will not run in old terminal builds - backward compatibility is not supported.

  2. Added support for abstract classes and pure virtual functions.

    Abstract classes are used for creating generic entities, that you expect to use for creating more specific derived classes. An abstract class can only be used as the base class for some other class, that is why it is impossible to create an object of the abstract class type.

    A class which contains at least one pure virtual function in it is abstract. Therefore, classes derived from the abstract class must implement all its pure virtual functions, otherwise they will also be abstract classes.

    A virtual function is declared as "pure" by using the pure-specifier syntax. Consider the example of the CAnimal class, which is only created to provide common functions – the objects of the CAnimal type are too general for practical use. Thus, CAnimal is a good example for an abstract class:
    class CAnimal
                          CAnimal();     // Constructor
       virtual void       Sound() = 0;   // A pure virtual function
       double             m_legs_count;  // How many feet the animal has
    Here Sound() is a pure virtual function, because it is declared with the specifier of the pure virtual function PURE (=0).

    Pure virtual functions are only the virtual functions for which the PURE specifier is set: (=NULL) or (=0). Example of abstract class declaration and use:
    class CAnimal
       virtual void       Sound()=NULL;   // PURE method, should be overridden in the derived class, CAnimal is now abstract and cannot be created
    //--- Derived from an abstract class
    class CCat : public CAnimal
      virtual void        Sound() { Print("Myau"); } // PURE is overridden, CCat is not abstract and can be created
    //--- examples of wrong use
    new CAnimal;         // Error of 'CAnimal' - the compiler returns the "cannot instantiate abstract class" error
    CAnimal some_animal; // Error of 'CAnimal' - the compiler returns the "cannot instantiate abstract class" error
    //--- examples of correct use
    new CCat;  // no error - the CCat class is not abstract
    CCat cat;  // no error - the CCat class is not abstract
    Restrictions on abstract classes
    If the constructor for an abstract class calls a pure virtual function (either directly or indirectly), the result is undefined.
    //| An abstract base class                                           |
    class CAnimal
       //--- a pure virtual function
       virtual void      Sound(void)=NULL;
       //--- function
       void              CallSound(void) { Sound(); }
       //--- constructor
         //--- an explicit call of the virtual method
         //--- an implicit call (using a third function)
         //--- a constructor and/or destructor always calls its own functions,
         //--- even if they are virtual and overridden by a called function in a derived class
         //--- if the called function is purely virtual
         //--- the call causes the "pure virtual function call" critical execution error
    However, constructors and destructors for abstract classes can call other member functions.

  3. Added support for pointers to functions to simplify the arrangement of event models.

    To declare a pointer to a function, specify the "pointer to a function" type, for example:
    typedef int (*TFunc)(int,int);
    Now, TFunc is a type, and it is possible to declare the variable pointer to the function:
    TFunc func_ptr;
    The func_ptr variable may store the pointer to function to declare it later:
    int sub(int x,int y) { return(x-y); }
    int add(int x,int y) { return(x+y); }
    int neg(int x)       { return(~x);  }
    func_ptr=neg;           // error: neg is not of  int (int,int) type
    Print(func_ptr(10));    // error: there should be two parameters
    Pointers to functions can be stored and passed as parameters. You cannot get a pointer to a non-static class method.

  4. Added TERMINAL_SCREEN_DPI value to the ENUM_TERMINAL_INFO_INTEGER client terminal property enumeration — data display resolution is measured in dots per inch (DPI). Knowledge of this parameter allows specifying the size of graphical objects, so that they look the same on monitors with different resolution.
  5. Added TERMINAL_PING_LAST value to the ENUM_TERMINAL_INFO_INTEGER client terminal properties — the last known value of a ping to a trade server in microseconds. One second comprises of one million microseconds.
  6. DRAW_NONE buffers (no graphical constructions) now do not participate in a chart window minimum and maximum calculations in custom indicators.
  7. Fixed generating events related to mouse movement and mouse button pressing over objects of OBJ_LABEL and OBJ_TEXT types. Previously, the events were generated incorrectly if they were within other objects of OBJ_RECTANGLE_LABEL and OBJ_RECTANGLE types.
  8. Fixed plotting zero-height histogram bars in custom indicators. Previously, such bars were not displayed, while now they have a height of 1 pixel.


  1. Fixed searching for trading symbols when comparing available trading symbols of a signal provider and subscriber.


  1. Fixed use of spread in fxt file if the current spread is used in the test settings.


  1. Fixed a few Market showcase display errors.


  1. Fixed search of words by files in "Match Whole Word Only" mode.
  2. Added moving to a file by double-clicking on the necessary file's compilation result line.
  3. Fixed display of some control elements in Windows XP.

Fixed errors reported in crash logs.