What's new in MetaTrader 5

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

15 July 2016
MetaTrader 5 Platform build 1375: Time & Sales and access to ticks during testing

Terminal

  1. The Time & Sales feature has been added to the Market Depth.




    What is Time & Sales?
    The Time & Sales feature provides the price and time of every trade executed on the exchange. Information on every trade includes the time when the trade was executed, its direction (buying or selling), as well as the price and volume of the trade. For easy visual analysis, different colors are used to indicate different trade directions: blue is used for Buy trades, pink for Sell trades, green means undefined direction. Trade volumes are additionally displayed in a histogram.

    How Time & Sales can help you understand the market
    The Time & Sales feature provides tools for a more detailed market analysis. The trade direction suggests who has initiated the trade: the buyer or the seller. The volume of trades allows traders to understand the behavior of market participants: whether the trades are performed by large or small market players, as well as estimate the activity of the players. The trade execution speed and the volume of trades on various price levels help traders to estimate the importance of the levels.

    How to use Time & Sales data
    In addition to the visual analysis of the table, you can save the details of trades to a CSV file. Further, they can be analyzed using any other software, such as MS Excel. The file contains comma-separated data:
    Time,Bid,Ask,Last,Volume,Type
    2016.07.06 16:05:04.305,89360,89370,89370,4,Buy
    2016.07.06 16:05:04.422,89360,89370,89370,2,Buy
    2016.07.06 16:05:04.422,89360,89370,89370,10,Buy
    2016.07.06 16:05:04.669,89360,89370,89370,1,Buy
    2016.07.06 16:05:05.968,89360,89370,89360,7,Sell
    If you want to save data to a file, open the context menu:



    The broker's platform should be updated to version 1375, in order to enable proper detection of trade direction.
  2. The time between the arrival of a new tick/Market depth change and call of OnTick and OnCalculate has been significantly reduced. Also the time between the arrival of a trade state change event and call of OnTick and OnCalculate has been reduced. Now MQL5 programs provide a faster response to market events.
  3. Trade requests are now sent faster when extended authentication with SSL certificates is used.
  4. User interface translation into Persian has been updated.
  5. Fixed display of SL/TP setting commands in the context menu of the chart when working in the hedging mode.

Tester

  1. A new tester feature allows requesting tick history while testing using the CopyTicks function. In earlier versions, access to ticks was not available in the Strategy Tester.

    • In the "Every tick" mode, the function will return the history of generated ticks. It is possible to request up to 128,000 last ticks.
    • In the "Every tick based on real ticks" mode, the function will return the history of real ticks. The depth of the requested data depends on the availability of history data. However, note that last 128,000 ticks are cached in the Strategy Tester, and the request will be performed quickly. A deeper history is requested from a hard disk, so the request execution can take much more time.
    • The function will not work in the modes "Open price only" and "1 minute OHLC", because tick history is not created in these modes.

  2. Added support for milliseconds. In previous versions, the time quantum in the Strategy Tester was equal to one second.

    • Now the EventSetMillisecondTimer and Sleep functions are more accurate in the Tester.
    • The accuracy of tick feeding during multi-currency EA testing has been increased. In earlier versions, if one second contained multiple ticks (i.e. the tick volume of a one-minute bars exceeded 60), the same time was set for all these ticks. It does not matter when testing single-currency Expert Advisor, because ticks are sequentially passed to the Expert Advisor. However, when you test an Expert Advisor on multiple pairs, it is important to know the pair, from which the tick has arrived first. In earlier versions, ticks of each symbol were passed to the Expert Advisor sequentially: first, all the ticks within one second for one symbol, then all the ticks for another symbol. Now they are sent taking into account milliseconds.

      When real ticks are used in testing, milliseconds are taken from the source tick data. When ticks are generated, milliseconds are set in accordance with the tick volume. For example, if 3 ticks fit within one second, their millisecond time will be equal to 000, 333 and 666.

  3. In the "Open prices only" and "1 minute OHLC" modes, pending and SL/TP orders are now executed at the requested price, not the current price at the time of execution. The algorithm of execution at market prices used in accurate modes (every tick and real ticks), is not suitable for less accurate modes. In some modes intermediate ticks are not generated, therefore the difference between the requested order price and the current price (Open or OHLC) can be significant. Execution of orders at the requested price in the "Open prices only" and "1 minute OHLC" provides more accurate testing results.

  4. Added support for forward testing in the visual mode. Now two separate windows are opened for back and forward testing, allowing users to compare Expert Advisor performance on different time intervals.




    The forward testing window is only opened after testing on the main period is completed.

  5. Now, instead of the margin level, the load on the deposit is displayed on the main testing chart. The load is calculated as the margin/equity ratio.


  6. Fixed calculation of commission as a percentage per annum during testing.

  7. Fixed calculation and display of balance on the chart generated in the process of testing.

MQL5

  1. The behavior of the OrderSend function during order placing, modification, and canceling has changed. The changes only apply to orders sent to external trading systems. In earlier version, OrderSend function control was returned after the order has been successfully placed (handled) on the broker's server. Now the control is only returned after the broker's server receives a notification from an external trading system notifying that the order has been successfully placed in that system.

    The below diagram shows the previous (red arrow) and current behavior of the function:




  2. A new field in the MqlTradeResult structure: retcode_external - an error code in the external trading system. The use and types of these errors depend on the broker and the external trading system, to which trading operations are sent. For example, retcode_external values filled by Moscow Exchange differ from those returned by DGCX.

  3. New properties in the ENUM_CHART_PROPERTY_STRING enumeration: CHART_EXPERT_NAME and CHART_SCRIPT_NAME. Now, the ChartGetString function allows users to find out the name of an Expert Advisor and/or script attached to a chart which is defined by the chart_id parameter.

Signals

  1. Fixed occasional error, due to which copying of the 'close by' operation could fail.
  2. Improved automated matching of currency pairs containing RUB and RUR.

Market

  1. Fixed sorting by product category.

MetaEditor

  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.


Updated documentation.
5 July 2016
MetaTrader 5 Web Platform: Official release

After two months of public testing, the web version of the multi-asset MetaTrader 5 platform has been officially released. It allows trading Forex and exchanges from any browser and operating system. Only Internet connection is necessary, no software installation is required.

The application combines the key advantages of the desktop platform (high speed, support for multiple markets and expanded trading functions) with the convenience of the cross-platform nature of the web terminal. The key feature of the release version is the depth of market, which was not present in the beta version.

The web platform allows traders to perform technical analysis and trading operations just like in the desktop version. The web platform provides the following features:

  • Netting and hedging position accounting systems
  • 31 technical indicators
  • 23 analytical objects
  • One-click trading and full set of trading orders
  • Interface in 41 languages
13 May 2016
MetaTrader 5 Platform build 1340: Convenient transfer of certificates to mobile devices and Strategy Tester improvements

Terminal

  1. Now certificates used for the advanced security connection can be conveniently transfered from the desktop platform to mobile terminals.

    The trading platform supports extended authentication by protecting a trade account using an SSL certificate in addition to a password. The certificate is a file that is individually generated for an account on the trade server. This file is unique, and account connection is not possible without the certificate.

    In the earlier platform versions, any certificate requested and generated from the desktop terminal needed to be manually copied and installed on the device to enable use of the trading account from the MetaTrader 5 Mobile for iPhone/iPad or Android. Now, certificates can be conveniently transfered.

    The Process of Certificate Transfer
    A certificate is transfered via a trade server:

    • A certificate is first encrypted on the desktop terminal: the account owner sets the password for certificate encryption using the secure AES-256 algorithm. This password is only know to the user, while it is not sent to the server.
    • Further, the encrypted certificate is sent to the trade server, where it is stored until the mobile terminal receives it, but no more than one hour.
    • To receive the certificate on a mobile device, the user must connect to the trading account from the mobile terminal. After connecting, the user is prompted to import the certificate. To proceed with the import, the user needs to specify the password that was used for the certificate encryption on the desktop terminal.

    Certificate transfer process is secure: the trade server is only used as an intermediate storage, while the certificate is encrypted on the client's side. The certificate password is not transmitted to or stored on the trade server.

    How to Transfer a Certificate
    Connect to your account from the desktop terminal and select "Transfer Certificate" in its context menu:



    Enter the master password of the account to confirm that it belongs to you. Next, set a password to protect the certificate before sending it to the server. Set a password that has at least 8 digits.

    After successfully sending the certificate to the server, open the mobile terminal and connect to your account. You will immediately be prompted to import the certificate. Confirm and enter the password that you have set from the desktop terminal.



    You can view the imported certificate in the "About — Certificates" section.
    Updated MetaTrader 5 Platforms for iPhone/iPad and Android supporting certificate transfer will be released soon.

Tester

  1. An updated algorithm for the execution of pending orders, as well as SL ans TP, which provides more accurate testing conditions. Advanced options of visual testing.

    What's New for Exchange Instruments
    In the real market, charts of exchange-traded instruments are generated based on Last price information (the price of the last executed deal). Stop Orders also trigger at the Last price. Limit orders trigger at Bid and Ask prices. All types of orders are always executed at the current market Bid/Ask prices. The Strategy Tester has been updated and now better emulates real market conditions:
      Before
    After
    Triggering Bid/Ask for all types of Pending Orders and SL/TP
    Bid/Ask for Limit Orders
    Last for Stop, Stop-Limit and SL/TP orders
    Execution The price specified in the order for all types of Pending Orders and SL/TP
    Bid/Ask at the time of order triggering for all types of Pending Orders and SL/TP

    Let us consider an example of the Si-6.16 symbol. A new Buy Stop order with the trigger price = 72580 is set while the current prices are: Bid=72570, Ask=72572, Last=72552. New current prices are received in a price stream:

    • Bid=72588
    • Ask=72590
    • Last=72580


    A trigger for Stop-Orders of exchange instruments is the Last price. So the Last price=72580 received in the stream activates the Buy Stop order. In the earlier versions, the same price would be used to execute this order. This behavior is incorrect, because there is no Ask=72580 in the market to execute the Buy transaction.


    The current Ask=72590 is used in the updated tester version, so the Buy Stop order is executed at this price. The new trade execution algorithm in the Tester is closer to real market conditions. The trade operation would be executed at a non-market price when using the previous algorithm, which would lead to inaccurate testing results.

    What's New for Other Instruments
    The algorithm has not changed for other instruments: Bid/Ask prices are used for all types of pending orders, as well as for SL and TP. However, the execution mode has changed: in earlier versions, orders were executed at the price specified in the order. Now market Bid and Ask prices as of the time of order activation are used.

    What's New in Visual Testing
    During visual testing, the bar's High Ask and Low Bid price lines are now shown in the tester. On such charts, it is more convenient to test Expert Advisors that trade exchange instruments, because bars of such instruments, as well as order triggering are based on the Last prices, while market operations are executed at Bid and Ask prices.



    New option on the visual testing chart: navigation to a specified date. Double-click on the chart and enter the desired date and time. It is also possible to navigate to any order or trade: double-click on the appropriate trading operation on the Trade, History or Operations tab.
  2. Expanded logging of information about price and tick history loaded before testing start. The log now contains information about the completion of history loading, as well as the amount of data downloaded and time spent:
    2016.05.10 12:47:53    Core 1    5.10 Mb of history processed in 0:00.842
    2016.05.10 12:47:53    Core 1    GBPUSD: history synchronization completed [5225 Kb]

MQL5

  1. Fixed behavior of the CopyTicks function: it could return fewer ticks than was requested.
  2. Fixed generation of template functions.
  3. Updated documentation.

Fixed errors reported in crash logs.

12 May 2016
MetaTrader 5 Web Platform: Now available for beta testing

The beta version of the MetaTrader 5 Web Platform has been released. The new product combines convenience and cross-platform nature of the web terminal with the advantages of the desktop version of MetaTrader 5 – speed, support for multiple markets, and expanded trading functions.

The MetaTrader 5 web platform is available on the MQL5.community, and it allows traders to perform trading operation on financial markets from any browser and any operating system, including Windows, Mac, and Linux. You only need to have an Internet connection. No additional software is required.

The following features are available in the beta version:

  • Hedging system
  • 30 technical indicators
  • 23 analytical objects
  • Full set of MetaTrader 5 trading orders
  • Interface in 41 languages
The release of the beta version aims to provide global public testing and to allow traders to evaluate the new capabilities.
22 April 2016
MetaTrader 5 build 1325: Hedging option and testing on real ticks

Terminal

  1. We have added the second accounting system — hedging, which expands the possibilities of retail Forex traders. Now, it is possible to have multiple positions per symbol, including oppositely directed ones. This paves the way to implementing trading strategies based on the so-called "locking" — if the price moves against a trader, they can open a position in the opposite direction.

    Since the new system is similar to the one used in MetaTrader 4, it will be familiar to traders. At the same time, traders will be able to enjoy all the advantages of the fifth platform version — filling orders using multiple deals (including partial fills), multicurrency and multithreaded tester with support for MQL5 Cloud Network, and much more.

    Now, you can use one account to trade the markets that adhere to the netting system and allow having only one position per instrument, and use another account in the same platform to trade Forex and apply hedging.

    Opening a hedge account and viewing position accounting type
    A position accounting system is set at an account level and displayed in the terminal window header and the Journal:



    To open a demo account with hedging, enable the appropriate option:




    Netting system
    With this system, you can have only one common position for a symbol at the same time:

    • If there is an open position for a symbol, executing a deal in the same direction increases the volume of this position.
    • If a deal is executed in the opposite direction, the volume of the existing position can be decreased, the position can be closed (when the deal volume is equal to the position volume) or reversed (if the volume of the opposite deal is greater than the current position).

    It does not matter, what has caused the opposite deal — an executed market order or a triggered pending order.

    The below example shows execution of two EURUSD Buy deals 0.5 lots each:


    Execution of both deals resulted in one common position of 1 lot.

    Hedging system
    With this system, you can have multiple open positions of one and the same symbol, including opposite position.

    If you have an open position for a symbol, and execute a new deal (or a pending order triggers), a new position is additionally opened. Your current position does not change.

    The below example shows execution of two EURUSD Buy deals 0.5 lots each:


    Execution of these deals resulted in opening two separate positions.

    New trade operation type - Close By
    The new trade operation type has been added for hedging accounts — closing a position by an opposite one. This operation allows closing two oppositely directed positions at a single symbol. If the opposite positions have different numbers of lots, only one order of the two remains open. Its volume will be equal to the difference of lots of the closed positions, while the position direction and open price will match (by volume) the greater of the closed positions.

    Compared with a single closure of the two positions, the closing by an opposite position allows traders to save one spread:

    • In case of a single closing, traders have to pay a spread twice: when closing a buy position at a lower price (Bid) and closing a sell position at a higher one (Ask).
    • When using an opposite position, an open price of the second position is used to close the first one, while an open price of the first position is used to close the second one.


    In the latter case, a "close by" order is placed. Tickets of closed positions are specified in its comment. A pair of opposite positions is closed by two "out by" deals. Total profit/loss resulting from closing the both positions is specified only in one deal.


  2. In addition to hedging support, the new platform version provides wider opportunities for migrating accounts from MetaTrader 4. Now, brokers can automatically transfer accounts to MetaTrader 5, including all operations: open and pending orders, and complete trading history.

    A welcome dialog appears when first connecting to the account migrated from MetaTrader 4. Data transmission is securely encrypted during migration. To get started, specify the password of your account that you used in MetaTrader 4, and then set a new password.



    Once connected, you will be able to continue using your account, just as if it has been opened in MetaTrader 5. The complete history of all trades from MetaTrader 4 is automatically added to the new account.

    The tickets of orders and positions (including history orders) are not preserved during import, because one history record from MetaTrader 4 can be imported as up to 4 history operations in MetaTrader 5. New tickets are assigned to all trading records.

    The account numbers can be preserved or replaced depending on how the broker imports them.

  3. Added the Chat. Now, you can communicate with your MQL5.community friends and colleagues. The chat displays all personal messages from your MQL5 account. To start communicating, log in to your account directly from the chat window or via the platform settings: Tools -> Options -> Community.




  4. Simplified demo account creation dialog, added ability to create hedge accounts. You do not have to fill the large form any more. Simply specify basic data and select trading parameters: account type, deposit, leverage, and hedging ability.



  5. Added automatic allocation of a demo account for quick start. If the platform has no accounts yet, a demo account on the first available trade server is allocated during the launch. After successful opening, connection to the account is established immediately.

  6. Now, each position has a ticket — a unique number. It usually matches the ticket of an order used to open the position except when the ticket is changed as a result of service operations on the server, for example, when charging swaps with position re-opening. A ticket is assigned automatically to all available positions after the terminal update.



  7. Fixed setting Stop Loss and Take Profit levels when placing a market order leading to a position reversal. Until recently, no appropriate levels were set for a new position.
  8. Fixed displaying prices with four and more decimal places on the one-click trading panel elements.
  9. Fixed displaying news in the print preview window.
  10. Fixed tick chart display.
  11. Fixed opening the Market Depth after the terminal emergency shutdown.
  12. Added a check if market orders are allowed when displaying one-click trading panel control elements.
  13. Optimized profit and margin calculation in case of a large number of open orders and positions.
  14. Added translation of the user interface into Malay.
  15. Fully revised the user manual. New design, interactive screenshots and embedded videos — learn trading in MetaTrader 5 with maximum convenience:



  16. Fixed display of graphical objects in the "Chart on foreground" mode.

Tester

  1. Added ability to test trading robots and technical indicators in real tick history.

    Testing and optimization on real ticks are as close to real conditions as possible. Instead of generated ticks based on minute data, it is possible to use real ticks accumulated by a broker. These are ticks from exchanges and liquidity providers.

    To start testing or optimization in real ticks, select the appropriate mode in the strategy tester:



    Tick data has greater size compared to minute one. Downloading it may take quite a long time during the first test. Downloaded tick data is stored by months in TKC files in \bases\[trade server name]\ticks\[symbol name]\.

    Testing on real ticks
    When testing on real ticks, a spread may change within a minute bar, whereas when generating ticks within a minute, a spread fixed in the appropriate bar is used.

    If the Market Depth is displayed for a symbol, the bars are built strictly according to the last executed trade price (Last). Otherwise, the tester first attempts to build the bars by Last prices, and in case of their absence, uses Bid ones. OnTick event is triggered on all ticks regardless of whether the Last price is present or not.

    Please note that trading operations are always performed by Bid and Ask prices even if the chart is built by Last prices. For example, if an Expert Advisor using only bar open prices for trading (i.e., the built-in Moving Average) receives a signal at Last price, it performs a trade at another price (Bid or Ask depending on the direction). If "Every tick" mode is used, the bars are built by Bid prices, while trades are performed by Bid and Ask ones. The Ask price is calculated as Bid + fixed spread of a corresponding minute bar.

    If a symbol history has a minute bar with no tick data for it, the tester generates ticks in the "Every tick" mode. This allows testing the EA on a certain period in case a broker's tick data is insufficient. If a symbol history has no minute bar but the appropriate tick data for the minute is present, these ticks are ignored. The minute data is considered more reliable.

    Testing on real ticks in the MQL5 Cloud Network
    Testing on real ticks is available not only on local and remote agents, but also through the MQL5 Cloud Network. Optimization of a strategy that could take months, can be completed in a few hours using the computing power of thousands of computers.

    To test a strategy using the MQL5 Cloud Network, enable the use of cloud agents:



    Tests on real ticks using the MQL5 Cloud Network can consume a lot of data. This can significantly affect the payment for the use of the network power.
  2. Fixed an error that hindered the calculation of commission on several trading symbol types.
  3. Fixed filling Expert field for trading orders resulting from SL/TP activation according to the Expert field of the corresponding position. Previously, it was not filled.
  4. Fixed switching to usual and forward optimization results' tabs.
  5. Fixed calculation and display of the "Envelopes" indicator.
  6. Optimized visual testing.
  7. Optimized profit and margin calculation in case of a large number of open orders and positions.
  8. Optimized trading operations during high-frequency trading.
  9. Now, history synchronization is not performed if a request for non-critical symbol's properties (not requiring the current quotes) has been made. For example, SYMBOL_SELECT, SYMBOL_DIGITS, SYMBOL_SPREAD_FLOAT, SYMBOL_TRADE_CALC_MODE, SYMBOL_TRADE_MODE, SYMBOL_TRADE_STOPS_LEVEL, SYMBOL_TRADE_FREEZE_LEVEL, SYMBOL_TRADE_EXEMODE, etc. Previously, the non-critical symbol history was synchronized at any request for its property.
  10. Fixed calculation of swaps as a percentage per annum.

MQL5

  1. The format of the executable EX5 files has changed to implement the new features of the MQL5 language and the new hedging option in MetaTrader 5. All EX5 applications compiled in previous builds of MetaEditor will work properly after the update, i.e. the upward compatibility is fully preserved.

    EX5 programs compiled in build 1325 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
      {
    public:
                          CAnimal();     // Constructor
       virtual void       Sound() = 0;   // A pure virtual function
    private:
       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
      {
    public:
       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
     {
    public:
      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
      {
    public:
       //--- a pure virtual function
       virtual void      Sound(void)=NULL;
       //--- function
       void              CallSound(void) { Sound(); }
       //--- constructor
       CAnimal()
        {
         //--- an explicit call of the virtual method
         Sound();
         //--- an implicit call (using a third function)
         CallSound();
         //--- 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 function address 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=sub;
    Print(func_ptr(10,5));
    
    func_ptr=add;
    Print(func_ptr(10,5));
    
    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. MqlTradeRequest features two new fields:

    • position — position ticket. Fill it when changing and closing a position for its clear identification while trading in hedging mode. In the netting system, filling the field does not affect anything since positions are identified by a symbol name.
    • position_by — opposite position ticket. It is used when closing a position by an opposite one (opened at the same symbol but in the opposite direction). The ticket is used only in the hedging system.

  5. Added TRADE_ACTION_CLOSE_BY value to the ENUM_TRADE_REQUEST_ACTIONS enumeration of trading operation types — close a position by an opposite one. The ticket is used only in the hedging system.

  6. Added trading operation tickets to the enumerations of the appropriate order, deal, and position properties:

    • Added ORDER_TICKET property to ENUM_ORDER_PROPERTY_INTEGER — order ticket. Unique number assigned to each order.
    • Added DEAL_TICKET property to ENUM_DEAL_PROPERTY_INTEGER — deal ticket. Unique number assigned to each deal.
    • Added POSITION_TICKET property to ENUM_POSITION_PROPERTY_INTEGER — position ticket. Unique number assigned to each newly opened position. It usually matches the ticket of an order used to open the position except when the ticket is changed as a result of service operations on the server, for example, when charging swaps with position re-opening. To find an order used to open a position, apply the POSITION_IDENTIFIER property. POSITION_TICKET value corresponds to MqlTradeRequest::position.

  7. Added ORDER_TYPE_CLOSE_BY value to the ENUM_ORDER_TYPE order type enumeration — close by order.
  8. Added ORDER_POSITION_BY_ID value to the ENUM_ORDER_PROPERTY_INTEGER order property enumeration — opposite position identifier for ORDER_TYPE_CLOSE_BY type orders.
  9. Added DEAL_ENTRY_OUT_BY value to the ENUM_DEAL_ENTRY deal direction enumeration — a deal is performed as a result of a close by operation.
  10. MqlTradeTransaction also features the two similar fields:

    • position — ticket of a position affected by transaction. It is filled for transactions related to handling market orders (TRADE_TRANSACTION_ORDER_* except TRADE_TRANSACTION_ORDER_ADD, where a position ticket is not assigned yet) and order history (TRADE_TRANSACTION_HISTORY_*).
    • position_by — opposite position ticket. It is used when closing a position by an opposite one (opened at the same symbol but in the opposite direction). It is filled only for orders closing a position by an opposite one (close by) and deals closing by an opposite one (out by).

  11. Added PositionGetTicket function — return a position ticket by an index in the list of open positions and automatically select that position for further work using the PositionGetDouble, PositionGetInteger, and PositionGetString functions.
    ulong  PositionGetTicket(
       int  index      // index in the list of positions
       );

  12. Added PositionSelectByTicket function — select an open position for further work by a specified ticket.
    bool  PositionSelectByTicket(
       ulong   ticket     // position ticket
       );

  13. Added SYMBOL_MARGIN_HEDGED value to the ENUM_SYMBOL_INFO_DOUBLE trade symbol property enumeration — size of a contract or margin for one lot of hedged positions (oppositely directed positions at one symbol).

    • If the initial margin (SYMBOL_MARGIN_INITIAL) is specified for a symbol, the hedged margin is specified as an absolute value (in monetary terms).
    • If the initial margin is not set (equal to 0), a contract size to be used in the margin calculation is specified in SYMBOL_MARGIN_HEDGED. The margin is calculated using the equation that corresponds to a trade symbol type (SYMBOL_TRADE_CALC_MODE).

    Margin calculation for hedged positions is described in details in the MetaTrader 5 trading platform Help.

  14. Added ACCOUNT_MARGIN_MODE value to the ENUM_ACCOUNT_INFO_INTEGER account property enumeration — mode of margin calculation for the current trading account:

    • ACCOUNT_MARGIN_MODE_RETAIL_NETTING — used for the over-the-counter market when accounting positions in the netting mode (one position per symbol). Margin calculation is based on a symbol type (SYMBOL_TRADE_CALC_MODE).
    • ACCOUNT_MARGIN_MODE_EXCHANGE — used on the exchange markets. Margin calculation is based on the discounts specified in symbol settings. Discounts are set by the broker, however they cannot be lower than the exchange set values.
    • ACCOUNT_MARGIN_MODE_RETAIL_HEDGING — used for the over-the-counter market with independent position accounting (hedging, there can be multiple positions at a single symbol). Margin calculation is based on a symbol type (SYMBOL_TRADE_CALC_MODE). The hedged margin size (SYMBOL_MARGIN_HEDGED) is also considered.

  15. 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.

  16. 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.

  17. Fixed return of the SendFTP function call result. Previously, FALSE was returned after a successful sending instead of TRUE.
  18. MQL5: Fixed an error in StringConcatenate function that occasionally caused "Access violation" execution error.
  19. Fixed a few errors occurred when working with template functions.
  20. Added ability to display lines exceeding 4000 characters for Print, Alert, and Comment functions.
  21. Fixed an error in ArrayCompare function that occurred when comparing an array to itself but with different initial position shift from the beginning.
  22. Added support for hedging to Standard Library:

    CPosition
    Added methods:

    • SelectByMagic — select position by a magic number and symbol for further work.
    • SelectByTicket — select position by a ticket for further work.

    CTrade
    Added methods:

    • RequestPosition — receive a position ticket.
    • RequestPositionBy — receive an opposite position ticket.
    • PositionCloseBy — close a position with the specified ticket by an opposite position.
    • SetMarginMode — set margin calculation mode according to the current account settings.

    Added overloading for the methods:

    • PositionClose — close position by ticket.
    • PositionModify — modify position by ticket.

    CAccountInfo
    Changed the methods:

    • MarginMode — receive margin calculation mode. Until recently, the method worked similarly to the new StopoutMode method.
    • MarginDescription — receive margin calculation mode as a string. Until recently, the method worked similarly to the new StopoutModeDescription method.

    Added methods:

    • StopoutMode — receive minimum margin level specification mode.
    • StopoutModeDescription — receive minimum margin level specification mode as a string.

    CExpert
    Added methods:

    • SelectPosition — select a position for further work.

  23. Added a few improvements to the Standard Library.
  24. Fixed unloading of DLLs.
  25. Added support for template class constructors.

Signals

  1. Fixed a few trading signals showcase display errors.

MetaEditor

  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.
Updated documentation.
1 April 2016
MetaTrader 5 Platform Build 1295

Terminal

  1. In order to expand possibilities of retail Forex traders, we have added the second accounting system — hedging. Now, it is possible to have multiple positions per symbol, including oppositely directed ones. This paves the way to implementing trading strategies based on the so-called "locking" — if the price moves against a trader, they can open a position in the opposite direction.

    Since the new system is similar to the one used in MetaTrader 4, it will be familiar to traders. At the same time, traders will be able to enjoy all the advantages of the fifth platform version — filling orders using multiple deals (including partial fills), multicurrency and multithreaded tester with support for MQL5 Cloud Network, and much more.

    Now, you can use one account to trade the markets that adhere to the netting system and allow having only one position per instrument, and use another account in the same platform to trade Forex and apply hedging.

    Opening a hedge account and viewing position accounting type
    A position accounting system is set at an account level and displayed in the terminal window header and the Journal:



    To open a demo account with hedging, enable the appropriate option:




    Netting system
    With this system, you can have only one common position for a symbol at the same time:

    • If there is an open position for a symbol, executing a deal in the same direction increases the volume of this position.
    • If a deal is executed in the opposite direction, the volume of the existing position can be decreased, the position can be closed (when the deal volume is equal to the position volume) or reversed (if the volume of the opposite deal is greater than the current position).


    It does not matter, what has caused the opposite deal — an executed market order or a triggered pending order.

    The below example shows execution of two EURUSD Buy deal 0.5 lots each:


    Execution of both deals resulted in one common position of 1 lot.

    Hedging system
    With this system, you can have multiple open positions of one and the same symbol, including opposite position.

    If you have an open position for a symbol, and execute a new deal (or a pending order triggers), a new position is additionally opened. Your current position does not change.

    The below example shows execution of two EURUSD Buy deal 0.5 lots each:


    Execution of these deals resulted in opening two separate positions.

    New trade operation type - Close By
    The new trade operation type has been added for hedging accounts — closing a position by an opposite one. This operation allows closing two oppositely directed positions at a single symbol. If the opposite positions have different numbers of lots, only one order of the two remains open. Its volume will be equal to the difference of lots of the closed positions, while the position direction and open price will match (by volume) the greater of the closed positions.

    Compared with a single closure of the two positions, the closing by an opposite position allows traders to save one spread:

    • In case of a single closing, traders have to pay a spread twice: when closing a buy position at a lower price (Bid) and closing a sell position at a higher one (Ask).
    • When using an opposite position, an open price of the second position is used to close the first one, while an open price of the first position is used to close the second one.


    In the latter case, a "close by" order is placed. Tickets of closed positions are specified in its comment. A pair of opposite positions is closed by two "out by" deals. Total profit/loss resulting from closing the both positions is specified only in one deal.



  2. Added ability to test trading robots and technical indicators in real tick history.

    Testing and optimization on real ticks are as close to real conditions as possible. Instead of generated ticks based on minute data, it is possible to use real ticks accumulated by a broker. These are ticks from exchanges and liquidity providers.

    To start testing or optimization in real ticks, select the appropriate mode in the strategy



    Tick data has greater size compared to minute one. Downloading it may take quite a long time during the first test. Downloaded tick data is stored by months in TKC files in \bases\[trade server name]\ticks\[symbol name]\.

    Testing on real ticks
    When testing on real ticks, a spread may change within a minute bar, whereas when generating ticks within a minute, a spread fixed in the appropriate bar is used.

    If the Market Depth is displayed for a symbol, the bars are built strictly according to the last executed trade price (Last). Otherwise, the tester first attempts to build the bars by Last prices, and in case of their absence, uses Bid ones. OnTick event is triggered on all ticks regardless of whether the Last price is present or not.

    Please note that trading operations are always performed by Bid and Ask prices even if the chart is built by Last prices. For example, if an Expert Advisor using only bar open prices for trading (i.e., the built-in Moving Average) receives a signal at Last price, it performs a trade at another price (Bid or Ask depending on the direction). If "Every tick" mode is used, the bars are built by Bid prices, while trades are performed by Bid and Ask ones. The Ask price is calculated as Bid + fixed spread of a corresponding minute bar.

    If a symbol history has a minute bar with no tick data for it, the tester generates ticks in the "Every tick" mode. This allows testing the EA on a certain period in case a broker's tick data is insufficient. If a symbol history has no minute bar but the appropriate tick data for the minute is present, these ticks are ignored. The minute data is considered more reliable.
    Currently, testing and optimization on real ticks are possible only on local and remote agents. Support for MQL5 Cloud Network will be added in the near future.

  3. Added the Chat. Now, you can communicate with your MQL5.community friends and colleagues. The chat displays all personal messages from your MQL5 account. To start communicating, log in to your account directly from the chat window or via the platform settings: Tools -> Options -> Community.




  4. Simplified demo account creation dialog, added ability to create hedge accounts. You do not have to fill the large form any more. Simply specify basic data and select trading parameters: account type, deposit, leverage, and hedging ability.



  5. Added automatic allocation of a demo account for quick start. If the platform has no accounts yet, a demo account on the first available trade server is allocated during the launch. After successful opening, connection to the account is established immediately.

  6. Now, each position has a ticket — a unique number. It usually matches the ticket of an order used to open the position except when the ticket is changed as a result of service operations on the server, for example, when charging swaps with position re-opening. A ticket is assigned automatically to all available positions after the terminal update.




  7. Fixed setting Stop Loss and Take Profit levels when placing a market order leading to a position reversal. Until recently, no appropriate levels were set for a new position.
  8. Fixed displaying prices with four and more decimal places on the one-click trading panel elements.
  9. Fixed displaying news in the print preview window.
  10. Fixed tick chart display.
  11. Fixed opening the Market Depth after the terminal emergency shutdown.
  12. Added a check if market orders are allowed when displaying one-click trading panel control elements.
  13. Optimized profit and margin calculation in case of a large number of open orders and positions.
  14. Added translation of the user interface into Malay.
  15. Fully revised the user manual. New design, interactive screenshots and embedded videos — learn trading in MetaTrader 5 with maximum convenience:




MQL5

  1. 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
      {
    public:
                          CAnimal();     // constructor
       virtual void       Sound() = 0;   // pure virtual function
    private:
       double             m_legs_count;  // number of animal legs
      };
    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
      {
    public:
       virtual void       Sound()=NULL;   // PURE method, should be overridden in the derived class, CAnimal is now abstract and cannot be created
      };
    //--- descendant from the abstract class
    class CCat : public CAnimal
     {
    public:
      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
      {
    public:
       //--- a pure virtual function
       virtual void      Sound(void)=NULL;
       //--- function
       void              CallSound(void) { Sound(); }
       //--- constructor
       CAnimal()
        {
         //--- an explicit call of the virtual method
         Sound();
         //--- an implicit call (using a third function)
         CallSound();
         //--- 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.

  2. 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 function address 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=sub;
    Print(func_ptr(10,5));
    
    func_ptr=add;
    Print(func_ptr(10,5));
    
    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.

  3. MqlTradeRequest features two new fields:

    • position — position ticket. Fill it when changing and closing a position for its clear identification while trading in hedging mode. In the netting system, filling the field does not affect anything since positions are identified by a symbol name.
    • position_by — opposite position ticket. It is used when closing a position by an opposite one (opened at the same symbol but in the opposite direction). The ticket is used only in the hedging system.

  4. Added TRADE_ACTION_CLOSE_BY value to the ENUM_TRADE_REQUEST_ACTIONS enumeration of trading operation types — close a position by an opposite one. The ticket is used only in the hedging system.

  5. Added trading operation tickets to the enumerations of the appropriate order, deal, and position properties:

    • Added ORDER_TICKET property to ENUM_ORDER_PROPERTY_INTEGER — order ticket. Unique number assigned to each order.
    • Added DEAL_TICKET property to ENUM_DEAL_PROPERTY_INTEGER — deal ticket. Unique number assigned to each deal.
    • Added POSITION_TICKET property to ENUM_POSITION_PROPERTY_INTEGER — position ticket. Unique number assigned to each newly opened position. It usually matches the ticket of an order used to open the position except when the ticket is changed as a result of service operations on the server, for example, when charging swaps with position re-opening. To find an order used to open a position, apply the POSITION_IDENTIFIER property. POSITION_TICKET value corresponds to MqlTradeRequest::position.

  6. Added ORDER_TYPE_CLOSE_BY value to the ENUM_ORDER_TYPE order type enumeration — close by order.
  7. Added ORDER_POSITION_BY_ID value to the ENUM_ORDER_PROPERTY_INTEGER order property enumeration — opposite position identifier for ORDER_TYPE_CLOSE_BY type orders.
  8. Added DEAL_ENTRY_OUT_BY value to the ENUM_DEAL_ENTRY deal direction enumeration — a deal is performed as a result of a close by operation.
  9. MqlTradeTransaction also features the two similar fields:

    • position — ticket of a position affected by transaction. It is filled for transactions related to handling market orders (TRADE_TRANSACTION_ORDER_* except TRADE_TRANSACTION_ORDER_ADD, where a position ticket is not assigned yet) and order history (TRADE_TRANSACTION_HISTORY_*).
    • position_by — opposite position ticket. It is used when closing a position by an opposite one (opened at the same symbol but in the opposite direction). It is filled only for orders closing a position by an opposite one (close by) and deals closing by an opposite one (out by).

  10. Added PositionGetTicket function — return a position ticket by an index in the list of open positions and automatically selects that position for further work using the PositionGetDouble, PositionGetInteger, and PositionGetString functions.
    ulong  PositionGetTicket(
       int  index      // index in the list of positions
       );

  11. Added PositionSelectByTicket function — select an open position for further work by a specified ticket.
    bool  PositionSelectByTicket(
       ulong   ticket     // position ticket
       );

  12. Added SYMBOL_MARGIN_HEDGED value to the ENUM_SYMBOL_INFO_DOUBLE trade symbol property enumeration — size of a contract or margin for one lot of hedged positions (oppositely directed positions at one symbol).

    • If the initial margin (SYMBOL_MARGIN_INITIAL) is specified for a symbol, the hedged margin is specified as an absolute value (in monetary terms).
    • If the initial margin is not set (equal to 0), a contract size to be used in the margin calculation is specified in SYMBOL_MARGIN_HEDGED. The margin is calculated using the equation that corresponds to a trade symbol type (SYMBOL_TRADE_CALC_MODE).

    Margin calculation for hedged positions is described in details in the MetaTrader 5 trading platform Help.

  13. Added ACCOUNT_MARGIN_MODE value to the ENUM_ACCOUNT_INFO_INTEGER account property enumeration — mode of margin calculation for the current trading account:

    • ACCOUNT_MARGIN_MODE_RETAIL_NETTING — used for the over-the-counter market when accounting positions in the netting mode (one position per symbol). Margin calculation is based on a symbol type (SYMBOL_TRADE_CALC_MODE).
    • ACCOUNT_MARGIN_MODE_EXCHANGE — used on the exchange markets. Margin calculation is based on the discounts specified in symbol settings. Discounts are set by the broker, however they cannot be lower than the exchange set values.
    • ACCOUNT_MARGIN_MODE_RETAIL_HEDGING — used for the over-the-counter market with independent position accounting (hedging, there can be multiple positions at a single symbol). Margin calculation is based on a symbol type (SYMBOL_TRADE_CALC_MODE). The hedged margin size (SYMBOL_MARGIN_HEDGED) is also considered.

  14. 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.

  15. 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.

  16. Fixed return of the SendFTP function call result. Previously, FALSE was returned after a successful sending instead of TRUE.
  17. Fixed an error in StringConcatenate function that occasionally caused "Access violation" execution error.
  18. Fixed a few errors occurred when working with template functions.
  19. Added ability to display lines exceeding 4000 characters for Print, Alert, and Comment functions.
  20. Fixed an error in ArrayCompare function that occurred when comparing an array to itself but with different initial position shift from the beginning.
  21. Added support for hedging to Standard Library:

    CPosition
    Added methods:

    • SelectByMagic — select position by a magic number and symbol for further work.
    • SelectByTicket — select position by a ticket for further work.

    CTrade
    Added methods:

    • RequestPosition — receive a position ticket.
    • RequestPositionBy — receive an opposite position ticket.
    • PositionCloseBy — close a position with the specified ticket by an opposite position.
    • SetMarginMode — set margin calculation mode according to the current account settings.

    Added overloading for the methods:

    • PositionClose — close position by ticket.
    • PositionModify — modify position by ticket.

    CAccountInfo
    Changed the methods:

    • MarginMode — receive margin calculation mode. Until recently, the method worked similarly to the new StopoutMode method.
    • MarginDescription — receive margin calculation mode as a string. Until recently, the method worked similarly to the new StopoutModeDescription method.

    Added methods:

    • StopoutMode — receive minimum margin level specification mode.
    • StopoutModeDescription — receive minimum margin level specification mode as a string.

    CExpert
    Added methods:

    • SelectPosition — select a position for further work.

  22. Added a few improvements to the Standard Library.


Signals

  1. Fixed a few trading signals showcase display errors.


Tester

  1. Fixed an error that hindered the calculation of commission on several trading symbol types.
  2. Fixed filling Expert field for trading orders resulting from SL/TP activation according to the Expert field of the corresponding position. Previously, it was not filled.
  3. Fixed switching to usual and forward optimization results' tabs.
  4. Fixed calculation and display of the "Envelopes" indicator.
  5. Optimized visual testing.
  6. Optimized profit and margin calculation in case of a large number of open orders and positions.
  7. Optimized trading operations during high-frequency trading.
  8. Now, history synchronization is not performed if a request for non-critical symbol's properties (not requiring the current quotes) has been made. For example, SYMBOL_SELECT, SYMBOL_DIGITS, SYMBOL_SPREAD_FLOAT, SYMBOL_TRADE_CALC_MODE, SYMBOL_TRADE_MODE, SYMBOL_TRADE_STOPS_LEVEL, SYMBOL_TRADE_FREEZE_LEVEL, SYMBOL_TRADE_EXEMODE, etc. Previously, the non-critical symbol history was synchronized at any request for its property.

MetaEditor

  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.


Updated documentation.
17 December 2015
MetaTrader 5 Platform Build 1240: Faster operation and embedded videos

Virtual Hosting

  1. Added a link to the tutorial video "How to Rent A Virtual Platform" into the Virtual Hosting Wizard dialog. Watch this two-minute video to learn how to easily launch a trading robot or copy signals 24/7.


    This video as well as many others is available on the official MetaQuotes Software Corp. YouTube channel.
  2. Fixed migration for hosting when a custom indicator is called or an EX5 library within a custom indicator is called from an Expert Advisor.

Terminal

  1. Accelerated update of the list of open orders and positions during high-frequency trading (50 and more operations per second).
  2. Optimized and greatly accelerated initial synchronization of the terminal with a trade server in case of a large amount of symbols (tens of thousands). Now, you can start working much faster after connection is established.
  3. Optimized and significantly reduced memory consumption by the terminal.
  4. Added saving and restoring the depth of market settings when closing/opening the terminal.
  5. Fixed artifacts that occurred in Windows 10 when dragging the terminal windows.
  6. Fixed the context help for a number of commands and dialogs. For activating help concerning a certain element, move the cursor on it and press F1.
  7. The works on adapting the interface for high resolution screens (4K) are underway.

MQL5

  1. Added the new properties for the OrderGetString, HistoryOrderGetString, and HistoryDealGetString functions responsible for receiving data on orders and deals:

    • ORDER_EXTERNAL_ID - order ID in an external trading system (on the exchange).
    • DEAL_EXTERNAL_ID - deal ID in an external trading system.

  2. Fixed the ZeroMemory function operation when working with structures and classes. Memory clearing was not performed in some cases.
  3. Added the error codes during the SendFTP function operation. The function sends the file to the address specified on the FTP tab of the Options window.

    • ERR_FTP_NOSERVER - FTP server is not specified in the settings
    • ERR_FTP_NOLOGIN - FTP login is not specified in the settings
    • ERR_FTP_FILE_ERROR - file does not exist
    • ERR_FTP_CONNECT_FAILED - failed to connect to the FTP server
    • ERR_FTP_CHANGEDIR - file upload directory not found on the FTP server
    • ERR_FTP_CLOSED - connection to the FTP server closed

  4. Fixed type casting access by inheritance between child class objects and their parents.
  5. Fixed a few errors in the class templates.
  6. Fixed requesting ticks using the CopyTicks function. When specifying the COPY_TICKS_TRADE parameter (copy only trade ticks) for consecutive identical trade ticks (identical volume and last price), only the first tick was passed.
  7. Fixed defining a size of a custom type variable.
  8. Fixed an error when using ZLib in the CryptDecode function that led to an infinite unzip loop.

Tester

  1. Fixed synchronization of the price history for a symbol different from the main test one.
  2. Fixed doubling of the TRADE_TRANSACTION_DEAL_ADD transaction (adding a trade to history) in the OnTradeTransaction event handler.
  3. Changed forward test behavior during genetic optimization. Now, all unique results obtained after genetic optimization participate in forward passes. Previously, only 1/4 of the results were used.

MetaEditor

  1. MetaEditor: Added a link to the tutorial video "How to Create a Trading Robot in the MQL5 Wizard" to the MQL5 Wizard. Watch this three-minute video and develop a trading robot without writing a single line of code.


    This video as well as many others is available on the official MetaQuotes Software Corp. YouTube channel.
  2. Fixed window arrangement commands if one of the windows is fully expanded. The Window menu allows you to arrange open files as tiles, vertically, horizontally and as a cascade.
  3. The works on adapting the interface for high resolution screens (4K) are underway.
Updated documentation.
30 October 2015
MetaTrader 5 Build 1210: Enhanced Depth of Market and General Improvements

Terminal

  1. Terminal: Added ability to place limit orders at a price worse than the market one in the Depth of Market. This allows you to get a guaranteed order execution at a specified price on the market.

    If we drag a limit order through ask/bid border, it will change to a stop order (Buy Limit will be replaced by Buy Stop, while Sell Limit - by Sell Stop). Hold Crtl while dragging so that a limit order is not replaced by a stop one.




  2. Terminal: Added the "Show quick trading buttons" option in the chart settings. It allows you to hide the One Click Trading panel enabling buttons and the Depth of Market from a chart.




  3. Terminal: Fixed occasional conflicts between tooltips and other applications.

MQL5

  1. MQL5: Fixed the operation of the Copy* functions for copying history data with dynamic arrays having the AS_SERIES flag. The flag is set by the ArraySetAsSeries function and indicates that indexation of the array elements is performed as in timeseries.
  2. MQL5: Changed the CHART_SHOW_ONE_CLICK property managed via ChartSetInteger and ChartGetInteger. Previously, the property allowed showing/hiding the One Click Trading panel on a chart. Now, it also shows/hides the buttons for setting the One Click Trading panel and the Depth of Market on a chart (similar to the "Show quick trading buttons" in the chart settings).
  3. MQL5: Fixed template operation.
Updated documentation.

23 October 2015
MetaTrader 5 Platform Update Build 1200: Tick History and Direct Payment for Services

Terminal

  1. Added ability to work with tick history in the Market Watch. Previously, a tick chart showed only the history collected in the terminal during its operation. Now, you can access the entire tick history on the trade server. Disable auto scroll and start scrolling a tick chart back in time using your mouse to download missing history from the trade server the same way it is done for common price charts. The new feature will be useful for traders who want to get the most detailed price charts.



    Use the CopyTicks() function to receive deeper tick history. It has been modified so that it requests missing history and downloads it if the latter is present on the trade server.

  2. Added an icon for quick opening/closing the Depth of Market. The icon is located near the One-Click Trading panel on the chart. You can also use the new hotkey Alt+B. The hotkey also works in the Market Watch window opening the Depth of Market for a symbol highlighted in the Market Watch.




  3. Information about the PC hardware characteristics and the operating system is now logged to a Journal at the start of the client terminal. Example:
    2015.10.14 14:48:18.486	Data Folder: C:\Program Files\MetaTrader 5
    2015.10.14 14:48:18.486	Windows 7 Professional (x64 based PC), IE 11.00, UAC, 8 x Intel Core i7  920 @ 2.67GHz, RAM: 8116 / 12277 Mb, HDD: 534262 / 753865 Mb, GMT+03:00
    2015.10.14 14:48:18.486	MetaTrader 5 build 1190 started (MetaQuotes Software Corp.)
  4. Imrpoved working with the symbols in the Market Watch:

    • Added display of the amount of symbols in the Market Watch and the total available amount of symbols on the trade server
    • Added a line for adding a new symbol with the smart selection list
    • The search in the new symbol line is performed not only by a symbol name, but also by its description and international name.




  5. Added support for the economic calendar in different languages.
  6. Added missing country icons to the economic calendar.
  7. Added the hotkey for opening the symbol management window in the Market Watch - Ctrl+U.
  8. Fixed arranging open chart windows according to the Window menu commands.
  9. Fixed an error that occasionally hampered the terminal's ability to find a certificate file when using the enhanced authentication.
  10. Fixed an error that could occasionally lead to a price history synchronization looping.
  11. Fixed nulling StopLoss/TakeProfit levels of a previously opened position after its volume has been increased if a symbol is traded in the Request Execution mode.
  12. Fixed checking the ability to place a sell order in case of a long position on symbols in "Long only" trading mode in the Depth of Market.
  13. Fixed Trailing Stop function operation. In some rare cases, a protective Stop Loss for an open position was moved incorrectly.
  14. The terminal interface has been further adapted for high resolution screens (4K).
  15. Fixed unloading history data as being excessive despite regular appeals to it from MQL5 programs.
  16. Fixed display of some user interface elements when working in Windows 10.
  17. Updated translations of the user interface.

Market

  1. Market: Operation with the product database in the MQL5 Market has been revised and optimized.
  2. Market: Purchasing without an MQL5.community account has been disabled for terminals on VPS. The purchase now requires specification of an MQL5.community account in the terminal setting: Tools - Options - Community.
  3. Market: Added direct product purchasing using UnionPay.
  4. Market: Enhanced logging when purchasing products in MQL5 Market.
  5. Hosting: Added managing the virtual hosting (except for migration) when working in the 32-bit version of the client terminal.


Virtual Hosting and Signals

  1. Payments for Virtual Hosting and Signal subscriptions can now be transferred straight from payment systems. To pay for hosting services, users don't need to log in to the MQL5.community account and add money to it. A payment for a service can now be transferred straight from the platform using one of the available payment systems.



    Select one of the available systems and make an online money transfer:




    Similarly, a payment for a trading signal subscription can be made straight from the terminal via a payment system.




    The required amount will be transferred to your MQL5.community account first, from which a payment for the service will be made. Thus, you maintain a clear and unified history of rented virtual hosting platforms and signal subscriptions and can easily access and review all your payments for the MQL5.community services.
  2. Added managing the virtual hosting (except for migration) when working in the 32-bit version of the client terminal.
  3. Fixed migration of FTP export settings to the virtual hosting regardless of the permission to publish reports via FTP.

MQL5

  1. Enabled a new optimizing compiler. Execution of programs has been accelerated up to 5 times on 64-bit platofrms. MQL5 programs should be re-compiled in the last MetaEditor version.
  2. Extended MqlTick structure format. Now, it passes the time of a tick arrival in milliseconds, as well as flags to determine which tick parameter has been changed.
    struct MqlTick
      {
       datetime     time;          // Time of a price last update
       double       bid;           // Current Bid price
       double       ask;           // Current Ask price
       double       last;          // Current Last price
       ulong        volume;        // Volume for the current Last price
       long         time_msc;      // Time of a price last update in milliseconds
       uint         flags;         // Tick flags
      };
    The parameters of each tick are filled in regardless of whether there are changes compared to the previous tick. Thus, it is possible to find out a correct price for any moment in the past without the need to search for previous values at the tick history. For example, even if only a Bid price changes during a tick arrival, the structure still contains other parameters as well, including the previous Ask price, volume, etc. You can analyze the tick flags to find out what data have been changed exactly:

    • TICK_FLAG_BID - a tick has changed a Bid price
    • TICK_FLAG_ASK  - a tick has changed an Ask price
    • TICK_FLAG_LAST - a tick has changed the last deal price
    • TICK_FLAG_VOLUME - a tick has changed a volume
    • TICK_FLAG_BUY - a tick is a result of a buy deal
    • TICK_FLAG_SELL - a tick is a result of a sell deal

    The MqlTick structure is used in two methods:

    • CopyTicks - method does not support the old format of the structure. Previously compiled EX5 files using the old tick format will return the error 4006 (ERR_MQL_INVALID_ARRAY) when calling the CopyTicks function.
    • SymbolInfoTick - method supports both old and new structure format.

  3. Added class templates allowing you to create parametrized classes like in C++. That enables even greater abstraction and ability to use the same code for working with objects of different classes in a uniform manner. Example of use:
    //+------------------------------------------------------------------+
    //|                                                    TemplTest.mq5 |
    //|                        Copyright 2015, MetaQuotes Software Corp. |
    //|                                             https://www.mql5.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2015, MetaQuotes Software Corp."
    #property link      "https://www.mql5.com"
    #property version   "1.00"
    //+------------------------------------------------------------------+
    //| Declare a template class                                         |
    //+------------------------------------------------------------------+
    template<typename T>
    class TArray
      {
    protected:
       T                 m_data[];
    
    public:
    
       bool              Append(T item)
         {
          int new_size=ArraySize(m_data)+1;
          int reserve =(new_size/2+15)&~15;
          //---
          if(ArrayResize(m_data,new_size,reserve)!=new_size)
             return(false);
          //---
          m_data[new_size-1]=item;
          return(true);
         }
       T                 operator[](int index)
         {
          static T invalid_index;
          //---
          if(index<0 || index>=ArraySize(m_data))
             return(invalid_index);
          //---
          return(m_data[index]);
         }   
      };
    //+------------------------------------------------------------------+
    //| Template class of a pointer array. In the destructor, it deletes |
    //| the objects, the pointers to which were stored in the array.     |
    //|                                                                  |
    //| Please note the inheritance from the TArray template class       |
    //+------------------------------------------------------------------+
    template<typename T>
    class TArrayPtr : public TArray<T *>
      {
    public:
       void             ~TArrayPtr()
         {
          for(int n=0,count=ArraySize(m_data);n<count;n++)
             if(CheckPointer(m_data[n])==POINTER_DYNAMIC)
                delete m_data[n];
         }
      };
    //+--------------------------------------------------------------------------+
    //| Declare the class. Pointers to its objects will be stored in the array   |
    //+--------------------------------------------------------------------------+
    class CFoo
      {
       int               m_x;
    public:
                         CFoo(int x):m_x(x) { }
       int               X(void) const { return(m_x); }
      };
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    TArray<int>     ExtIntArray;   // instantiate TArray (specialize TArray by the int type)
    TArray<double>  ExtDblArray;   // instantiate TArray (specialize TArray by the double type)
    TArrayPtr<CFoo> ExtPtrArray;   // instantiate TArrayPtr (specialize TArrayPtr by the CFoo type)
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //--- fill arrays with data
       for(int i=0;i<10;i++)
         {
          int integer=i+10;
          ExtIntArray.Append(integer);
          
          double dbl=i+20.0;
          ExtDblArray.Append(dbl);
          
          CFoo *ptr=new CFoo(i+30);
          ExtPtrArray.Append(ptr);
         }
    //--- output the array contents
       string str="Int:";
       for(int i=0;i<10;i++)
          str+=" "+(string)ExtIntArray[i];      
       Print(str);   
       str="Dbl:";
       for(int i=0;i<10;i++)
          str+=" "+DoubleToString(ExtDblArray[i],1);
       Print(str);   
       str="Ptr:";
       for(int i=0;i<10;i++)
          str+=" "+(string)ExtPtrArray[i].X();      
       Print(str);
    //--- CFoo objects created via new should not be deleted, since they are deleted in the TArrayPtr<CFoo> object destructor  
      }
    Execution result:
    TemplTest (EURUSD,H1)    Int: 10 11 12 13 14 15 16 17 18 19
    TemplTest (EURUSD,H1)    Dbl: 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0
    TemplTest (EURUSD,H1)    Ptr: 30 31 32 33 34 35 36 37 38 39

  4. New operations * and & for receiving a variable by reference and receiving a reference to a variable.
  5. Added the overloaded form of the ObjectsDeleteAll function - delete all objects of a specified type by a name prefix in a chart subwindow.
    int  ObjectsDeleteAll(
       long           chart_id,   // chart ID
       const string     prefix,   // object name prefix
       int       sub_window=-1,   // window index
       int      object_type=-1    // object type for deletion
       );

  6. Fixed the ObjectGetValueByTime function operation. Previously, an incorrect price value by a chart time could sometimes be returned (for example, for a horizontal trend line).
  7. Fixed operation of the Copy* functions in the absence of historical data on the server. Previously, such cases caused delays of 30-50 seconds before returning control.
  8. Added a few improvements to the MQL5 Standard Library.
  9. Translated the Standard Library documentation into German, French, Chinese, Turkish, Spanish and Portuguese.
  10. Added MQL5 documentation in Japanese.

Tester

  1. The process of selecting programs to run in the Strategy Tester has become much easier. The list is displayed now as a tree in accordance with the directories in which Expert Advisors and indicators are stored.




  2. Brought display of some indicators during a visualized test in line with the client terminal.
  3. Fixed setting a leverage and a chart timeframe while debugging MQL5 programs via the strategy tester.
  4. Fixed debugging indicators when testing on history.
Fixed errors reported in crash logs.

Updated documentation.


3 June 2015
MetaTrader 5 build 622: Faster and Simpler Purchase of Robots from the Market

Now, you can buy any Market application in a single step directly from your MetaTrader 4/5 terminal without registration. Simply click Buy and select the preferred payment method.


Then you will be redirected to the payment system web page to complete your purchase. PayPal, WebMoney, Neteller or a bank card - you can choose how to pay for your purchases from the store of ready-made robots and indicators.


After making a purchase, we still recommend that you register an account on MQL5.community, so that your purchased product is automatically linked to your account. An MQL5 account enables you to update the product and install it on multiple computers. Besides, an MQL5.community account gives you access to a plethora of other services for the MetaTrader platforms such as trading signals for copying deals of successful traders, virtual hosting for continuous operation of your applications and Freelance for ordering unique robots from developers.

Now, you know the quickest and easiest way to obtain a trading robot. More than 5 000 various MetaTrader applications are already waiting for you in the Market - simply choose and buy!


22 May 2015
MetaTrader 5 Platform Update Build 1150: Easy Purchase from Market, Debugging on History, Time&Sales of Transactions

Market

  1. We are introducing a new mechanism of "direct" purchasing. Purchasing a trading robot or an indicator from the Market is now even easier, and you do not even need an MQL5.community account.

    One-Step Purchase
    A user doesn't need to log in to an MQL5.community account and add money to it. A payment for a product can now be made straight from the platform using one of the available payment systems. To maintain a clear and unified history of purchases from the Market, the required amount will be first transfered to your MQL5.community account, from which a payment for the product will be made.

    You can easily access and review all your payments from your MQL5.community Profile.




    Purchase without Registration
    A product from the Market can be purchased without an MQL5.community account. Click "Buy" and pay for the product using one of the available payment systems.



    Then you will be redirected to the payment system web page to complete your purchase.



    After that, we strongly recommend you to register an account on MQL5.community, and your purchase will be automatically linked to it. This enables you to update the product and install it on multiple computers.

MetaEditor

  1. New features allow to debug Expert Advisors and indicators on history prices. In the older versions debugging required live real time charts.

    Now any program can be tested on required history data. Debugging runs in the visual testing mode in the Strategy Tester. An application is executed on a chart with an emulated sequence of ticks in the tester.

    Configure the debugging parameters in the MetaEditor settings: symbol, timeframe, interval, execution mode, tick generation mode, initial deposit and leverage. These parameters will be applied for visual testing.



    Set the breakpoints in the code, and then start the debugging using historical prices.



    This will initiate visual testing and the debugging process.



Virtual Hosting

  1. Multiple improvements and fixes have been implemented in the Virtual Hosting service.

    The major changes apply to operation in Wine on computers running Linux and Mac OS. All the functions are available for allocated virtual servers in Wine, including migration, performance monitoring and logs.


    The operation of the Log has also changed. If a user requests too many records, then only part of the first logs for the specified period will be downloaded. This prevents performance degradation resulting from large logs. If you need to download further logs, you no longer need to change the requested period. Simply select the last row in the log viewer window and press PgDn.




Terminal

  1. Added support for a special type of non-tradable assets, which can be used as client's assets to provide the required margin for open positions of other instruments. For example, a certain amount of gold in physical form can be available on a trader's account, which can be used as a margin (collateral) for open positions.

    Such assets are displayed as open positions. Their value is calculated by the formula: Contract size * Lots * Market Price * Liquidity Rate.

    Liquidity Rate here means the share of the asset that a broker allows to use for the margin.


    The Assets are added to the client's Equity and increase Free Margin, thus increasing the volumes of allowable trade operations on the account.

    Thus, it is now possible to open accounts with various margin types.


    In the example above, a trader has 1 ounce of gold having the current market value of 1 210.56 USD. This value is added to the equity and the free margin allowing the trader to continue trading even in case of a zero balance.

  2. A new Depth of Market with a tick chart and the Time&Sales data of trades.

    A tick chart of exchange instruments with real transaction prices is now displayed in the Depth of Market. All transactions conducted on the Exchange are plotted on this chart:

    • Red circles - Sell transactions
    • Blue circles - Buy transactions
    • Green circles - the direction of the transaction is undefined. It is used when the exchange does not transmit the direction of a transaction. In this case, the direction is determined based on the price of the transaction as compared to prices bid and ask. A Buy transaction is that executed at the ask price or above, a Sell transaction is executed at the bid price or lower. The direction is undefined, if the price of the transaction is between the bid and the ask.

    The larger the circle, the greater is the volume of the transaction. Transaction volumes are also shown as a histogram below the tick chart.



    At the top and bottom of the histogram, the total volumes of the current Buy and Sell offers are shown.

  3. The symbol selection dialog box now contains a column showing the symbol expiration date. Additionally, expired instruments can be hidden from the list. Expired contracts are automatically replaced with active ones.



    All expired symbols are hidden to preserve a more compact display. This is particularly useful when working on the futures market. A non-relevant symbol is the expired one, which is defined by the "Last trade" parameter. This date is specified in the "Expiration" column. To see all the symbols, click "Show expired contracts".
    The list of symbols is automatically sorted for a more convenient display:

    • first listed are the symbols without the expiration date
    • they are followed by the symbols with an expiration date starting with the nearest date
    • then expired symbols are shown starting with the last expired one
    • other symbols sorted alphabetically

    Option "Auto remove expired" in the context menu allows to replace expired symbols with active ones in the "Market Watch" window.



    After terminal restart, expired symbols are hidden, and active ones are added instead. For example, the expired futures contract LKOH 3.15 will be replaced by the next contact of the same underlying asset LKOH 6.15.

    Symbols in the appropriate open charts are also replaced, provided there are no running Expert Advisors on them.

  4. Fixed updating of trade button states in the Depth Of Market window depending on whether there are any positions, and on the permission to open only long positions. If there are no positions, the Close button is inactive. If opening short positions is not allowed, the Sell button is inactive.
  5. The terminal interface has been further adapted for high resolution screens (4K).
  6. Fixed verification of the volume of a closed position in the Request Execution mode, in case a deal volume is less than the minimum allowable value.
  7. Fixed an error that could occasionally lead to launch of multiple terminal instances from one directory.
  8. Added support and automatic filtering of the economic calendar in different languages. Filtering is performed in accordance with the language of the terminal interface.
  9. The Log Viewer now features search through the currently displayed logs.



    It searches for a word/phrase in the displayed list of logs.
  10. Added Thai translation of the client terminal.
  11. Updated translation of the client terminal into Hindi.

MQL5

  1. New function GetMicrosecondCount returns the number of microseconds that have passed since the start of the MQL5 program:
    ulong  GetMicrosecondCount();
    This function can be used to profile program execution and identify "bottlenecks".

  2. New chart property CL_BUFFER_SIZE in the ENUM_OPENCL_PROPERTY_INTEGER enumeration - it returns the actual size of the OpenCL buffer in bytes. The property can be received via the CLGetInfoInteger function.
  3. An error notification in the WebRequest function has been modified. If an error occurs, the 'result' array will contain the description of the error.
  4. The ArraySort, ArrayBsearch, ArrayMinimum and ArrayMaximum sort and search functions are now able to work with multidimensional arrays. Sort and search are performed only by the first (zero) array index. Previously, these functions worked only with one-dimensional arrays.
  5. Fixed some bugs in the compilation of macros.

Tester

  1. Some improvements and bug fixes in the operation of the visual testing. The tester now provides a smoother control of testing speed using the toolbar.

Fixed errors reported in crash logs.

Updated documentation.

The update is available through the LiveUpdate system.

20 March 2015
MetaTrader 5 Platform Update Build 1100: Faster Testing and Optimization of Expert Advisors

Tester

  1. A status of connection to MQL5 Cloud Network is now displayed in the Agents Manager. This allows users to easily check if they can receive tasks from the cloud computing network after they install agents.


    A status of connection to MQL5 Cloud Network


  2. Some improvements and bug fixes have been made in the operation of the Strategy Tester. Time spent on intermediate preparatory operations and network latency has been significantly reduced. Testing and optimization are now faster in all operating modes: working with local testing agents, with a farm of agents in the local network and using MQL5 Cloud Network.

Trading Terminal

  1. Added display of the number of unread emails in the "Mailbox" tab of the Toolbox window.


    Added display of the number of unread emails


  2. The Navigator window now contains the list of Expert Advisors running on the active trading account. In addition to the Expert Advisor name, a chart on which the EA is running is specified in the list. An icon indicates whether the EA is allowed to trade.


    The Navigator window now contains the list of Expert Advisors running on the active trading account


    The context menu contains commands for enabling or disabling automated trading for any of the Expert Advisors, as well as for viewing its properties or removing it from the chart.
  3. Improved accuracy of the algorithm for determining access points available for connection to a trading server.
  4. Fixed an error that could occasionally clean the database of client accounts when a terminal was reinstalled over an existing one.
  5. The terminal interface has been further adapted for high resolution screens (4K).

Market

  1. Fixed updating of the MQL5 account balance after purchasing or renting a product.

Virtual Hosting

  1. Fixed migration of custom indicators to the virtual hosting environment.
  2. Fixed updating of the virtual hosting status in the Navigator window.

MQL5

  1. Fixed errors which could occasionally interfere with the optimization of Expert Advisors in MQL5 Cloud Network.
  2. Fixed call of OnDeinit when deleting an Expert Advisor using the ExpertRemove function during testing. Previously, under the conditions described the OnDeinit event was not called.
  3. Fixed errors in use of resources in EX5 libraries.
  4. Fixed errors in the analysis of macros.

Fixed errors reported in crash logs.

Updated documentation.

The update is available through the LiveUpdate system.

16 February 2015
MetaTrader 5 Platform Update Build 1085

New update of the MetaTrader 5 platform has been released. It contains the following changes:

MetaTrader 5 Client Terminal build 1085
  1. Terminal: New Virtual Hosting service is now available. A virtual server for a trading account can now be rented right from the client terminal. Providing consistent connection to the trading server and uninterrupted computer operation for Expert Advisors and copy trading is now even easier.

    Virtual servers are hosted by MetaQuotes Software Corp.'s partner companies

    Allocating a Virtual Server
    To receive a virtual terminal on a virtual server, connect using the necessary trading account and execute "Register a Virtual Server" command in the context menu.




    Virtual Hosting Wizard window appears. It shows how the virtual hosting network works. The process of obtaining a virtual server consists of three steps. First, you will find out how to prepare for migration. After that, you will select the nearest virtual server with minimal network latency to your broker's trade server.



    You can choose 1 day of free hosting provided to each registered MQL5.community user or select one of the offered service plans. Finally, you will select the data migration mode depending on your objectives:

    • complete migration is necessary if you want to simultaneously launch Expert Advisors/indicators and trade copying;
    • only Expert Advisors and indicators, if subscription to Signals is not required;
    • only trade copying - only Signal copying settings (no charts or programs) are moved.

    After selecting the migration mode, you can launch the virtual server immediately by clicking "Migrate now" or do that later at any time.

    Preparing for Migration
    Before launching the virtual terminal, you should prepare an active environment for it - charts, launched indicators and Expert Advisors, Signal copying parameters and the terminal settings.

    • Charts and Market Watch - hide all unnecessary trading instruments from the Market Watch to reduce the traffic. Close unnecessary charts. In the terminal settings, specify the required value of "Max. bars in the window "- the terminal should be restarted after that.
    • Indicators and Expert Advisors - attached the required EAs and indicators to your charts. Products purchased on the Market and launched on the chart are also moved during migration. They remain completely functional, and the number of available activations is not decreased. All external parameters of indicators and Expert Advisors should be set correctly.
    • Email, FTP and Signals - if an Expert Advisor is to send emails, upload data via FTP or copy Signal trades, make sure to specify all necessary settings. Set correct login and password of your MQL5.community account on the Community tab. This is necessary for Signal copying.
    • Permission to trade and copy signals - the automated trading is always allowed in the virtual terminal. To work with the signals, set copying parameters in the Signals section.
    • WebRequest - if a program that is to operate in the virtual terminal uses the WebReqest() function for sending HTTP requests, you should set permission and list all trusted URLs on the Expert Advisors tab.


    Migration
    Migration is transferring the current active environment from the client terminal to the virtual one.

    Migration is performed during each synchronization of the client terminal. Synchronization is always a one-direction process - the client terminal's environment is moved to the virtual terminal but never vice versa. The virtual terminal status can be monitored via requesting the terminal's and Expert Advisors' logs as well as virtual server's monitoring data.

    To perform synchronization, open the account context menu and select migration type.




    Thus, you always can change the number of charts and the list of symbols, the set of launched programs and their input parameters, the terminal settings and Signal subscription.

    When performing migration, all data is recorded in the client terminal's log.


    After the synchronization, open the virtual terminal's main journal to examine the actions performed on it.




    Working with the Virtual Terminal
    The rented virtual server status can also be easily monitored from the client terminal. Execute "Details" command in the context menu.



    The information is presented in four tabs:

    • Details - data on the virtual server itself and the terminal's active environment.
    • CPU Usage - CPU usage graph, %.
    • Memory Usage - memory usage graph, Mb.
    • Hard Disk Usage - hard disk usage graph, Mb.

  2. Market: Now, it is possible to rent MetaTrader Market products for 1, 3, 6 or 12 months. This provides undeniable advantages both for developers and buyers. Authors are able to significantly increase user's confidence by allowing potential buyers to check out their products at a low cost. For buyers, the rent is another opportunity to assess a product before buying it. Unlike demo versions, rented products have no limitations except for validity period.

    Any Market developer may choose whether or not their product is available for rent and set the rent price.




    Developers may choose not to offer their products for rent selling only full licenses for unlimited use.

    If rent is enabled for a product, its web page shows possible options: rental period and price. Click Rent and select the rental period.



    After the period expires, users can renew the rent or buy a full license.

  3. Terminal: Removed "MetaTrader 5, @ 2001-2015 MetaQuotes-Software Corp." copyright when saving a chart screenshot using "Save As Picture" command in the terminal or via the MQL5 Screenshot() function. That simplifies distribution of screenshots.




  4. Terminal: Fixed built-in Gator Oscillator technical indicator calculation and parameter management.
  5. Terminal: Improved scanning the points of connection to the trade server.
  6. Terminal: Fixed occasional LiveUpdate operation errors.
  7. MQL5: Added SIGNAL_BASE_CURRENCY signal property - signal provider's deposit currency - to ENUM_SIGNAL_BASE_STRING enumeration. The property can be received via SignalBaseGetString function.
  8. MQL5: Fixed compilation errors when determining the rights to access parent class members during inheritance.
  9. MQL5: Fixed a compilation error when overloading class methods by parameter constancy.
  10. Tester: Optimized work of MQL5 Cloud Network agents. Now, the agents do not spend time on the so-called "warming-up" - connection to the cloud network servers that distribute tasks. Instead, the agents are always ready to receive and execute a task. This speeds up the optimization via MQL5 Cloud Network.
  11. Tester: Improved presentation of local, remote and cloud agents in the strategy tester.
  12. Fixed errors reported in crash logs.
  13. Updated documentation.


MetaTrader 5 Android build 1052

The new version of MetaTrader 5 for Android is now available in Google Play. It features some fixes and improved stability. Analytical objects and messaging system are to be added soon.

The application can be downloaded here: https://download.mql5.com/cdn/mobile/mt5/android?hl=en&utm_source=www.metatrader5.com


The update is available through the LiveUpdate system.

16 January 2015
MetaTrader 5 Platform Update Build 1045: New WebRequest

Trading Terminal

  1. Preparatory works for virtual hosting support in MetaTrader 5 platform. Virtual hosting service allows you to rent a terminal that operates around the clock with no interruptions directly from your MetaTrader 5. One of the main features is selection of a server located closest to the broker's server minimizing network latency.




  2. Tester agents now can work only in the 64-bit systems. This decision is driven by the need to follow the development of the IT industry. Switching to the new technologies increases computing performance and enables further development of MQL5 Cloud Network.



    Changes in the platform components:

    • Remote agents and MQL5 Cloud Network agents are no longer available for use in the 32-bit terminals. Instead of the agent list, "Available only in the 64-bit version" message is displayed.
    • MetaTester 5 Agents Manager is available only in the 64-bit version. Thus, it is possible to install the agents only on the 64-bit systems.


  3. Fixed news filtration by language when the language list is specified manually in the terminal settings.
  4. Optimized work with a large number of open orders.
  5. Accelerated sending trade requests.
  6. The interface has been adapted for high resolution screens - Full HD and higher.

MQL5 Language

  1. Added the new form of WebRequest function:
    int WebRequest (string method, string url,string headers,int timeout, const char &data[], int data_size,char &result[], string &result_headers)
    This function allows you to explicitly form the contents of an HTTP request header providing more flexible mechanism for interacting with various Web services.

  2. Added new trade account properties. The properties are available via AccountInfoDouble function.

    • ACCOUNT_MARGIN_INITIAL - current initial margin of an account.
    • ACCOUNT_MARGIN_MAINTENANCE - current maintenance margin of an account.
    • ACCOUNT_ASSETS - current account assets.
    • ACCOUNT_LIABILITIES - current account liabilities.
    • ACCOUNT_COMMISSION_BLOCKED - current blocked account commission.

  3. Added new trade symbol properties:

    • SYMBOL_OPTION_STRIKE - option contract strike price. The property is received by SymbolInfoDouble function.
    • SYMBOL_BASIS - trade symbol's underlying asset name. The property is received by SymbolInfoString function.
    • SYMBOL_OPTION_MODE - option mode, the value is set using ENUM_SYMBOL_OPTION_MODE enumeration. 
    • SYMBOL_OPTION_RIGHT - option right, the value is set using ENUM_SYMBOL_OPTION_RIGHT enumeration. The property is received by SymbolInfoInteger function.

  4. Added SymbolInfoMarginRate function - receiving the value of the initial and maintenance margin charge ratio according to a trade order type and direction.
  5. Fixed ChartIndicatorName function operation in the strategy tester.
  6. Fixed compilation of the macros containing name substitution using ##.
  7. Fixed end-of-file indicator reset error when opening a new file.

Fixed errors reported in crash logs.

Updated documentation.

The update will be available through the LiveUpdate system.

12 December 2014
MetaTrader 5 Platform Update Build 1035: Option Strategy Builder and Access to Ticks

Trading Terminal

  1. Implementation of functions for trading options is currently underway. The Option Strategy Builder has been added. It helps users combine different options in one investment portfolio, and to assess the possibilities and potential risks.



    The Builder is easy to use: a trader chooses the option based on the expiration date and the underlying asset, and then selects one of the more than 30 available strategies. The Builder displays the appropriate combination of options and calculates evaluation parameters - the so-called Greeks. The profit/loss chart and the Greeks based chart appear at the bottom of the window.

    In addition to a large number of built-in strategies, traders can create and save their own strategies for later use.

  2. Added display of the number of newsletters received in the last 24 hours.




  3. Optimized and accelerated synchronization of large history of trading orders and deals.
  4. Fixed launch of several custom indicators in one chart subwindow.
  5. Fixed recalculation of Bill Williams Market Facilitation Index for a changed chart period.
  6. Fixed minimization of the "Toolbox window".
  7. Fixed generation of the account state report published over FTP.
  8. Updated translation of user interface into German.
  9. Added translation of user interface into Greek and Uzbek.

MQL5 Language

  1. New function for working with the tick history CopyTicks. The function is used for receiving an array of ticks accumulated by the terminal for the current session. The depth is limited to the last 2000 ticks.

    The new function expands the possibilities for developing scalping trading robots. The OnTick function does not handle every tick, it notifies the Expert Advisor of market changes. It can be a batch of changes: the terminal can simultaneously make a few ticks, but OnTick will be called only once to notify the EA of the latest market state. The CopyTicks function allows you to receive and analyze all the ticks.
    int  CopyTicks(
       const string      symbol_name,           // Symbol name
       MqlTick           &ticks_array[],        // the array where ticks will be placed
       uint              flags=COPY_TICKS_ALL,  // the flag that defines the type of received ticks
       ulong             from=0,                // the date starting from which ticks will be received, specified in milliseconds since 01.01.1970
       uint              count=0                // the number of latest ticks that should be received
       );
    Ticks can be requested by the date if the 'from' value is specified, or based on their number using the 'count' value. If none of the parameters are specified, all available ticks are received, but not more than 2000. Ticks can also be requested based on their type using the 'flags' parameter. Available values:

    • COPY_TICKS_ALL - all ticks.
    • COPY_TICKS_INFO - only information ticks (Bid and Ask).
    • COPY_TICKS_TRADE - only trade ticks (Last and Volume).

  2. Added an option for overloading template functions using array parameters.
  3. Added an option for overloading a method based on its constancy.
  4. Added generation of the CHARTEVENT_MOUSE_MOVE event (in the OnChartEvent entry point) at the right mouse button click on the chart.
  5. Fixed the functioning of the Switch operator if the case condition contains a negative value.
  6. Improved calculation accuracy in functions ObjectGetValueByTime() and ObjectGetTimeByValue(), used for receiving the price value for the specified object time and vice versa - time value for a price.

Strategy Tester

  1. MQL5 programs purchased in MetaTrader AppStore can now be tested and optimized on the MQL5 Cloud Network agents and on remote agents.
  2. Fixed calculation of swaps in points for positions with less than 1 lot.
  3. Fixed check and normalization of Stop Loss and Take Profit levels when opening a position for the trading instrument with "Market Execution" type.
  4. Fixed behavior of the ObjectGetValueByTime function. In some cases, the behavior of the function in the tester could be different from its behavior in the terminal.

MetaEditor

  1. Fixed MetaEditor crash when debugging and profiling looped programs.
  2. Added translation of user interface into Greek and Uzbek.

Fixed errors reported in crash logs.

Documentation has been updated.

The update is available through the LiveUpdate system.

31 October 2014
MetaTrader 5 Trading Terminal build 1010: New Signals, Market and Options
Trading Signals
  1. The showcase of signals has been completely redesigned. New features have been added, the Signals service design and usability have been improved.



    The new features in the list of signals:

    • The list of signals now contains growth charts similar to those displayed on the MQL5.community site. A green icon in the lower left corner of the chart indicates that this is a real account based signal.
    • Now subscription to a signal is available directly from the list. To subscribe, press the button with the price indication (or the word 'Free', if the signal is free). This will open a subscription confirmation dialog.
    • Now signals can be added to Favorites. Click the star icon at the end of the signal line. After that, the signal can be easily found in the "Favorites" tab.
    • The context menu has been removed. Now to find a signal to which you have subscribed, go to any signal. The top panel shows the signal you are subscribed to and a link to it.

    A signal view page has been updated. A new option allows to add signals to Favorites. The status of the signal account is displayed when hovering the mouse pointer at "Growth".

    Signals statistics have expanded:

    • The total amount of subscribers' funds.
    • Trading account lifetime since its first trading operation.
    • The average position holding time.



    New tabs:

    • Risks - information about the best and worst trading operations and series of operations, and information on drawdowns.
    • Reviews - reviews of signal subscribers.
    • News - through this tab the signal provider can inform subscribers of any change in the signal and post other useful information.

Market

  1. Revised display of products in MetaTrader AppStore. Applications, magazines and books feature the new design. A new option allows to add products to Favorites. Click the star icon in the product view mode. After that, the product can be easily found in the "Favorites" tab.




Trading terminal

  1. The terminal now features an options board and a volatility chart. Implementation of tools for trading options is currently underway. Tools for analyzing option strategies will be added in the next version.




    Options Board
    The options board displays a series of options based on the expiration date for an underlying asset (a class of options) selected in the "Underlying" field. The following parameters are displayed for the options:

    • Bid CALL - the bid price of a call option.
    • Ask CALL - the ask price of a call option.
    • Theo CALL - the theoretical (fair) price of a call option calculated for the specified strike based on historical data.
    • Strike - an option execution price.
    • Volatility - an implied volatility. It is specified as a percentage, and characterizes the expectations of market participants about the value of the underlying asset of the option.
    • Theo PUT - the theoretical price of a put option calculated for the specified strike based on historical data.
    • Bid PUT - the bid price of a put option.
    • Ask PUT - the ask price of a put option.

    Volatility Chart
    Option strikes are shown along the horizontal axis of the chart, and the implied volatility is shown along its vertical axis.




  2. Added display of ping values ​​in the list of access points.




  3. The terminal interface has been adapted for high resolution screens - Full HD and higher. Menus, toolbars, window titles and the status bar are now large enough for easy viewing and working on touch screen of Windows-tablets.

  4. Added a command for managing trading symbols in the "View" menu and on the toolbar. Accessing symbol settings is now as easy as never before:



MQL5 Language

  1. Added conversion of a macro parameter to a string and concatenation of the macro parameter. Below is an example, in which the concatenation of macros allows to organize the automatic removal of the class instances.
    //+------------------------------------------------------------------+
    //|                                                     MacroExample |
    //|                        Copyright 2014, MetaQuotes Software Corp. |
    //|                                       https://www.metaquotes.net  |
    //+------------------------------------------------------------------+
    #property script_show_inputs
    input bool InpSecond=true;
    
    #define DEFCLASS(class_name) class class_name:public CBase{public:class_name(string name):CBase(name){}};
    #define TOSTR(x) #x
    #define AUTODEL(obj) CAutoDelete auto_##obj(obj)
    #define NEWOBJ(type,ptr) do { ptr=new type(TOSTR(ptr)); \
                             Print("Create object '",TOSTR(type)," ",TOSTR(ptr),"' by macro NEWOBJ"); } \
                             while(0)
    //+------------------------------------------------------------------+
    //| The basic class required for automatic deletion of objects       |
    //+------------------------------------------------------------------+
    class CBase
      {
    protected:
       string            m_name;
    
    public:
                         CBase(string name):m_name(name) { }
       string            Name(void) const{ return(m_name); }
    
      };
    //+------------------------------------------------------------------+
    //| The object auto-delete class makes watching of created           |
    //| objects unnecessary. It deletes them in its destructor           |
    //+------------------------------------------------------------------+
    class CAutoDelete
      {
       CBase            *m_obj;
    
    public:
                         CAutoDelete(CBase *obj):m_obj(obj) { }
                        ~CAutoDelete()
         {
          if(CheckPointer(m_obj)==POINTER_DYNAMIC)
            {
             Print("Delete object '",m_obj.Name(),"' by CAutoDelete class");
             delete m_obj;
            }
         }
      };
    //+------------------------------------------------------------------+
    //| Declaring two new classes CFoo and CBar                          |
    //+------------------------------------------------------------------+
    DEFCLASS(CFoo);
    DEFCLASS(CBar);
    //+------------------------------------------------------------------+
    //| The main script function                                         |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       CFoo *foo;
    //--- Creating an object of the CFoo class
       NEWOBJ(CFoo,foo);
    //--- Creating an instance of the CFoo foo object auto-deletion class
       AUTODEL(foo);
    //---
       if(InpSecond)
         {
          CBar *bar;
          //---
          NEWOBJ(CBar,bar);
          AUTODEL(bar);
         }
    //--- No need to delete foo, it will be deleted automatically
      }
    //+------------------------------------------------------------------+
    
  2. Added the OBJPROP_ANCHOR property for the "Bitmap" and "Bitmap Label" objects. The property defines the anchor point of the graphical object on the chart: the upper left corner, center left, lower left corner, bottom center, etc.
  3. Added reading of the CHART_BRING_TO_TOP chart property (the chart is on top of all the others) in the ChartGetInteger function.
  4. Fixed the compilation and generation of the ternary operator "?".
  5. Fixed passing of a class member static array.
  6. Fixed applying of a template to the list of initialization of the template constructor class members.

Trading signals

  1. Restrictions on signal subscriptions became milder:

    If the trading history of the signal contains symbols that are not available in the subscriber's terminal, the subscription is now allowed (was prohibited in previous versions). The actions with the positions for which the subscriber does not have symbols are ignored. The following log appears in the Journal:
    2014.08.26 16:44:29.036    '2620818': Signal - symbol GBPNZD not found
    If the subscriber has positions and/or pending orders, a warning dialog suggesting to close/delete them appears (as before). Now, however, it is not an obligatory condition to continue working with signals.



    Synchronization with the signal provider will be performed. Positions and orders that were opened not based on the subscription signal are left unchanged. The user can perform any operations with them.

    Users can now perform trade operations manually (or using an Expert Advisor), being signed to a signal. The Signals service will ignore the positions and orders opened by the trader.
    Keep in mind that placing orders manually affects the amount of available margin on the trading account. Opening positions manually increases the overall load on the account as compared with the signal provider's account.
  2. Added support for a copied percent for the volumes with a floating point. The minimum percentage of copied volumes for signals has been reduced from 1% to 0.001%.

Strategy tester

  1. Fixed freezing of testing agents when working with the MQL5 Cloud Network.
  2. Fixed calculation of swaps in points for the minimal volumes of trading positions.

MetaEditor

  1. Fixed hotkeys for commands "Navigate Forward" and "Navigate Backward".

MetaViewer

  1. Fixed page navigation on the toolbar.
  2. Fixed text search based on the current interface language.

Fixed errors reported in crash logs.

Documentation has been updated.

The update is available through the LiveUpdate system.
1 August 2014
MetaTrader 5 Trading Terminal build 975: Displaying Expert ID

Trading Terminal

  1. Added display of a trade ID (magic number) set by an Expert Advisor. The ID is displayed as a tooltip in the list of open positions and orders, as well as in the trading history.


    Displaying Expert ID


  2. Optimized work with a large number of trading symbols (thousands and tens of thousands).
  3. Fixed display of alerts on the price chart. The alert's price level was sometimes displayed in the indicator's subwindow.
  4. Updated interface translations into Chinese, Turkish and Japanese.
  5. Fixed displaying the list of chart templates in the application's main menu.
  6. Fixed displaying the list of trade symbol sets in the context menu of Market Watch window.

MQL5 Language

  1. Fixed errors in working with built-in structures that could occasionally disrupt the operation of IndicatorParameters and MarketBookGet methods.
  2. Fixed type conversion from bool to string.
  3. Fixed working with virtual functions.
  4. Fixed an error in the operation of FileReadStruct and FileWriteStruct functions within EX5 libraries.
  5. Fixed a compiler error that occurred in case a key word was present in a comment.

Strategy Tester

  1. Fixed calculation of swaps in points when testing.
  2. Fixed passing the file defined in #property tester_file. An error occurred if the file was in the common folder of the client terminals.
  3. Greatly improved selection of the nearest cloud server by the tester agents working within MQL5 Cloud Network of distributed computing. Thus, their operation speed is increased significantly.

MetaEditor

  1. Fixed text replacement when the list of MetaAssist tips is collapsed.

Fixed errors reported in crash logs.

Updated documentation.

The update is available through the LiveUpdate system.

27 June 2014
MetaTrader 5 trading terminal build 965: Smart Search, OTP and Money Transfer between Accounts

Trading terminal

  1. Completely revised built-in search. The new search is a smart and powerful system. Search results are now conveniently arranged by categories.

    As you type in search query, the system instantly offers possible options:



    In order to search by one of the previous queries, place the cursor to the box and click Down Arrow key to open the query history. Selection of a search area is not available in the search bar any more, as the system automatically selects the most relevant results arranging them by categories conveniently:



    For better representation, search results now contain not only texts but also avatars of articles, books and applications. Use the top panel to view the search results by MetaTrader Appstore Products, Code Base, Signals, MQL5.community Forum and Documentation. If a category has no results, it is highlighted in gray.

  2. Added the OTP authentication feature. Use of OTP (one-time password) provides an additional level of security when working with trading accounts. The user is required to enter a unique one-time password every time to connect to an account.

    One-time passwords are generated in the MetaTrader 5 mobile terminal for iPhone . The same one-time password generation option will be added in the mobile terminal for Android soon.

    How to enable OTP
    To start using one-time passwords, a trading account should be bound to a password generator, which is the MetaTrader mobile terminal 5 for iPhone.
    The use of the OTP option should be enabled on a trade server.
    Go to the Settings of the mobile terminal and select OTP. For security reasons, when the section is opened for the first time, a four-digit password should be set. The password must be entered every time to access the password generator.



    In the window that opens, select "Bind to account".



    Next, specify the name of the server on which the trading account was opened, the account number and the master password to it. The "Bind" should be kept enabled. It must be disabled, if the specified account should be unbound from the generator and one-time passwords should no longer be used.

    After the "Bind" button located in the upper part of the window is tapped, a trading will be bound to the generator, and an appropriate message will appear.



    Likewise, an unlimited number of accounts can be bound to the generator.

    The one-time password is displayed at the top of the OTP section. Underneath, a blue bar visualizes the password lifetime. Once the password expires, it is no longer valid, and a new password will be generated.

    Additional Commands:

    • Change Password - change the generator password.
    • Synchronize Time - synchronize the time of the mobile device with the reference server. Accuracy requirement is connected with the fact that the one-time password is bound with the current time interval, and this time should be the same on the client terminal and the server side.

    How to use OTP in the desktop terminal
    After binding a trading account to the generator, a one-time password will be additionally requested when connecting to it from the desktop terminal:




  3. Added an option for transferring money between accounts within the same trade server. Money can be transferred only from the currently connected account. Select it in the "Navigator" window and click "Transfer funds" in the context menu.



    In the dialog box, select the account to which funds need to be transferred. The transfer amount is specified in the deposit currency of the current account. It cannot exceed the current balance and the current amount of free margin of the account.

    To transfer funds, a master password must be specified for both accounts. If OTP authentication is used for the account, from which funds are transferred, the one-time password should be additionally specified.

    Transfer of funds is provided in the form of balance operations: a withdrawal operation on the current account and depositing operation on the recipient account.
    • The money transfer option should be enabled on the trade server. Depending on the settings, there are some restrictions on the accounts, between which transfer is allowed. In particular, money transfer can be allowed only for accounts with identical names and emails.

    • Funds can be transferred only within the same trading server and only between the accounts of the same type. From a real account funds can be transferred only to another real account, from a demo one - only to demo.
    • The accounts, between which funds are transferred, should use the same deposit currency.
  4. Added an option for changing the password of any trading account in the "Navigator" window. Previously, it was possible to change the password only for the currently connected account.

    Now any account can be selected in the "Navigator" window and its passwords can be changed by clicking the appropriate command in the context menu:




  5. Added the possibility to set SL and TP levels on the chart by dragging the trade level of the corresponding position (using drag'n'drop). Hover the mouse over the level of the position on the chart. Click the left mouse button and hold it to move the level up or down.



    For long positions dragging down allows to set stop loss, up - take profit. And vice versa for short positions. When a level is dragged, the possible profit/loss in pips and currency, which may occur when this level triggers, is shown.

  6. Changed the location of commands in the "Window" menu. Now the "Tile window" option is displayed first, hotkeys Alt+R have been assigned for this command. This command has also been added to the standard toolbar.




  7. In the "Navigator" categories "Indicators" and "Custom Indicators" have been combined into one category "Indicators".



    All custom indicators, examples, and indicators purchased from the MetaTrader AppStore are now shown together with the built-in technical indicators. Four categories of built-in indicators are always displayed first.

  8. Revised the Navigator's context menu.

    Login has been renamed to "Login to Trade Account". Authentication in MQL5.community is available not only via the terminal settings but also via the context menus of the "Accounts" section and its subsections.



    The following changes have been implemented to the account's context menu:
    • Moved "Open an Account" command to the first position.
    • Added "Change Password" feature.
    • Added "Register a Virtual Server" command.

  9. Fixed display of the Label and Bitmap Label graphical objects with the anchor point located in one of the bottom corners of a chart.

MQL5 Language

  1. Added WebRequest() function for working with HTTP requests allowing MQL5 programs to interact with different websites and web services.

    The new function allows any EA to exchange data with third-party websites, perform trades based on the latest news and economic calendar entries, implement analytics, generate and publish automatic reports, read the latest quotes and do many other things that could previously be achieved only by using third-party DLLs of questionable reliability. The new feature is absolutely safe for traders, as they are able to manage the list of trusted websites the programs have access to.

    WebRequest function sends and receives data from websites using GET and POST requests. The new feature is absolutely safe for traders, as they are able to manage the list of trusted websites the programs have access to.




    This option is disabled by default for security reasons.

  2. Added access to signals database and managing signals subscription from MQL5 applications.

    Now, a user can receive the list of signals, evaluate them according to user-defined criteria, select the best one and subscribe to it automatically from a MQL5 program. In fact, it means the advent of the new class of trading robots that periodically look through available signals and subscribe to the one that is most suitable at the moment.

    For this purpose new signal management functions have been added to the MQL5 language:

    • SignalBase*() — functions for accessing the signals database.
    • SignalInfo*() — functions for receiving signal settings.
    • SignalSubscribe() and SignalUnsubscribe() — subscription management functions.

    Thus, a user can not only copy trades, but also to select signals for copying. Both processes are automated.

    By default, a trading robot is not allowed to change signal settings for security reasons. To enable this function, tick the "Allow modification of Signals settings" option in Expert Advisor settings.




  3. Added new properties of the client terminal that are available through the TerminalInfo* functions:
    • TERMINAL_MQID - the property shows that MetaQuotes ID is specified in terminal settings.
    • TERMINAL_COMMUNITY_ACCOUNT - this property shows that MQL5.community account is specified in the settings.
    • TERMINAL_COMMUNITY_ACCOUNT - this property shows that MQL5.community account is specified in the settings.
    • TERMINAL_COMMUNITY_BALANCE - value of balance on the MQL5.community account.
    • TERMINAL_NOTIFICATIONS_ENABLED - shows whether sending notifications through MetaQuotes ID is allowed.

  4. Added functions for working with cryptographic algorithms: CryptEncode() and CryptDecode(). These functions allow you to encrypt and decrypt the data, for example, when sending data over the network using the WebRequest() function. They also allow you to calculate checksums and make data archiving.

    Function signatures:
    int CryptEncode(ENUM_CRYPT_METHOD method,const uchar &data[],const uchar &key[],uchar &result[]);
    int CryptDecode(ENUM_CRYPT_METHOD method,const uchar &data[],const uchar &key[],uchar &result[]);
    A new enumeration ENUM_CRYPT_METHOD has been added for working with the functions:
    CRYPT_BASE64,      // BASE64 encryption (re-encoding)
    CRYPT_AES128,      // AES encryption with 128-bit key
    CRYPT_AES256,      // AES encryption with 256-bit key
    CRYPT_DES,         // DES encryption (key length is 56 bits - 7 bytes)
    CRYPT_HASH_SHA1,   // calculation of HASH SHA1
    CRYPT_HASH_SHA256, // calculation of HASH SHA256
    CRYPT_HASH_MD5,    // calculation of HASH MD5
    CRYPT_ARCH_ZIP,    // ZIP archive

  5. Added an option for changing the size of the properties dialog of MQL5 programs.




  6. Added ability to debug the template functions.
  7. Added definition of the custom indicators that are executed too slowly. If the indicator is slow, "indicator is too slow" entry appears in the Journal.
  8. Fixed the value returned by the IsStopped() function. This function is used for determining the forced stopping of MQL5 programs in custom indicators. Previously, this function always returns FALSE.
  9. Fixed verification of input parameters of MQL5 programs by data type. In particular, for the parameter type uchar, one could specify a value greater than 255.
  10. Fixed an error in StringConcatenate() function.
  11. Fixed FileSize() function for files that are available for writing. Previously, the function returned the file size without considering the latest write operations.
  12. File operations have been revised. Now work with files has become faster.

Trading Signals

  1. Fixed copying of SL and TP values of trade positions in case the number of decimal places in the symbol price of the signal source differs from that of the subscriber.
  2. Fixed copying of trade positions from signal providers with incorrect settings of trade instruments on the side of the trade server.
  3. Fixed closing of positions opened by a trading signal when account Equity value falls below the value specified in the signal copying parameters. In some cases, closing of positions could lead to terminal crash.

MetaEditor

  1. Optimized work with large source text files (tens of megabytes). Increased operation speed and reduced memory consumption.
  2. Fixed navigating through a source code using "Ctrl + -" and "Ctrl + Shift + -" shortcuts.

Fixed errors reported in crash logs.

Updated documentation.

The update will be available through the LiveUpdate system.

11 April 2014
MetaTrader 5 Build 930

Market

  1. Another new product category has been added to MetaTrader AppStore following trading and financial magazines - Books. Now, you can purchase the works of well-known traders and analysts along with trading robots and indicators. The range of books is increasing daily.


    Books in MetaTrader Market

    Just like MetaTrader 5 applications, books can be purchased at MQL5.community Market as well as directly via MetaTrader 5 terminal. All books are accompanied by descriptions and screenshots:




    Before making a purchase, you can download a preview - the first few pages of a book. The exact number of available pages is defined by a seller.

    To buy a book, you should have an MQL5.com account and the necessary amount of funds on it. The account data should be specified at the Community tab of the terminal settings:



    Click Buy on the book's page to purchase it. Purchase confirmation dialog appears:



    To continue, agree to the rules of using the Market service and enter your MQL5.community password. After that, the specified amount of funds will be withdrawn from your account and the book will be downloaded. Buy button will be replaced by Open one.

    Book files are downloaded to My Documents\MQL5 Market\Books\. The download may be performed in two formats:

    • MQB - this protected format is used for paid books. When purchasing and downloading a book file, it is encoded so that it can be opened only on the PC it has been downloaded to. Generation of an encoded copy is called activation. Each book can be activated at least 5 times on different hardware. Book sellers can increase the number of activations at their sole discretion.
    • PDF - this format is used for free books and previews. After downloading, such file can be moved and viewed on other devices.

    The special component called MetaViewer has been added to MetaTrader 5 terminal allowing users to view book files. MetaViewer is a convenient application for viewing books and magazines in MQB and PDF formats. Keyboard arrows are used to turn over the pages: left and right arrows - for page-by-page navigation, while up and down arrows - for scrolling.


    MetaViewer


Trading terminal

  1. Fixed display of Fibonacci Fan graphical object's levels when zooming. A layout could be displaced in earlier builds.
  2. Fixed an error that in some cases prevented graphical objects from being drawn on the chart.
  3. Fixed errors and terminal crashes when working in Wine (for Linux and Mac OS), including crashes that occurred while opening the user guide.
  4. Updated translation of the interface into Arabic.

Market

  1. Revised display of products in MetaTrader AppStore. Applications, magazines and books feature new design:


    Revised Display of Products in Market

  2. Market: Fixed resumed download of large files (primarily, magazines and books) from the Market.

MQL5 Language

  1. Changed StringSplit function operation. Previously, ";A;" string was split into NULL and "A" substrings using ';' separator. Now, it is split into "","A" and "" substrings.
  2. Fixed checking and tracking parameter and operand constancy.

Trading Signals

  1. Added additional checks for the allowed trading modes at a symbol when copying signals. If a signal arrives at a subscriber's account but only closing of positions is allowed at that symbol, this will no longer cause complete termination of signals copying and forced closing of all positions. Now, if a signal for position opening arrives at a subscriber's account, the platform perceives that as the command to synchronize subscriber's and provider's accounts. A signal for position closing is handled as usual.

Strategy Tester

  1. Added interface translations into French, Japanese and Arabic. Updated translations into German, Italian, Polish, Portuguese, Russian, Spanish, Turkish and Chinese.

MetaEditor

  1. Fixed highlighting and navigation through a hieroglyphic text.
  2. Fixed selecting a default trading symbol during an MQL5 application profiling. The default symbol is specified in Debug tab of MetaEditor options.
  3. Fixed display of the tab characters in search results. Previously, the tab characters were ignored and string content was displayed with no spaces.

Fixed errors reported in crash logs.

Updated documentation.

The update will be available through the LiveUpdate system.

7 March 2014
MetaTrader 5 build 910

Trading terminal

  1. Fixed errors and crashes when working in Wine (for Linux, Mac).
  2. Fixed display of Gann Grid graphical object's central line when zooming.

MQL5 Language

  1. Fixed an occasional error when downloading .ex5 files.
  2. Fixed operation of StringToCharArray and StringToTime functions.
Fixed errors reported in crash logs.
Updated documentation.
12345678910111213