发布说明:MetaTrader 4

MetaTrader 4外汇交易平台

19 五月 2017
MetaTrader 4平台build 1090
新版本修复了客户端操作中的一些漏洞。
12 五月 2017
MetaTrader 4 build 1080

一个月前,Microsoft公司发布了其Windows 10 Creators Update (Version 1703)操作系统的重要更新。操作系统更新后,一些用户无法在其程序端运行MQL4程序。这个问题将在新版的MetaTrader 4平台build 1080中进行修正。现在,EA交易和指标都将可以在图表上正确的运行,而不需要使用更新的MetaEditor重新编译。

2017年10月1日起,将不再支持低于1065版本的MetaTrader 4客户端。不支持的程序端版本将无法连接到新的服务器版本。我们强烈建议您提前升级您的程序端。
23 三月 2017
MetaTrader 4平台build 1065

在新版本中,修正了切换时间周期后图表重启EA交易的错误。现在,EA交易不会停止,并且可以正确的重新初始化。

3 二月 2017
MetaTrader 4平台build 1045
伴随Windows 10 build 15007内部预览版的发行,MetaTrader 4平台更新也将于2017年2月3日对外公布。由于新版Windows 10系统更新了安全性,MetaTrader 4客户端可能偶尔无法启动。

请安装新平台,做好迎接即将到来的Windows 10更新版的准备。

16 十二月 2016
MetaTrader 4 build 1031
基于崩溃报告我们修正了一些漏洞。
14 十月 2016
MetaTrader 4 Android build 996
  1. 具备免费的内置聊天功能,可以使交易者与其他MQL5.community 成员进行聊天沟通。在信息接收人的字段指定有意向用户的登录名,以便直接发送信息到该用户的移动设备。

  2. 添加编辑指标水平的功能。
  3. 添加印尼语和印地语的界面翻译。
30 八月 2016
MetaTrader 4 iOS build 975
  1. 新的消息设计。现在,MQL5.community消息和来自桌面平台的推送消息显示为类似于流行的移动messenger聊天。

  2. 现在可以直接从平台切换到22种可用语言的其中一种。如果您在交易时喜欢使用英语界面,您可以在"设置"部分(iPad中的"关于") 进行选择,无需更改您设备上的语言设置。

18 八月 2016
新版MetaTrader 4 build 1010:MQL4的新机遇

程序端

  1. 修正阻止在32位Windows 10,build 1607运行的程序端中执行MQL4应用程序的错误。
  2. 修正偶尔发生的搜索和聊天按键的错误显示。
  3. 修正打开模拟账户时偶尔发送至程序端的重复欢迎邮件。

MQL4

  1. 添加新'void *'指针,以使用户创建抽象对象归集。任何类对象的指针都可以保存至这个变量类型。建议使用操作符dynamic_cast<class name *>(void * pointer) 来转换。如果无法转换,则结果为NULL。
    class CFoo { };
    class CBar { };
    //+------------------------------------------------------------------+
    //| 脚本程序起始函数                                                   |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       void *vptr[2];
       vptr[0]=new CFoo();
       vptr[1]=new CBar();
    //---
       for(int i=0;i<ArraySize(vptr);i++)
         {
          if(dynamic_cast<CFoo *>(vptr[i])!=NULL)
             Print("CFoo * object at index ",i);
          if(dynamic_cast<CBar *>(vptr[i])!=NULL)
             Print("CBar * object at index ",i);
         }
       CFoo *fptr=vptr[1];  // 将返回类型转换指针错误,vptr[1] 并不是CFoo对象
      }
    //+------------------------------------------------------------------+
  2. 添加支持字符串操作符[ ] 。该操作符可以使用户根据索引获得一个字符串符号。如果指定的索引超出了字符串,则结果为0。
    string text="Hello";
    ushort symb=text[0];  // 将返回符号'H'代码
    
  3. 复制历史记录和报价数据的CopyXXX 函数变得更快。
  4. 修正删除使用ObjectDeleteAll函数指定前缀的多个图形对象。更新之前,执行该函数后其余对象可能以一个错误的顺序展示。
  5. 修正改变时间周期后图形对象展示的偶尔错误顺序。

主机

  1. 程序端与虚拟服务器同步期间,现在忽略无EA交易的图表,即使自定义指标在这些图表上正在运行。如果您需要迁移自定义指标,请在未执行 操作的"空"EA交易图表上运行它。通过选择"EA交易:模板",这种EA交易很容易使用MetaEditor的MQL4向导生成。本次更新确保指标的有 意迁移。
  2. 您现在可以同步EA交易和自定义指标,其名称不包含拉丁字符(例如斯拉夫或中文字符)。

修复崩溃日志中报告的错误。


1 七月 2016
MetaTrader 4 build 985:内置MQL5.community 聊天功能

程序端

  1. 新的内置聊天功能。现在,交易者可以从平台直接和他们的MQL5.community朋友与交易者同行进行聊天。聊天功能保留消息的历史记录,以及未读消息数量的功能。若要开始聊天,请从聊天窗口直接登录您的MQL5账户或通过平台设置:'工具' -> '选项' -> '社区'来登录您的MQL5账户。




  2. 优化了程序端启动时内部邮件数据库的读取。

MQL4

  1. 添加在任何图表上显示/隐藏价格和时间比例的选项。在早期版本中,MQL4 应用程序只能更改它正在运行的图表的 CHART_SHOW_PRICE_SCALE 和 CHART_SHOW_DATE_SCALE 属性。
  2. MarketInfo 函数的新 MODE_CLOSEBY_ALLOWED 属性。TRUE 意味着指定金融交易品种允许 Close By 操作(通过反向持仓平仓)。
  3. 修正传递字符串参数到OnChartEvent 进入点。错误可能导致参数的false值。OnChartEvent 允许追踪图表事件:键盘按键事件,鼠标移动等等。
  4. 用ObjectsDeleteAll函数实现快速删除多个图形对象。

信号

  1. 改进自动匹配货币对,包括RUB和RUR。

Tester

  1. 修正标记测试时图形对象创建时间。在早期版本,添加当前程序端时间来替代测试时间。

MetaEditor

  1. 修正打开替代对话框时替代文本字段的焦点设置。
  2. 修正您从当前位置向上搜索时替代多个文本出现。
  3. 修复崩溃日志中报告的错误。


3 六月 2016
MetaTrader 4 Build 970:简化新建模拟账户,扩展MQL4功能

程序端

  1. 简化模拟账户的创建对话框。您不再需要填写繁杂的表格。只需指定基本数据并选择交易参数:账户类型,入金和杠杆。




MQL4

  1. 可执行文件 EX4 的格式发生变化,实现MQL4语言的新功能。所有通过旧版MetaEditor编译的EX4 应用程序在更新后都可以正常工作。因此,与高版本的兼容性得以完全保留。

    Build 970 及以上版本编译的EX4 程序将无法在旧版程序端运行 - 不支持与低版本的兼容性。

  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. 添加 TERMINAL_SCREEN_DPI 值到 ENUM_TERMINAL_INFO_INTEGER 客户端属性枚举 — 数据显示分辨率以每英寸的点数衡量 (DPI)。了解这个参数允许指定图形对象的大小,以便于它们在不同分辨率的显示器下看起来一样。
  5. 添加 TERMINAL_PING_LAST 值到 ENUM_TERMINAL_INFO_INTEGER 客户端属性 — 最后得到的交易服务器ping值以微秒计算。一秒相当于一百万微秒。
  6. DRAW_NONE 缓冲区 (没有图形结构) 现在不参与图表窗口自定义指标的最小值和最大值的计算。
  7. 修正鼠标移动相关的生成事件,鼠标按键点击OBJ_LABEL 和 OBJ_TEXT 类型的对象。之前,如果它们在 OBJ_RECTANGLE_LABEL 和 OBJ_RECTANGLE 类型的其他对象之内,事件生成错误。
  8. 修正绘制自定义指标的零高度直方图。在此之前,不显示这种柱形图,而现在它们有1像素的高度。

信号

  1. 修正比较信号提供商和订阅者的可用交易品种时搜索交易品种。

Tester

  1. 修正当前点差用在测试设置时,txt文件的点差使用。

市场

  1. 修正几个市场展板的显示错误。

MetaEditor

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

修复崩溃日志中报告的错误。

18 五月 2016
MetaTrader 4 Android build 952
  1. Added a pop-up window with detailed information on deals. Examine order open and close time, browse through your comments to positions, and find out the broker commission in a single tap.
  2. Added the red line corresponding to the last bar's Ask price allowing you to manage your trading more accurately.
  3. Improved news management. Select and read the news you really find useful and add desired materials to favorites.
  4. All changes of the analytical object settings are saved after closing the application.
6 五月 2016
MetaTrader 4 iOS build 947

现在,您可以设置一个PIN码来访问应用程序。这样即使您的移动设备丢失也将会为您的账户提供额外保护。在应用程序设置中启用 "锁屏" 。默认情况下,PIN码类似于用来访问一次性密码生成器的代码。

同时,新版包括多项更新和修复。

23 二月 2016
MetaTrader 4 网页平台:一整套的技术指标和38种语言

新版 MetaTrader 4 网页平台 具有一整套的技术分析指标。现在网页平台包括MetaTrader 4桌面版提供的30种最受欢迎的技术分析工具:

Accelerator Oscillator
DeMarker Moving Average
Accumulation/Distribution  Envelopes Moving Average of Oscillator
Alligator Force Index
On Balance Volume
Average Directional Movement Index Fractals Parabolic SAR 
Average True Range
Gator Oscillator Relative Strength Index 
Awesome Oscillator Ichimoku Kinko Hyo Relative Vigor Index
Bears Power
MACD Standard Deviation
Bollinger Bands
Market Facilitation Index
Stochastic Oscillator
Bulls Power
Momentum Volumes
Commodity Channel Index
Money Flow Index Williams' Percent Range

网页平台界面现在提供38种语言。最近已经添加了14 种新语言:

荷兰语
立陶宛语 克罗地亚语
希腊语 罗马尼亚语 捷克语
希伯来语 塞尔维亚语
瑞典语
意大利语 斯罗维尼亚语
爱沙尼亚语
拉脱维亚语
芬兰语



现在就启动网页平台,测试新功能吧!

15 二月 2016
MetaTrader 4 网页平台现在具有威廉姆斯指标功能

新版MetaTrader 4 网页平台具有通过使用WebGL新技术所提供的更快速的图表性能 — 现在即使运行多个指标,网页平台仍会保持最佳性能。

网页平台现在具备技术指标功能。已经添加以下威廉姆斯指标

  1. Alligator
  2. Fractals
  3. Market Facilitation Index
  4. Awesome Oscillator
  5. Accelerator Oscillator
  6. Gator Oscillator
网页平台界面现已添加了印地语,乌兹别克语和乌克兰语的翻译。
15 一月 2016
MetaTrader 4 iOS build 945
  • 在iPad版添加纵向定向支持。现在您可以方便地查看较长的交易操作列表,以及阅读新闻和电子邮件。
  • 添加支持iPad Pro。
  • 新的语言界面:韩语。
  • 多种漏洞修复和改进。
23 十二月 2015
MetaTrader 4 build 950: 内置视频和性能提升

主机

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


    该视频以及许多其他视频都在 MetaQuotes 软件公司 YouTube 官方频道提供。

程序端

  1. 修正导航窗口子文件夹中的MQL4程序分类。 应用程序通过名称进行分类。
  2. 修正在超高清屏幕(4K)下绘制网络连接状态指标
  3. 修正新闻部分打印预览窗口的显示。
  4. 程序端日志查看器添加了全功能搜索,搜索EA交易,策略测试和虚拟主机。 您可以向前和向后搜索,搜索全词和切换大小。

MetaEditor

  1. 在MQL4向导添加了教学视频链接 "如何收集自动交易" 。 请观看该三分钟视频,开发自动交易,无需编写单行代码。



    该视频以及许多其他视频都在 MetaQuotes 软件公司 YouTube 官方频道提供。

MQL4

  1. 修正了SignaBaseTotal 函数的返回值。 在某些情况下,该函数返回零值来替代程序端中提供的信号总数。
  2. 修正在MQL4程序的不同时间表上编辑图形对象可视化。 在某些情况下,对象改变属性后在图表上无法看到。

Tester

  1. 修正测试结果价格值的显示和SL\TP水平。
修正崩溃日志中报告的错误。


11 十二月 2015
MetaTrader 4 build 940: 优化高分辨率屏幕

程序端

  1. 程序端:程序端界面已经完全适应了高分辨率屏幕(4K)。用户界面的所有元素都可以在大屏幕上完美展示。在小屏幕上,UI 元素会自动放大,来提高阅读性。




MQL4

  1. 修正在Windows 10 编译期间可能偶尔导致"EX4编写错误"的漏洞。
  2. 修正在脚本和EA交易加载外部DLL时可能偶尔导致错误的漏洞

主机

  1. 如果从EA交易调用指标,修正了迁移带有该包含EA4 程序库调用的自定义指标的交易环境。

信号

  1. 修正信号订阅页面的错误通知。例如,通知对缺乏所需交易品种的复制,通知不同的交易条件等等。

MetaEditor

  1. 修正打开窗口的排列显示,如果其中一个窗口最大化。打开的文件可以使用窗口菜单的相应命令进行平铺,层叠,垂直和水平排列。


修复崩溃日志中报告的错误。
26 十一月 2015
MetaTrader 4 build 920: 操作更快,管理来自配置文件的可视测试

程序端

  1. 修复在交易账户开户对话框中的初始和定期的交易服务器扫描。现在,及时定义可用性和pings,无需手动扫描。




  2. 优化和加快了客户端的操作。
  3. 程序端界面进一步适应了高分辨率屏幕(4K)。

MQL4

  1. 修复从MQL4资源下载自定义指标。指标通过#resource指令列入资源。这允许创建更易于分布的"一体化" 应用程序。
  2. 修正显示在自定义指标的水平值的精度。此前,精度一直由4位小数组成,而现在它取决于适当的自定义指标值的准确性。
  3. 修正当将对象作为方法/函数参数时检查因沿袭导致的减少一个类型对象到另一个类型的可能性。
  4. 修正如果数据通过固定大小的数组进行设置,那么要在指定缓冲区重新计算标准指标(iIndicatorOnArray) 。此前,指标偶尔不会重新计算。
  5. 修正类模板中的错误。

Tester

  1. 添加从ini配置文件启动tester时管理可视化模式的功能。新的TestVisualEnable 参数(true/false)已经为此执行。 如果没有指定参数,则使用当前设置。
  2. 修正CopyXXX 函数的错误,其导致返回真实的历史数据,而不是测试历史数据。
  3. 修正从命令行的ini配置文件读取测试参数。
  4. 修正关闭可视测试图表后过度重新分配内存,这可能偶尔会使实际操作EA交易的历史数据无法使用。

修复崩溃日志中报告的错误。

12 十一月 2015
MetaTrader 4 build 910: 强化代码库功能并改进Windows 10的界面

代码库

  1. 修正并加快从代码库下载MQL4程序的速度。直接在平台下载免费的自动交易源代码和指标。

程序端

  1. 修正从内存卸载价格历史。之前在内存不足的情况下会有错误发生。
  2. 修正在Windows 10工作时一些用户界面元素的展示。
  3. 修正使用退格键从图表删除图形对象。

信号

  1. 改进并修正交易信号展示的翻译。

MQL4

  1. 新增SYMBOL_VISIBLE 只读属性到ENUM_SYMBOL_INFO_INTEGER 枚举。
  2. 修正模板操作。
  3. 假如数据源的数据区域和接收方完全或部分重叠,修正复制字符串数组时的ArrayCopy函数行为。

Tester

  1. 添加测试MQL5市场指标和EA交易模拟版时的限制。现在,强制提前当前程序端日期一周的时间完成测试付费产品的模拟版。

MetaEditor

  1. 修正工具提示和其他应用程序之间的偶然冲突。

修复崩溃日志中报告的错误。
22 十月 2015
MetaTrader 4 Build 900: MQL4类模板和优化内存使用

程序端

  1. 修正更改非活动账户的密码(无关)。



  2. 优化处理大量历史数据时内存的使用和释放。
  3. 修正和优化处理大量的新闻类别。

信号

  1. 通过导航窗口快捷菜单修正信号退订。



MQL4

  1. 添加类模板允许您创建类似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(i=0;i<10;i++)
          str+=" "+(string)ExtIntArray[i];      
       Print(str);   
       str="Dbl:";
       for(i=0;i<10;i++)
          str+=" "+DoubleToString(ExtDblArray[i],1);
       Print(str);   
       str="Ptr:";
       for(i=0;i<10;i++)
          str+=" "+(string)ExtPtrArray[i].X();      
       Print(str);
    //--- 通过new创建的CFoo对象不应删除,因为它们在TArrayPtr<CFoo>对象的析构函数被删除  
      }
    执行结果:
    TemplTest EURUSD,M1: Ptr: 30 31 32 33 34 35 36 37 38 39
    TemplTest EURUSD,M1: Dbl: 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0
    TemplTest EURUSD,M1: Int: 10 11 12 13 14 15 16 17 18 19
  2. 修正有时可能导致MQL4程序崩溃的ArrayCopy函数的内存中的重新分配。

Tester

  1. 修正测试指标后偶尔造成无效的全局声明变量的错误。
  2. 修正交易服务器连接丢失时的测试。

MetaEditor

  1. 修正type转换情况下在MetaAssist 定义函数名称。
  2. 修正打开大文件。
  3. 添加 F 热键用于从代码库选项卡调用搜索函数,以及在处理代码命令的状态栏的多个提示:增加/减少缩进,导航,情况转移,等等。


修复崩溃日志中报告的错误。
1234567