MetaTrader 5新功能

桌面版,移动版和网页平台的更新历史

22 四月 2016
新版MetaTrader 5 build 1325:锁仓选项和实时报价测试

程序端

  1. 我们已经添加第二个账户系统—锁仓,该新系统能够扩大零售外汇交易者的可能性。现在,每个交易品种可以有多个持仓,包括反向持仓。这就为实施基于所谓“锁定”的交易策略铺平道路 — 如果价格对交易者反向移动,他们可以打开一个反向持仓。

    由于新系统类似于在MetaTrader 4中使用的系统,它将被交易者所熟知。与此同时,交易者将能够享受第五代平台版本的全部优势 — 使用多个交易填写订单 (包括部分填充),支持MQL5 云网络的多货币和多线程测试等等。

    现在,您可以使用一个账户从事依附于净额系统,一个工具仅允许一个持仓的市场交易,以及在同一个平台使用另一个账户从事外汇交易和使用锁仓。

    新建锁仓账户,查看持仓账户类型
    持仓账户系统设置在一个账户水平,并显示在程序端窗口标题和日志:



    要新建一个锁仓模拟账户,请启用相应选项: 




    净额系统
    通过这个系统,在同一时间,一个交易品种您只能有一个普通持仓:

    • 如果一个交易品种有一个持仓,同向执行一个交易会提高该持仓的交易量。
    • 如果反向执行交易,那么现有的交易量可能减少,持仓可能会被关闭 (成交交易量等于持仓交易量时) 或撤销 (如果反向成交的交易量大于当前持仓)。

    这没关系,导致反向交易的是 — 已执行的市场订单或触发的挂单。

    下面示例显示了执行两个每笔0.5手的EURUSD买入交易:


    执行这两个交易即是1手的一个普通持仓。

    锁仓系统
    通过这个系统,您可以一个交易品种拥有多个持仓,包括反向持仓。

    如果您有一个交易品种的持仓,执行一个新交易(或触发挂单),那么会另外建立一个新持仓。您当前持仓不会改变。

    下面示例显示了执行两个每笔0.5手的EURUSD买入交易:


    执行这些交易则会新建两个独立的持仓。

    新交易操作类型 - Close By
    新的交易类型已经被加入锁仓账户 — 通过反向持仓来平仓。这个操作允许在单一交易品种关闭两个反向的持仓。如果反向持仓手数不同,那么两个持仓中只有一个订单保留持仓。其交易量将等于平仓手数的差异值,而持仓方向和开盘价将匹配平仓的更大(交易量)。

    相比单独关闭两个持仓,关闭反向持仓允许交易者保留一个点差:

    • 单独平仓情况下,交易者必须支付一个点差两次:以低价位(卖价)关闭买入持仓和高价位关闭卖出持仓(买价)。
    • 使用反向持仓时,第二个持仓的开盘价被用于关闭第一个持仓,而第一个持仓的开盘价被用于关闭第二个持仓。


    在后面那种情况下,下单"close by" 订单。平仓信息在该评论指明。一组反向持仓通过两个"out by"交易关闭。关闭两个持仓得到的总利润/亏损只在一个交易中指明。


  2. 除了支持锁仓外,新版平台还为从MetaTrader 4迁移账户提供了更广泛的机会。现在,交易商可以自动转移账户到MetaTrader 5,包括所有的操作:持仓和挂单,完成交易历史。

    首次连接从MetaTrader 4迁移的账户时会打开一个欢迎对话框。在迁移过程中,数据的传输安全加密。若要开始使用,请指定您在MetaTrader 4使用的账户密码,然后设置一个新密码。



    连接一旦成功,您将可以继续使用您的账户,就好似它已在MetaTrader 5持仓。来自MetaTrader 4所有交易的完整历史记录会自动添加到新账户。

    订单和持仓(包括历史订单)标签在导入过程中不会保留,因为从MetaTrader 4导入一个历史记录可能相当于MetaTrader 5中的4个历史操作。所有的交易记录都会分配新的标签。

    根据交易商导入的方式可以保留或替代账号。

  3. 程序端:新增聊天功能。现在,您可以与您的MQL5.community朋友和同事进行交流沟通了。聊天显示了您MQL5 账户的所有个人信息。开始沟通时,可以直接从聊天窗口登录您的账户或通过平台设置登录:工具 -> 选项 -> 社区。




  4. 程序端:简化的模拟账户创建对话框,添加创建锁仓账户的能力。您不再需要填写大表格。只需指定基本数据和选择交易参数:账户类型,入金,杠杆和锁仓功能。




  5. 添加自动分配模拟账户以便快速启动。如果平台还没有账户,第一个可用交易服务器上的模拟账户会在启动时分配。成功打开后,账户连接马上建立。

  6. 现在,每个持仓有一个标签 — 一个独一无二的号码。它通常匹配用于持仓的订单标签,除非标签更改为服务器上服务操作的结果,例如,收取重新持仓库存费时。程序端更新后,标签被自动分配到所有可用持仓。



  7. 修正建立导致持仓反转的市场订单时设置的止损和获利水平。直到目前,没有适当的水平设置给新持仓。
  8. 修正单击交易面板上显示4位及更多小数位的价格。
  9. 修正打印预览窗口的新闻显示。
  10. 修正报价图表显示。
  11. 修正程序端紧急关闭后打开市场深度。
  12. 添加如果显示单击交易面板控制元素时允许市场订单的检查。
  13. 假设大量新建订单和持仓情况下,优化利润和预付款计算。
  14. 添加用户界面的马来语翻译。
  15. 完全修改后的用户手册。新设计,交互式屏幕截图和嵌入式视频 — 以最大的方便性了解MetaTrader 5的交易:



  16. 修正"前景图表"模式下图形对象的展示。

Tester

  1. 新增在实时报价历史测试自动交易和技术指标的能力。

    真实报价的测试和优化尽可能地接近实际情况。代替基于分钟数据生成的报价,现在可以使用交易商积累的真实报价。有许多来自交易商和流动量提供商的报价。

    若要开始测试或优化真实报价,请在策略测试选择相应的模式:



    报价数据的大小要比分钟数据大。第一次测试期间,下载它可能需要较长的世界。按月下载的报价数据被存储在TKC文件,在 \bases\[trade server name]\ticks\[symbol name]\。
    测试真实报价
    当测试一个真实报价时,一分钟柱内的点差可能改变,因此生成一分钟报价时,使用相应柱固定的点差。

    如果一个交易品种显示市场深度,那么柱形图会严格根据最后执行的交易价格(Last)来构建。否则,tester会根据收盘价首次尝试构建柱形图,如果这些价格不存在,则使用卖价。无论收盘价是否存在,所有报价上都会触发OnTick 事件。

    请 注意,即使根据收盘价构建图表,交易操作也会始终根据卖价和买价执行。例如,如果仅使用开盘柱进行交易的EA交易(例如内置移动平均指标)收到了收盘价信 号,它以另一个价格执行一个交易(取决于方向的买价或卖价)。如果使用“每一报价”模式,柱形图通过卖价构建,而交易通过卖价和买价执行。买价作为卖价+ 对应分钟柱固定点差来计算。

    如果交易品种历史有一个无报价数据的分钟柱,tester 在“每一报价”模式下生成报价。这允许测试一定时期内的EA,以防交易商报价数据的不足。如果交易品种历史记录没有分钟柱但是有适当的分钟报价数据,那么这些报价可以忽略。分钟数据被认为更可靠。

    在MQL5 云网络测试真实报价
    测试真实报价现在不仅可用于本地和远程代理,还可以通过MQL5 云网络实现。可能需要几个月的策略优化,通过数千台电脑的计算能力,可能几个小时就可完成。

    若要使用MQL5云网络测试策略,请启动使用云代理:



    使用MQL5云网络测试真实报价可以消耗大量的数据。这可以显著影响使用网络能力的支付。
  2. 修正几个交易品种类型上妨碍计算手续费的错误。
  3. 修正根据相应持仓的专家字段填写激活SL/TP得到的交易订单的专家字段。之前,不填写这些内容。
  4. 修正切换到通常状态并进一步优化结果的标签。
  5. 修正计算和显示“轨道线”指标。
  6. 优化可视化测试。
  7. 优化了大量新建订单和持仓时的利润和预付款计算。
  8. 优化高频交易期间的交易操作。
  9. 现在,如果是非关键交易品种属性请求(不需要当前报价),则不执行历史同步。例 如,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 等等。之前,非关键交易品种历史记录在其属性的任何请求下都会同步。
  10. 修正按照每年比例计算库存费。ixed calculation of swaps as a percentage per annum.

MQL5

  1. 可执行文件EX5的格式已经变成实施MQL5语言的新功能和MetaTrader 5的新锁仓选项。通过之前版本MetaEditor编译的所有EX5应用程序更新后将能正常工作,例如正向兼容性完全保留。

    build 1325及以上版本编译的EX5程序将无法在旧版构建的程序端运行 - 不支持反向兼容性。

  2. 添加支持抽象类和纯虚函数。

    抽象类用于创建您期待用于创建更具体派生类的通用实体。抽象类仅能用作一些其他类的基本类,这就是不能创建抽象类类型对象的原因。

    至少包含一个纯虚拟函数的类是抽象类。因此,从抽象类派生出来的类必须实施其所有纯虚拟函数,否则它们也将是抽象类。

    虚拟函数通过使用pure-specifier语法声明为"pure"。考虑CAnimal类的示例,它的创建只能提供常用功能 – CAnimal类型的对象对于实际使用太普通。因此,CAnimal 是一个很好的抽象类示例:
    class CAnimal
      {
    public:
                          CAnimal();     // 构造函数
       virtual void       Sound() = 0;   // 纯虚拟函数
    private:
       double             m_legs_count;  // 动物脚的数量
      };
    这里Sound() 是一个纯虚拟函数,因为它声明为纯虚拟函数PURE (=0)的说明符。

    纯虚拟函数只是为设置PURE说明符的虚拟函数:(=NULL) 或(=0)。抽象类声明和使用的示例:
    class CAnimal
      {
    public:
       virtual void       Sound()=NULL;   // PURE 类函数,应被覆盖在派生类中,CAnimal 现在是抽象类,不能创建
      };
    //--- 派生自一个抽象类
    class CCat : public CAnimal
     {
    public:
      virtual void        Sound() { Print("Myau"); } // PURE被覆盖,CCat 不是抽象类,可以创建
     };
    
    //--- 错误使用的例子
    new CAnimal;         // 'CAnimal' 错误 - 编译器返回"不能实例化抽象类"的错误
    CAnimal some_animal; // 'CAnimal' 错误 - 编译器返回"不能实例化抽象类"的错误
    
    //--- 正确使用的示例
    new CCat;  // 没有错误 - CCat 类不是抽象类
    CCat cat;  // 没有错误 - CCat 类不是抽象类
    抽象类的限制
    如果抽象类的构造函数调用一个纯虚拟函数(直接或间接),结果是未定义的。
    //+------------------------------------------------------------------+
    //| 抽象基类                                                          |
    //+------------------------------------------------------------------+
    class CAnimal
      {
    public:
       //--- 纯虚拟函数
       virtual void      Sound(void)=NULL;
       //--- 函数
       void              CallSound(void) { Sound(); }
       //--- 构造函数
       CAnimal()
        {
         //--- 虚拟类函数的显式调用
         Sound();
         //--- 隐式调用(使用第三个函数)
         CallSound();
         //--- 构造函数或析构函数始终调用自己的函数,
         //--- 即使它们是虚拟函数并且已经被派生类中已调用的函数所覆盖
         //--- 如果调用的函数是纯虚拟函数
         //--- 调用会引起“纯虚拟函数调用”的关键的执行错误
        }
      };
    然而,抽象类的构造函数和析构函数可以调用其他成员函数。

  3. 添加支持函数指针来简化事件模式的安排。

    若要声明一个函数指针,请指定"函数指针"类型,例如:
    typedef int (*TFunc)(int,int);
    现在,TFunc是一种类型,可以声明函数的变量指针:
    TFunc func_ptr;
    func_ptr 变量可以存储函数地址以便稍后声明:
    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;           // 错误:neg 不是 int (int,int) 型
    Print(func_ptr(10));    // 错误:应该有两个参数
    函数指针可以被存储并作为参数传递。您不能得到非静态类函数的指针。

  4. MQL5:MqlTradeRequest 有两个新字段:

    • position — 持仓标签。锁仓模式交易下为了明确识别而改变和关闭持仓时来填写。在净额系统,填写字段不会有任何影响,因为持仓只识别一个交易品种名称。
    • position_by — 反向持仓标签。它用于通过反向持仓平仓时(打开一个同名但反向的交易品种)。该标签仅用于锁仓系统。

  5. 添加TRADE_ACTION_CLOSE_BY 值到 ENUM_TRADE_REQUEST_ACTIONS 交易操作类型枚举 — 通过反向持仓。该标签仅用于锁仓系统。

  6. 添加交易操作标签到适当订单,交易和持仓属性的枚举:

    • 添加ORDER_TICKET 属性到 ENUM_ORDER_PROPERTY_INTEGER — 订单标签。每个订单会分配一个独一无二的号码。
    • 添加 DEAL_TICKET 属性到 ENUM_DEAL_PROPERTY_INTEGER — 交易标签。每笔交易会分配一个独一无二的号码。
    • 添加POSITION_TICKET 属性到 ENUM_POSITION_PROPERTY_INTEGER — 持仓标签。每个新持仓会分配一个独一无二的号码。它通常匹配用于持仓的订单标签,除非标签更改为服务器上服务操作的结果,例如,收取重新持仓库存费时。若 要找出一个用于持仓的订单,请应用POSITION_IDENTIFIER 属性。POSITION_TICKET 值对应MqlTradeRequest::position。

  7. 添加ORDER_TYPE_CLOSE_BY 值到 ENUM_ORDER_TYPE 订单类型枚举 — close by 订单。
  8. 添加ORDER_POSITION_BY_ID 值到 ENUM_ORDER_PROPERTY_INTEGER 订单属性枚举 — ORDER_TYPE_CLOSE_BY 类型订单的反向持仓标识符。
  9. 添加DEAL_ENTRY_OUT_BY 值到 ENUM_DEAL_ENTRY 交易方向枚举 — 由close by操作执行交易。
  10. MqlTradeTransaction 也有两个类似的字段:


    • position — 由交易活动影响的持仓标签。这里填写处理市场订单(TRADE_TRANSACTION_ORDER_* except TRADE_TRANSACTION_ORDER_ADD,在这里持仓标签尚未分配) 和订单历史(TRADE_TRANSACTION_HISTORY_*)相关的交易活动。
    • position_by — 反向持仓标签。它用于通过反向持仓平仓时(打开一个同名但反向的交易品种)。这里只填写通过反向持仓而平仓的订单 (close by) 和通过反向持仓而关闭的交易 (out by)。

  11. 添加PositionGetTicket 函数 — 根据持仓列表的索引返回一个持仓标签和使用PositionGetDouble, PositionGetInteger 和PositionGetString函数自动选择持仓用于进一步工作。
    ulong  PositionGetTicket(
       int  index      // 持仓列表索引
       );

  12. 添加PositionSelectByTicket 函数 — 通过指定标签为进一步工作选择一个持仓。
    bool  PositionSelectByTicket(
       ulong   ticket     // 持仓标签
       );

  13. 添加SYMBOL_MARGIN_HEDGED 值到 ENUM_SYMBOL_INFO_DOUBLE 交易品种属性枚举 — 合约大小或一手锁仓预付款(一个交易品种的反向持仓)。

    • 如果一个交易品种指定了初始预付款 (SYMBOL_MARGIN_INITIAL),锁仓预付款被指定为绝对值(以货币计算)。
    • 如果没有设置初始预付款(等于0),预付款计算中将被使用的合约大小在SYMBOL_MARGIN_HEDGED指定。预付款使用对应一个交易品种类型 (SYMBOL_TRADE_CALC_MODE)的等式计算。

    锁仓预付款计算的详细信息会在MetaTrader 5 交易平台帮助中说明。

  14. 添加ACCOUNT_MARGIN_MODE 值到 ENUM_ACCOUNT_INFO_INTEGER 账户属性枚举 — 当前交易账户的预付款计算模式:

    • ACCOUNT_MARGIN_MODE_RETAIL_NETTING — 用于净额模式账户持仓时的场外交易市场(一个交易品种一个持仓)。预付款计算基于交易品种类型 (SYMBOL_TRADE_CALC_MODE)。
    • ACCOUNT_MARGIN_MODE_EXCHANGE — 用于交易所市场。预付款计算基于交易品种设置中指定的折扣。折扣由交易商设置,但是它们不能低于交易所设置的值。
    • ACCOUNT_MARGIN_MODE_RETAIL_HEDGING — 用于独立持仓账户场外交易市场(锁仓,一个单一交易品种可以有多个持仓)。预付款计算基于交易品种类型 (SYMBOL_TRADE_CALC_MODE)。也要考虑锁仓预付款大小 (SYMBOL_MARGIN_HEDGED) 。

  15. 添加TERMINAL_SCREEN_DPI 值到 ENUM_TERMINAL_INFO_INTEGER 客户端属性枚举 — 分辨率显示数据通过每英寸的点数来衡量 (DPI)。该参数的信息允许指定图形对象的大小,这样它们在不同分辨率的显示器上看起来一样。

  16. 添加 TERMINAL_PING_LAST 值到 ENUM_TERMINAL_INFO_INTEGER 客户端属性 — 以微秒计算交易服务器最后得到的ping值。一秒等于一百万微秒。

  17. 修正返回SendFTP函数调用结果。之前,成功发送后返回 FALSE 而不是 TRUE。
  18. 修正偶尔导致"违规访问"执行错误的StringConcatenate函数错误。
  19. 修正使用模板函数时发生的几个错误。
  20. 添加为打印,警示和评论功能显示超过4000字符行的能力。
  21. 修正ArrayCompare函数通过不同于开始时期的初始持仓变化来比较数组和函数本身时产生的错误。
  22. 添加支持标准库的锁仓功能:

    CPosition
    添加类函数:

    • SelectByMagic — 根据魔幻数选择持仓和进一步工作的交易品种。
    • SelectByTicket — 通过进一步工作的标签选择持仓。

    CTrade
    添加类函数:

    • RequestPosition — 收到持仓标签。
    • RequestPositionBy — 接收反向持仓标签。
    • PositionCloseBy — 通过反向持仓支持标签平仓。
    • SetMarginMode — 根据当前账户设置来设置预付款计算模式。

    添加重载类函数:

    • PositionClose — 平仓标签。
    • PositionModify — 修改持仓标签。

    CAccountInfo
    改变类函数:

    • MarginMode — 接收预付款计算模式。直至目前,类函数的工作类似于新的StopoutMode 类函数。
    • MarginDescription — 接收预付款计算模式为字符串。直至目前,类函数的工作类似于新的StopoutModeDescription类函数

    添加类函数:

    • StopoutMode — 接收最小预付款水平规范模式。
    • StopoutModeDescription — 接收最小预付款水平规范模式为字符串。

    CExpert
    添加类函数:

    • SelectPosition — 为进一步工作选择持仓。

  23. 对标准程序库添加一些改进。
  24. 修正卸载DLLs。
  25. 添加支持模板类构造函数。

信号:

  1. 修正几个交易信号窗显示错误。

MetaEditor

  1. 修正“全字匹配”模式下文件的搜索词。
  2. 添加在所需文件的编译结果行上双击移动到一个文件。
  3. 修正显示Windows XP中的一些控制元素。
更新文档。
1 四月 2016
MetaTrader 5 平台 Build 1295

程序端

  1. 为了扩展零售外汇交易者的可能性,我们添加了第二账户系统 — 锁仓。现在,每个交易品种可以有多个持仓,包括反向持仓。这就为实施基于所谓“锁定”的交易策略铺平道路 — 如果价格对交易者反向移动,他们可以打开一个反向持仓。

    由于新系统类似于在MetaTrader 4中使用的系统,它将被交易者所熟知。与此同时,交易者将能够享受第五代平台版本的全部优势 — 使用多个交易填写订单 (包括部分填充),支持MQL5 云网络的多货币和多线程测试等等。

    现在,您可以使用一个账户从事依附于净额系统,一个工具仅允许一个持仓的市场交易,以及在同一个平台使用另一个账户从事外汇交易和使用锁仓。

    新建锁仓账户,查看持仓账户类型
    持仓账户系统设置在一个账户水平,并显示在程序端窗口标题和日志:



    要新建一个锁仓模拟账户,请启用相应选项:




    净额系统
    通过这个系统,在同一时间,一个交易品种您只能有一个普通持仓:

    • 如果一个交易品种有一个持仓,同向执行一个交易会提高该持仓的交易量。
    • 如果反向执行交易,那么现有的交易量可能减少,持仓可能会被关闭 (成交交易量等于持仓交易量时) 或撤销 (如果反向成交的交易量大于当前持仓)。


    这没关系,导致反向交易的是 — 已执行的市场订单或触发的挂单。

    下面示例显示了执行两个每笔0.5手的EURUSD买入交易:


    执行这两个交易即是1手的一个普通持仓。

    锁仓系统
    通过这个系统,您可以一个交易品种拥有多个持仓,包括反向持仓。

    如果您有一个交易品种的持仓,执行一个新交易(或触发挂单),那么会另外建立一个新持仓。您当前持仓不会改变。

    下面示例显示了执行两个每笔0.5手的EURUSD买入交易:


    执行这些交易则会新建两个独立的持仓。

    新交易操作类型 - Close By
    新的交易类型已经被加入锁仓账户 — 通过反向持仓来平仓。这个操作允许在单一交易品种关闭两个反向的持仓。如果反向持仓手数不同,那么两个持仓中只有一个订单保留持仓。其交易量将等于平仓手数的差异值,而持仓方向和开盘价将匹配平仓的更大(交易量)。

    相比单独关闭两个持仓,关闭反向持仓允许交易者保留一个点差:

    • 单独平仓情况下,交易者必须支付一个点差两次:以低价位(卖价)关闭买入持仓和高价位关闭卖出持仓(买价)。
    • 使用反向持仓时,第二个持仓的开盘价被用于关闭第一个持仓,而第一个持仓的开盘价被用于关闭第二个持仓。


    在后面那种情况下,下单"close by" 订单。平仓信息在该评论指明。一组反向持仓通过两个"out by"交易关闭。关闭两个持仓得到的总利润/亏损只在一个交易中指明。



  2. 新增在实时报价历史测试自动交易和技术指标的能力。

    真实报价的测试和优化尽可能地接近实际情况。代替基于分钟数据生成的报价,现在可以使用交易商积累的真实报价。有许多来自交易商和流动量提供商的报价。

    若要开始测试或优化真实报价,请在策略中选择相应的模式



    报价数据的大小要比分钟数据大。第一次测试期间,下载它可能需要较长的世界。按月下载的报价数据被存储在TKC文件,在 \bases\[trade server name]\ticks\[symbol name]\。

    测试真实报价
    当测试一个真实报价时,一分钟柱内的点差可能改变,因此生成一分钟报价时,使用相应柱固定的点差。

    如果一个交易品种显示市场深度,那么柱形图会严格根据最后执行的交易价格(Last)来构建。否则,tester会根据收盘价首次尝试构建柱形图,如果这些价格不存在,则使用卖价。无论收盘价是否存在,所有报价上都会触发OnTick 事件。

    请注意,即使根据收盘价构建图表,交易操作也会始终根据卖价和买价执行。例如,如果仅使用开盘柱进行交易的EA交易(例如内置移动平均指标)收到了收盘价信号,它以另一个价格执行一个交易(取决于方向的买价或卖价)。如果使用“每一报价”模式,柱形图通过卖价构建,而交易通过卖价和买价执行。买价作为卖价+对应分钟柱固定点差来计算。

    如果交易品种历史有一个无报价数据的分钟柱,tester 在“每一报价”模式下生成报价。这允许测试一定时期内的EA,以防交易商报价数据的不足。如果交易品种历史记录没有分钟柱但是有适当的分钟报价数据,那么这些报价可以忽略。分钟数据被认为更可靠。
    目前,真实报价的测试和优化仅可能在本地和远程代理。支持MQL5 云网络 在不久的将来也会加入。

  3. Added the Chat. 现在,您可以与您的MQL5.community朋友和同事进行交流沟通了。聊天显示了您MQL5 账户的所有个人信息。开始沟通时,可以直接从聊天窗口登录您的账户或通过平台设置登录:工具 -> 选项 -> 社区。




  4. 简化的模拟账户创建对话框,添加创建锁仓账户的能力。您不再需要填写大表格。只需指定基本数据和选择交易参数:账户类型,入金,杠杆和锁仓功能。



  5. 添加自动分配模拟账户以便快速启动。如果平台还没有账户,第一个可用交易服务器上的模拟账户会在启动时分配。成功打开后,账户连接马上建立。

  6. 现在,每个持仓有一个标签 — 一个独一无二的号码。它通常匹配用于持仓的订单标签,除非标签更改为服务器上服务操作的结果,例如,收取重新持仓库存费时。程序端更新后,标签被自动分配到所有可用持仓。




  7. 修正建立导致持仓反转的市场订单时设置的止损和获利水平。直到目前,没有适当的水平设置给新持仓。
  8. 修正单击交易面板上显示4位及更多小数位的价格。
  9. 修正打印预览窗口的新闻显示。
  10. 修正报价图表显示。
  11. 修正程序端紧急关闭后打开市场深度。
  12. 添加如果显示单击交易面板控制元素时允许市场订单的检查。
  13. 假设大量新建订单和持仓情况下,优化利润和预付款计算。
  14. 添加用户界面的马来语翻译。
  15. 全修改后的用户手册。新设计,交互式屏幕截图和嵌入式视频 — 以最大的方便性了解MetaTrader 5的交易:




MQL5

  1. 添加支持抽象类和纯虚函数。

    抽象类用于创建通用实体,这就是您期待用于创建更具体的派生类。抽象类仅能用作一些其他类的基本类,这就是不能创建抽象类类型对象的原因。

    至少包含一个纯虚拟函数的类是抽象类。因此,从抽象类派生出来的类必须实施其所有纯虚拟函数,否则它们也将是抽象类。

    虚拟函数通过使用pure-specifier语法声明为"pure"。考虑CAnimal类的示例,它的创建只能提供常用功能 – CAnimal类型的对象对于实际使用太普通。因此,CAnimal 是一个很好的抽象类示例:
    class CAnimal
      {
    public:
                          CAnimal();     // 构造函数
       virtual void       Sound() = 0;   // 纯虚拟函数
    private:
       double             m_legs_count;  // 动物腿的数量
      };
    这里Sound() 是一个纯虚拟函数,因为它声明为纯虚拟函数PURE (=0)的说明符。

    纯虚拟函数只是为设置PURE说明符的虚拟函数:(=NULL) 或(=0)。抽象类声明和使用的示例:
    class CAnimal
      {
    public:
       virtual void       Sound()=NULL;   // PURE 类函数,应被覆盖在派生类中,CAnimal 现在是抽象类,不能创建
      };
    //--- 抽象类的后裔
    class CCat : public CAnimal
     {
    public:
      virtual void        Sound() { Print("Myau"); } // PURE被覆盖,CCat 不是抽象类,可以创建
     };
    
    //--- 错误使用的例子
    new CAnimal;         // 'CAnimal' 错误 - 编译器返回"不能实例化抽象类"的错误
    CAnimal some_animal; // 'CAnimal' 错误 - 编译器返回"不能实例化抽象类"的错误
    
    //--- 正确使用的示例
    new CCat;  // 没有错误 - CCat 类不是抽象类
    CCat cat;  // 没有错误 - CCat 类不是抽象类
    抽象类的限制
    如果抽象类的构造函数调用一个纯虚拟函数(直接或间接),结果是未定义的。
    //+------------------------------------------------------------------+
    //| 抽象基类                                           |
    //+------------------------------------------------------------------+
    class CAnimal
      {
    public:
       //--- 纯虚拟函数
       virtual void      Sound(void)=NULL;
       //--- 函数
       void              CallSound(void) { Sound(); }
       //--- 构造函数
       CAnimal()
        {
         //--- 虚拟类函数的显式调用
         Sound();
         //--- 隐式调用(使用第三个函数)
         CallSound();
         //--- 构造函数或析构函数始终调用自己的函数,
         //--- 即使它们是虚拟函数并且已经被派生类中已调用的函数所覆盖
         //--- 如果调用的函数是纯虚拟函数
         //--- 调用会引起“纯虚拟函数调用”的关键的执行错误
        }
      };
    然而,抽象类的构造函数和析构函数可以调用其他成员函数。

  2. 添加支持函数指针来简化事件模式的安排。

    若要声明一个函数指针,请指定"函数指针"类型,例如:
    typedef int (*TFunc)(int,int);
    现在,TFunc是一种类型,可以声明函数的变量指针:
    TFunc func_ptr;
    func_ptr 变量可以存储函数地址以便稍后声明:
    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;           // 错误:neg 不是 int (int,int) 型
    Print(func_ptr(10));    // 错误:应该有两个参数
    函数指针可以被存储并作为参数传递。您不能得到非静态类函数的指针。

  3. MqlTradeRequest 有两个新字段:

    • position — 持仓标签。锁仓模式交易下为了明确识别而改变和关闭持仓时来填写。在净额系统,填写字段不会有任何影响,因为持仓只识别一个交易品种名称。
    • position_by — 反向持仓标签。它用于通过反向持仓平仓时(打开一个同名但反向的交易品种)。该标签仅用于锁仓系统。

  4. 添加TRADE_ACTION_CLOSE_BY 值到 ENUM_TRADE_REQUEST_ACTIONS 交易操作类型枚举 — 通过反向持仓。该标签仅用于锁仓系统。

  5. 添加交易操作标签到适当订单,交易和持仓属性的枚举:

    • 添加ORDER_TICKET 属性到 ENUM_ORDER_PROPERTY_INTEGER — 订单标签。每个订单会分配一个独一无二的号码。
    • 添加 DEAL_TICKET 属性到 ENUM_DEAL_PROPERTY_INTEGER — 交易标签。每笔交易会分配一个独一无二的号码。
    • 添加POSITION_TICKET 属性到 ENUM_POSITION_PROPERTY_INTEGER — 持仓标签。每个新持仓会分配一个独一无二的号码。它通常匹配用于持仓的订单标签,除非标签更改为服务器上服务操作的结果,例如,收取重新持仓库存费时。若要找出一个用于持仓的订单,请应用POSITION_IDENTIFIER 属性。POSITION_TICKET 值对应MqlTradeRequest::position。

  6. 添加ORDER_TYPE_CLOSE_BY 值到he ENUM_ORDER_TYPE 订单类型枚举 — close by 订单。
  7. 添加ORDER_POSITION_BY_ID 值到ENUM_ORDER_PROPERTY_INTEGER 订单属性枚举 —ORDER_TYPE_CLOSE_BY 类型订单的反向持仓标识符。
  8. 添加DEAL_ENTRY_OUT_BY 值到 ENUM_DEAL_ENTRY 交易方向枚举 — 由close by操作执行交易。
  9. MqlTradeTransaction 也有两个类似的字段:

    • position — 由交易活动影响的持仓标签。这里填写处理市场订单(TRADE_TRANSACTION_ORDER_* except TRADE_TRANSACTION_ORDER_ADD,在这里持仓标签尚未分配) 和订单历史(TRADE_TRANSACTION_HISTORY_*)相关的交易活动。
    • position_by — 反向持仓标签。它用于通过反向持仓平仓时(打开一个同名但反向的交易品种)。这里只填写通过反向持仓而平仓的订单 (close by) 和通过反向持仓而关闭的交易 (out by)。

  10. 添加PositionGetTicket函数 — 根据持仓列表的索引返回一个持仓标签和使用PositionGetDouble, PositionGetInteger 和PositionGetString函数自动选择持仓用于进一步工作。
    ulong  PositionGetTicket(
       int  index      // 持仓列表索引
       );

  11. 添加PositionSelectByTicket 函数 — 通过指定标签为进一步工作选择一个持仓。
    bool  PositionSelectByTicket(
       ulong   ticket     // 持仓标签
       );

  12. 添加SYMBOL_MARGIN_HEDGED 值到 ENUM_SYMBOL_INFO_DOUBLE 交易品种属性枚举 — 合约大小或一手锁仓预付款(一个交易品种的反向持仓)。

    • 如果一个交易品种指定了初始预付款 (SYMBOL_MARGIN_INITIAL),锁仓预付款被指定为绝对值(以货币计算)。
    • 如果没有设置初始预付款(等于0),预付款计算中将被使用的合约大小在SYMBOL_MARGIN_HEDGED指定。预付款使用对应一个交易品种类型 (SYMBOL_TRADE_CALC_MODE)的等式计算。

    锁仓预付款计算的详细信息会在MetaTrader 5 交易平台帮助中说明。

  13. 添加ACCOUNT_MARGIN_MODE 值到 ENUM_ACCOUNT_INFO_INTEGER 账户属性枚举 — 当前交易账户的预付款计算模式:

    • ACCOUNT_MARGIN_MODE_RETAIL_NETTING — 用于净额模式账户持仓时的场外交易市场(一个交易品种一个持仓)。预付款计算基于交易品种类型 (SYMBOL_TRADE_CALC_MODE)。
    • ACCOUNT_MARGIN_MODE_EXCHANGE — 用于交易所市场。预付款计算基于交易品种设置中指定的折扣。折扣由交易商设置,但是它们不能低于交易所设置的值。
    • ACCOUNT_MARGIN_MODE_RETAIL_HEDGING — 用于独立持仓账户场外交易市场(锁仓,一个单一交易品种可以有多个持仓)。预付款计算基于交易品种类型 (SYMBOL_TRADE_CALC_MODE)。也要考虑锁仓预付款大小 (SYMBOL_MARGIN_HEDGED) 。

  14. 添加TERMINAL_SCREEN_DPI 值到 ENUM_TERMINAL_INFO_INTEGER 客户端属性枚举 — 分辨率显示数据通过每英寸的点数来衡量 (DPI)。该参数的信息允许指定图形对象的大小,这样它们在不同分辨率的显示器上看起来一样。

  15. 添加 TERMINAL_PING_LAST 值到 ENUM_TERMINAL_INFO_INTEGER 客户端属性 — 以微秒计算交易服务器最后得到的ping值。一秒等于一百万微秒。

  16. 修正返回SendFTP函数调用结果之前,成功发送后返回 FALSE 而不是 TRUE。
  17. 修正偶尔导致"违规访问"执行错误的StringConcatenate函数错误。
  18. 修正使用模板函数时发生的几个错误。
  19. 添加为打印,警示和评论功能显示超过4000字符行的能力。
  20. 修正ArrayCompare函数通过不同于开始时期的初始持仓变化来比较数组和函数本身时产生的错误。
  21. 添加支持标准库的锁仓功能:

    CPosition
    添加类函数:

    • SelectByMagic — 根据魔幻数选择持仓和进一步工作的交易品种。
    • SelectByTicket — 通过进一步工作的标签选择持仓。

    CTrade
    添加类函数:

    • RequestPosition — 收到持仓标签。
    • RequestPositionBy — 接收反向持仓标签。
    • PositionCloseBy — 通过反向持仓支持标签平仓。
    • SetMarginMode — 根据当前账户设置来设置预付款计算模式。

    添加重载类函数:

    • PositionClose — 平仓标签。
    • PositionModify — 修改持仓标签。

    CAccountInfo
    改变类函数:

    • MarginMode — 接收预付款计算模式。直至目前,类函数的工作类似于新的StopoutMode 类函数。
    • MarginDescription — 接收预付款计算模式为字符串。直至目前,类函数的工作类似于新的StopoutModeDescription类函数。

    添加类函数:

    • StopoutMode — 接收最小预付款水平规范模式。
    • StopoutModeDescription — 接收最小预付款水平规范模式为字符串。

    CExpert
    添加类函数:

    • SelectPosition — 为进一步工作选择持仓。

  22. 对标准程序库添加一些改进。


信号

  1. 修正几个交易信号窗显示错误。


Tester

  1. 修正几个交易品种类型上妨碍计算手续费的错误。
  2. 修正根据相应持仓的专家字段填写激活SL/TP得到的交易订单的专家字段。之前,不填写这些内容。
  3. 修正切换到通常状态并进一步优化结果的标签。
  4. 修正计算和显示“轨道线”指标。
  5. 优化可视化测试。
  6. 假设大量新建订单和持仓情况下,优化利润和预付款计算。
  7. 优化高频交易期间的交易操作。
  8. 现在,如果是非关键交易品种属性请求(不需要当前报价),则不执行历史同步。例如,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等等。之前,非关键交易品种历史记录在其属性的任何请求下都会同步。

MetaEditor

  1. 修正“全字匹配”模式下文件的搜索词。
  2. 添加在所需文件的编译结果行上双击移动到一个文件。
  3. 修正显示Windows XP中的一些控制元素。


  1. 更新文档。
31 三月 2016
MetaTrader 5 iOS build 1261
  1. 交易平台现在还支持第二种持仓账户系统 — 锁仓系统。新系统允许创建相同金融工具的多个持仓,包括反向持仓。现在,该平台既通过净额系统提供股票交易和还通过两种可用系统其中之一提供外汇交易。

    新持仓账户系统类似于MetaTrader 4中的系统,并结合了第五代平台的所有优势 — 使用多个交易 (包括部分填充)执行订单,止损限价订单,和更多订单模式。

    立即更新平台,了解锁仓功能的工作方式。新建一个新模拟账户时,启用\"使用锁仓\"选项。如果您交易商的服务器已经更新及配置,就可使用这个选项。

  2. 另外,新版本还包括小漏洞的修复和改进。
31 三月 2016
MetaTrader 5 Android build 1262
  1. 交易平台现在还支持第二种持仓账户系统 — 锁仓系统。新系统允许创建相同金融工具的多个持仓,包括反向持仓。现在,该平台既通过净额系统提供股票交易和还通过两种可用系统其中之一提供外汇交易。

    新持仓账户系统类似于MetaTrader 4中的系统,并结合了第五代平台的所有优势 — 使用多个交易 (包括部分填充)执行订单,止损限价订单,和更多订单模式。

    立即更新平台,了解锁仓功能的工作方式。新建一个新模拟账户时,启用"使用锁仓"选项。如果您交易商的服务器已经更新及配置,就可使用这个选项。

  2. 另外,新版本还包括小漏洞的修复和改进。
12 二月 2016
MetaTrader 5 Android build 1224
  • 平板电脑版本添加一个新窗口显示有关交易操作的详细信息。点击一个订单或交易,查看其最近一秒的打开和关闭时间,评论和交易商手续费。
  • 改进新闻部分。根据您的兴趣选择新闻类别。添加喜爱的新闻条目到收藏夹,以便需要时快速访问。
  • 添加周期分隔符,在图表上显示高级时间表边框。
  • 在图表上添加显示买价线。
  • 新的界面语言:韩语和越南语。
  • 在图表上增加的最大数量的对象。
  • 多种漏洞修复和改善。
3 二月 2016
MetaTrader 5 iOS build 1225
  • 为 iPad 添加纵向模式。现在,您可以通过长列表浏览交易操作,以及更便利地阅读您的电邮和财经新闻。
  • 添加 iPad Pro的本地支持。
  • 添加韩语翻译。
17 十二月 2015
新版MetaTrader 5 平台 Build 1240:操作更快以及嵌入式视频

主机

  1. 在虚拟主机向导对话框添加了教学视频链接"如何租用虚拟平台" 。请观看这个两分钟视频,学习如何轻松启动自动交易或全天候24小时复制信号。.


    该视频以及许多其他视频都在 MetaQuotes软件公司YouTube 官方频道提供。
  2. 主机:修正从EA交易调用自定义指标或调用自定义指标中的EX5程序库时的主机迁移。.

程序端

  1. 高频交易期间(每秒50及更多操作),加速打开订单和持仓列表的更新。
  2. 大量交易品种(上万种)情况下优化并显著加速一台交易服务器程序端的初始同步。现在,建立连接后您可以更快速的开展工作。
  3. 优化并显著减少程序端的内存消耗。
  4. 关闭/打开程序端时添加保存和恢复市场深度的设置。
  5. 修正拖拽程序端窗口时发生在Windows 10下的构件。
  6. 修正许多命令和对话框的上下文帮助。若要激活有关特定元素的帮助,请将光标移至其上面并按下F1。
  7. 使界面适应高分辨率屏幕(4K)的工作正在进行中。

MQL5

  1. 为负责接收订单和交易数据的OrderGetString,HistoryOrderGetString,和HistoryDealGetString函数添加新属性:

    • ORDER_EXTERNAL_ID - 外部交易系统的订单ID(在交易所)。
    • DEAL_EXTERNAL_ID - 外部交易系统的成交 ID 。

  2. 修正使用架构和类时ZeroMemory 函数的操作。在某些情况下内存清理不执行。
  3. 添加SendFTP 函数操作期间的错误代码。该函数发送文件到选项窗口FTP标签上指定的地址。

    • ERR_FTP_NOSERVER - 设置中不指定FTP服务器
    • ERR_FTP_NOLOGIN - 设置中不指定FTP登录名
    • ERR_FTP_FILE_ERROR - 文件不存在
    • ERR_FTP_CONNECT_FAILED - 连接FTP服务器失败
    • ERR_FTP_CHANGEDIR - FTP服务器未发现文件上传目录
    • ERR_FTP_CLOSED - FTP服务器连接关闭

  4. 修正子类对象和其父类之间通过继承方式的类型转换访问。
  5. 修正类模板中的几处错误。
  6. 修正使用CopyTicks函数的请求报价。当为连续相同交易报价指定COPY_TICKS_TRADE 参数(仅复制交易报价)时,只有第一个报价会通过。
  7. 修正定制类型变量大小的定义。
  8. 修正在CryptDecode函数中使用ZLib时导致无限解压缩循环的错误。

Tester

  1. 修正与主测试交易品种不同的交易品种的历史价格同步。
  2. 修正OnTrade交易事件处理程序中加倍TRADE_TRANSACTION_DEAL_ADD 交易(添加交易到历史记录)。
  3. 更改了遗传优化期间的测试行为。现在,所有遗传优化后获得的独特结果都参与传递。之前,只有1/4的结果可以使用。.

MetaEditor

  1. 添加教学视频"如何在MQL5向导中创建自动交易"的链接到MQL5向导。请观看该三分钟视频,开发自动交易,无需编写单行代码。


    该视频以及许多其他视频都在 MetaQuotes软件公司YouTube 官方频道提供。
  2. 修正其中一个窗口完全展开时的窗口排列命令。窗口菜单允许您平铺,垂直,水平和层叠排列打开的文件。
  3. 使界面适应高分辨率屏幕(4K)的工作正在进行中。
更新文档。
19 十一月 2015
MetaTrader 5 Android Build 1172
  1. 改进交易品种图表缩放:增加缩放步数,强化显示流畅度。

    MetaTrader 5 Android Build 1172:便利的图表缩放和债券属性的应计利息

  2. 无论以任何方式关闭应用程序后,市场报价中交易品种及其序列设置和图表设置的全部变化(比例,配色方案,对象和指标列表) 都会被保存。
  3. 添加面值和债券属性的应计利息。
11 十一月 2015
MetaTrader 5 iPhone build 1171
漏洞修复和改善。
30 十月 2015
新的MetaTrader 5 Build 1210:增强市场深度和常规改进

程序端

  1. 添加以低于市场深度市场价的价格下限价订单的功能。这允许您在市场以指定价格获得一个订单执行保证。

    如果我们通过买家/卖价界限拖拽限价订单,它将变成止损订单(买入限价将被买入止损替代,而卖出限价-变为卖出止损)。按住Crtl 拖拽,可以使限价订单不被替换为止损订单。




  2. 在图表设置添加“显示快速交易按键”。这可以使您从图表隐藏一键交易面板启用按键和市场深度。




  3. 修正提示工具和其他应用之间偶尔出现的冲突。

MQL5

  1. 修正以AS_SERIES标识的动态数组复制历史数据时Copy*函数的操作。标识通过ArraySetAsSeries函数设置,表明以时间序列执行数组元素的指数化。
  2. 更改通过ChartSetInteger和ChartGetInteger管理的CHART_SHOW_ONE_CLICK 属性。之前,该属性允许在图表上显示/隐藏一键交易面板。现在,它也显示/隐藏图表上设置一键交易面板和市场深度的按键(类似图表设置中的“显示快速交易 按键”“)。
  3. 修正模板操作。
更新文档。

23 十月 2015
MetaTrader 5平台更新 Build 1200:接收报价历史和直接支付服务

程序端

  1. 在市场报价新增使用报价历史的功能。之前,操作期间报价图表只显示程序端收集的历史。现在,在交易服务器上您就可以访问整个报价历史。禁用自动滚 动,使用鼠标适时开始回滚报价图表,以常见价格图表相同的方式从交易服务器下载缺失的历史。新功能将有助于想要获得最详细价格图表的交易者。



    使用CopyTicks() 函数接收更深层次的报价历史。如果后者在交易服务器上,那么它已得到修改以便于它可以请求缺失的历史并下载它。

  2. 新增一个快速打开/关闭市场深度的图标。该图标位于图表上的一键交易面板的附近。您也可以使用新的热键Alt+B。热键也用于市场报价窗口,可以打开市场报价中突出显示的交易品种的市场深度。




  3. PC硬件特点和操作系统的信息现在从客户端开始就已经记录在日志中。例如:
    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. 改进市场报价中交易品种的工作。

    • 添加市场报价中交易品种显示的数量和交易服务器上可用的交易品种总数。
    • 通过智能选择列表添加一行以便添加新交易品种。
    • 新交易品种行的搜索不仅可以通过交易品种名称执行,还可以通过其描述和国际名称完成。




  5. 添加支持不同语言的经济日历。
  6. 添加经济日历缺失的国家图标。
  7. 添加在市场报价打开交易品种管理窗口的热键 - Ctrl+U。
  8. 修正根据窗口菜单命令安排打开图表窗口。
  9. 修正使用强化认证时偶尔阻碍程序端查找证书文件的错误。
  10. 修正有时可能导致价格历史同步循环的错误。
  11. 如果交易品种在请求执行模式下进行交易,修正了交易量增加后之前持仓的无效止损/止盈水平。
  12. 如果交易品种的买入持仓在市场深度的“只买入”交易模式,修正了下卖单的检查功能。
  13. 修正追踪止损功能的操作。在一些罕见的情况下,持仓的保护性止损的不正确移动。
  14. 程序端界面进一步适用于高分辨率的屏幕(4K)。
  15. 修正卸载尽管MQL5程序定期要求却还是过多的历史数据。
  16. 修正在Windows10下工作时一些用户界面的显示问题。
  17. 更新用户界面的翻译。

市场

  1. 已修改并优化MQL5市场中产品数据库的操作。
  2. VPS上已经禁止程序端无MQL5.community账户的购买。现在购买需要在程序端设置中指定MQL5.community账户:工具-选项-社区。
  3. 添加使用银联直接购买产品。
  4. 增强在MQL5市场购买产品时的日志内容。


主机和信号

  1. 支付虚拟主机和信号订阅现在可以直接从付款系统转账。

    若要支付主机服务,用户无需登录MQL5.community账户充值。 为服务付款现在可以使用一种可用的付款系统从平台直接转账。



    选择一种可用的系统,进行网上转账:




    同样,为交易信号订阅付款也可以通过付款系统从程序端直接完成。




    所需金额将首先转到您的MQL5.community 账户,从这里完成为服务付款。因此,您可以拥有一个明确统一的租赁虚拟主机平台和信号订阅的历史并可以轻松访问和审查您MQL5.community 服务的全部付款。
  2. 添加在32位客户端工作时管理虚拟主机(迁移除外)。
  3. 修正迁移FTP出口设置到虚拟主机,尽管允许通过FTP发布报告。

MQL5

  1. 启用新优化的编译器。在64位平台上的程序执行速度提升了5倍。MQL5程序在最近的MetaEditor版本中应该重新编译。
  2. 扩展的MqlTick 结构格式。现在,通过了以毫秒为单位的报价到达时间,以及决定哪个报价参数已被更改的标识。
    struct MqlTick
      {
       datetime     time;          // 最近更新价格的时间
       double       bid;           // 当前卖价
       double       ask;           // 当前买价
       double       last;          // 当前收盘价
       ulong        volume;        // 当前收盘价的交易量
       long         time_msc;      // 以毫秒为单位的最近更新价格的时间
       uint         flags;         // 报价标识
      };
    无论与之前报价相比是否有变化都会填充每个报价参数。因此,可以找出过去任何时刻的正确价格,无需在报价历史搜索之前的值。例如,即使报价到达期间只有卖价变化,该结构仍然包含其他参数,包括之前的买价,交易量等等。您可以分析报价标识,找出具体更改了哪个数据:

    • TICK_FLAG_BID - 更改卖价
    • TICK_FLAG_ASK  - 更改买价
    • TICK_FLAG_LAST - 更改最终成交价
    • TICK_FLAG_VOLUME - 更改交易量
    • TICK_FLAG_BUY - 报价是买入交易结果
    • TICK_FLAG_SELL - 报价是卖出交易结果

    MqlTick 结构通过两种类函数使用:

    • CopyTicks - 该类函数不支持旧的结构格式。当调用CopyTicks函数时,之前使用旧的报价格式编译的EX5函数将返回错误4006 (ERR_MQL_INVALID_ARRAY)。
    • SymbolInfoTick - 该类函数同时支持新旧两种结构格式。

  3. 添加允许您创建类似C++中的参数化类的类模板。那甚至可以使其更加抽象并且能够以统一的方式使用相同的代码处理不同类的对象。使用示例:
    //+------------------------------------------------------------------+
    //|                                                    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"
    //+------------------------------------------------------------------+
    //| 声明一个模板类                                                     |
    //+------------------------------------------------------------------+
    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]);
         }   
      };
    //+------------------------------------------------------------------+
    //| 指针数组的模板类析构函数,删除                                       |
    //| 对象,数组中存储指针的对象。                                         |
    //|                                                                  |
    //| 请注意继承TArray 模板类                                            |
    //+------------------------------------------------------------------+
    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];
         }
      };
    //+--------------------------------------------------------------------------+
    //| 声明类。对象指针将存储在数组中                                               |
    //+--------------------------------------------------------------------------+
    class CFoo
      {
       int               m_x;
    public:
                         CFoo(int x):m_x(x) { }
       int               X(void) const { return(m_x); }
      };
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    TArray<int>     ExtIntArray;   // 例如 TArray (int 类型 的特定TArray )
    TArray<double>  ExtDblArray;   // 例如TArray (double类型的特定 TArray )
    TArrayPtr<CFoo> ExtPtrArray;   // 例如 TArrayPtr (CFoo类型的特定 TArrayPtr )
    //+------------------------------------------------------------------+
    //| 脚本程序起始函数                                                   |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //--- 用数据填充数组
       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);
         }
    //--- 输出数组内容
       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);
    //--- 通过new创建的CFoo对象不应删除,因为它们在TArrayPtr<CFoo>对象的析构函数被删除  
      }
    执行结果:
    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. 新操作 * 和 & 通过引用接收变量和接收引用变量。
  5. 添加ObjectsDeleteAll 函数的重载形式 - 通过图表子窗口的名称前缀删除指定类型的全部对象。
    int  ObjectsDeleteAll(
       long           chart_id,   // 图表ID
       const string     prefix,   // 对象名称前缀
       int       sub_window=-1,   // 窗口指数
       int      object_type=-1    // 删除的对象类型
       );

  6. 修正ObjectGetValueByTime 函数操作。之前,有时可能会返回错误的图表时间价格值(例如,水平趋势线)。
  7. 修正服务器上缺乏历史数据时的Copy*函数的操作。 之前,这种情况在返回控制之前会导致30-50秒的延迟。
  8. 为MQL5标准程序库添加了一些改进。
  9. 标准程序库 文档翻译为德语,法语,中文,土耳其语,西班牙语和葡萄牙语。
  10. 添加了日语MQL5 文档

Tester

  1. 选择在策略测试中运行的程序的过程变得更加容易。 现在根据存储EA交易和指标的目录,以树状显示列表。




  2. 显示客户端线型可视化测试期间的一些指标。
  3. 修正了通过策略测试调试MQL5程序时设置杠杆和图表时间表。
  4. 修正历史记录测试时调试指标。
修正崩溃日志中报告的错误。

更新文档。


17 九月 2015
MetaTrader 5 iPhone build 1167
  • 提高分析对象的便利性。它们现在只出现在当前图表。在其他交易品种中显示可以在对象设置中启用。若要优化图表区域,只为您需要的时间表启用对象展示。
  • 通过启用周期分隔符打开当前图表的高级时间表边框显示。
  • iOS 9 兼容性改进。
28 八月 2015
MetaTrader 5 iPhone Build 1165
  • 改进新闻部分。根据您的兴趣选择新闻类别。添加喜爱的新闻条目到收藏夹,以便需要时快速访问。根据新闻提要搜索新闻。
  • 在iPhone 版中现在可以从图表单击执行交易 - 把设备转成横屏并打开快速交易面板。
  • MetaTrader 5 iOS build 1165

  • 新增担保工具平仓选项,允许将对应资产转化为存款货币。
  • 多种漏洞修复和改善。
26 八月 2015
MetaTrader 5 Android build 1164
  1. 添加24种新的技术分析图形对象:线型图,通道,江恩和斐波纳契工具,埃利奥特波动和几何图形。

    新版 MetaTrader 5 Android:24 种分析对象和 OTP 双重认证

  2. 添加支持双重身份验证(一次性密码,OTP)用来连接交易账户
  3. 各种漏洞修复和改进
24 六月 2015
MetaTrader 5 Android build 1130
  1. 添加用于联系交易商支持团队的内部邮件系统
  2. 添加发送日志到应用程序开发者支持团队的功能
  3. 各种漏洞修复和改进

在这里阅读完整的新闻文本。

3 六月 2015
MetaTrader 5 build 622: 更简单快速地从市场购买自动交易

现在,您可以无需注册即可从您的MetaTrader 4/5 程序端直接一步购买任何市场 应用程序。只需点击购买和选择首选支付方式。


然后,您将被重新定向到支付系统的网页,完成购买。PayPal,WebMoney,Neteller 或银行卡 - 您可以选择从现有自动交易和指标商店购买产品的支付方式。


购买之后,我们仍然建议您注册一个MQL5.community账户,以便您的产品可以自动连接到您的账户。MQL5账户可以帮您更新产品并在多台电脑上安装它。此外,MQL5.community 账户还可以使您有机会访问MetaTrader平台的大量的其他服务, 例如复制成功交易者交易的 交易信号,可以连续操作应用程序的虚拟主机 和从开发者订购独一无二自动交易的自由职业者服务

现在,您应该了解了获得自动交易的最快最轻松的方法。5 000多种MetaTrader 应用程序已做好准备,在市场中等待着您 - 只需 选择和购买


3 六月 2015
MetaTrader 5 iPhone build 1127
  • 新增特定类型非交易工具的支持,它可用作客户资产为其他工具持仓提供所需的预付款。这种资产显示为持仓。它们提高了可用预付款的金额,因此增加了账户上允许的交易操作量。
  • 新界面语言:印地语。
  • 多种漏洞修复和改善。
22 五月 2015
MetaTrader 5 平台更新 Build 1150:轻松地市场购买,历史交易记录和交易时间&交易销售的调试

市场

  1. 我们引进了"直接" 购买的新机制。现在从市场购买自动交易或指标更加容易,并且您甚至无需MQL5.community账户。

    一步购买
    用户无需登录MQL5.community 账户,向里面充值。现在可以使用平台提供的支付系统直接从平台购买支付产品。为了保持市场购买历史记录的清楚性和统一性,所需的支付额将首先转到您的MQL5.community账户,在那里完成产品的支付。

    您可以轻松地从您MQL5.community 个人档案访问和查看您的所有支付记录。





    购买无需注册
    没有MQL5.community账户也可以在市场购买产品。点击"购买" 并使用提供的支付系统为产品付款。



    然后您将回到到支付系统网页,完成购买。



    在那之后,我们强烈建议您注册一个MQL5.community账户,您的购买将会自动关联到账户。这能够使您可以在多个计算机更新和安装产品。

编辑器

  1. 新功能允许在历史价格调试EA和技术指标。在旧版中,调试需要实时图表。

    现在,在所需的历史数据可以测试任何程序。调试是在策略测试的可视化测试模式中运行。应用程序在tester的模拟序列报价图表上执行。

    在MetaEditor设置中配置调试参数:交易品种,时间表,间隔,执行模式,报价生成模式,初始入金和杠杆。这些参数将被应用于可视化测试。



    在代码中设置断点,然后使用历史价格开始调试。



    这将启动可视化测试和调试过程。



主机

  1. 虚拟主机服务中已经实现了多个改进和修复。

    主要变化是在运行Linux和Mac OS的计算机上操作 Wine。在Wine中所有功能都可用于所有分配的虚拟服务器,包括移动,监控性能和查看日志。


    日志操作也已经变化。如果用户请求记录太多,那么只有特定时期的部分开始日志可被下载。这会防止因日志数量过大而导致的性能退化。如果您想要进一步下载日志,您不再需要更改请求日期。只需在日志查看器窗口选择最后一排并按下PgDn。.




程序端

  1. 添加支持一种特殊类型的非交易资产,它可以作为客户资产,为其他交易工具所有的持仓提供所需的预付款。例如,在一个交易者的账户中有一定数量的黄金实物 ,它可以用作持仓预付款(担保)。

    诸如此类的资产都显示为持仓。它们的值通过以下公式计算:合约大小 * 手数 * 市场价格 * 流动性比率。

    这里,流动性比率意味着交易商允许用于预付款的资产比率。


    资产被添加至客户净值并提高了可用预付款,从而增加了允许账户操作的交易量。

    因此,现在可以开通多种预付款类型的账户。


    在上面示例中,交易者拥有1盎司黄金,当前市值1 210.56USD。该值被加入净值并且在零结余情况下可用预付款允许交易者继续交易。

  2. 新的点图表市场深度和交易时间&销售数据。

    拥有实际交易价格的交易工具报价图表现在显示在市场深度。交易上进行的所有事务都绘制在这个图表上:
    • 红圈 - 卖出交易
    • 蓝圈 - 买入交易
    • 绿圈 - 交易方向未定义。它用于交易无法传输交易方向的时候。在这种情况下,交易方向基于相较于卖价买价的交易价格来决定。买入交易就是在买价或更高价格下执行,卖出交易在卖价或更低价格执行。如果交易价格在卖价和买价之间,则不定义方向

    圆圈越大,交易量越大。交易量在订单号图表下也显示为直方图。



    在直方图的上部和下部,会显示当前买卖提供的总交易量。

  3. 交易品种选择对话框现在包含显示交易品种到期日期的列。以及,从列表可以隐藏到期工具。到期合约自动替换为活动合约。



    所有到期交易品种都被隐藏以保持更紧凑的显示。这在期货市场的工作中会尤其有用。无关交易品种是通过"最后交易"参数定义的到期交易品种。这个日期在"到期"列中指明。若要查看所有交易品种,请点击"显示到期合约"。
    为了更便于显示,交易品种列表会自动分类:

    • 首先列出来的是没有到期日期的交易品种
    • 紧接着是始于最近日期到期的交易品种
    • 然后显示始于去年到期的过期交易品种
    • 按照字母顺序排列的其他交易品种

    快捷菜单中的选项"自动移除到期交易品种"允许以"市场报价"窗口的活动交易品种替代过期交易品种。



    程序端重启后,过期交易品种被隐藏,活动交易品种替代添加。例如,LKOH3.15的到期期货合约将被接下来的定义相同的资产LKOH6.15合约所替代。

    如果没有EA交易运行,那么相应打开图表中的交易品种也会被替代。

  4. 修正更新市场深度窗口中的交易按钮取决于是否有持仓,以及仅持有买入持仓的权限。如果没有持仓,那么关闭按钮无法使用。如果不允许卖出持仓,那么卖出按钮无法使用。
  5. 程序端界面进一步适应高分辨率屏幕(4K)。
  6. 修正请求执行模式下验证关闭持仓交易量,防止交易量少于最小允许值。
  7. 修正可能导致从一个目录启动多个程序端实例的错误。
  8. 新增以不同语言支持和自动过滤经济日历。依据程序端界面语言执行过滤。
  9. 日志查看器现在具有通过当前显示的日志进行搜索的功能。



    它搜索日志显示列表中的单词/词组。
  10. 添加泰语的客户端翻译。
  11. 更新北印度语的客户端翻译。

MQL5

  1. 新函数GetMicrosecondCount 返回自从MQL5程序启动后通过的微秒数:
    ulong  GetMicrosecondCount();
    该函数可以用于配置程序和确定"bottlenecks"。

  2. ENUM_OPENCL_PROPERTY_INTEGER枚举中的新图表属性CL_BUFFER_SIZE - 它以字节返回OpenCL buffer实际大小。该属性可以通过CLGetInfoInteger函数接收。
  3. WebRequest 函数的错误通知已经更改。如果错误发生,'result' 数组将包含错误描述。
  4. ArraySort,ArrayBsearch,ArrayMinimum 和 ArrayMaximum 分类和搜索功能现在可以使用多维数组。分类和搜索只能通过第一个(0)数组指数来执行。之前,这些功能只能在一维数组下使用。
  5. 修正宏编译的一些漏洞。

Tester

  1. 可视化测试操作中的一些改进和漏洞修复。测试器现在通过工具条提供更顺畅的测试速度控制。

修正崩溃日志中报告的错误

  1. 更新的文档。

将通过LiveUpdate系统提供更新。

1 五月 2015
MetaTrader 5 iPhone build 1105
  • 新增支持64位处理器的功能。
  • 优化内部聊天功能:改进同步功能并更新设计。
  • 添加创建匿名模拟账户的功能,用于即时操作。该账户无需注册数据,轻击即可打开。
  • 改进新闻功能:自动筛选语言,改进新闻的表现形式。
  • 提高交易请求的发送速度。
  • 添加在图表上显示买价线的功能。
  • 为虚拟主机的通知添加特殊的分类。
  • 新增泰语,越南语,马来语和乌克兰语的用户界面翻译。
  • 大量的功能改善和增强。
20 三月 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.

12345678910111213