MetaTrader 5新功能

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

6 十二月 2019

新版MetaTrader 5平台build 2265:用于MQL5 3D可视化的DirectX功能和策略测试中的交易品种设置

程序端

  1. 有更多列可显示在市场报价中。现在,还提供之前只显示在“详细信息”选项卡中的额外40种交易品种参数。




  2. 添加在导航中突出显示当前连接的账户和当前服务器。这个功能在您有多个不同交易商账户的情况下,将非常实用。




  3. 更新图表框架设计。框架更小,因此为有用信息留出更多空间。




  4. 改进将交易历史显示为持仓时计算交易总量的算法。现在根据实际记录计算该数值。

    要将交易历史显示为持仓,程序端会使用请求期间执行的交易信息。只有在此期间关闭的持仓才会显示在历史中。如果持仓仍未完结或平仓时间超出所选间隔,则将不会显示在历史记录中。因此,持仓模式下的总盈利和手续费可能不同于“订单/交易”历史模式下的总盈利和手续费。

    例如,您正在查看过去一周的历史。在此期间,执行了100笔交易,其中98笔参与了20个持仓的开仓和平仓。最近两笔交易开设新持仓,目前尚未结束。在这种情况下,交易历史包含100条记录和基于这些交易计算的总值。当以持仓的形式查看历史时,您将看到基于98笔交易收集的20条记录。当计算总值时,只有这些数据将被考虑。如果交易商收取入市交易费,那么交易历史中的最终手续费值将不同于持仓历史中显示的手续费,因为在后一种情况下,最后两笔交易将被忽略。

  5. 实现更快启动MQL5程序。
  6. 程序端安装文件中添加了新/beta键,可以下载测试版。在正常模式下,应该先安装发布版,然后才可更新到测试版。现在跳过这一步骤,从而节省时间和流量。安装开始示例:
    C:\mt5setup.exe /beta
  7. 修正显示“交易所股票”类型交易品种的预付款需求。
  8. 通过使用Clang/LLVM编译器,加速所有平台组件的操作。在某些情况下,编译速度可提高20%。

MQL5

  1. 为3D可视化添加新DirectX 11功能和着色器。现在,可以在MQL5中直接创建3D图形。

    新CCanvas3D类是CCanvas自定义图形类的扩展。它位于\MQL5\Include\Canvas\目录。这个类的功能是可通过DirectX API渲染3D对象。

    • 创建 — 创建一个场景。
    • 附加 — 将场景绑定到图表。
    • 破坏 — 破坏一个场景。
    • ObjectAdd — 将继承自CDXObject基类的子对象添加到场景中。
    • 渲染 — 通过ObjectAdd方法添加的完整渲染循环,包括所有CDXObject的缓冲区清除和渲染。
    • RenderBegin — 启动场景渲染,使用指定颜色(如果设置DX_CLEAR_COLOR标识)和深度缓冲区(使用DX_CLEAR_DEPTH时)填充渲染缓冲区,并为默认着色器设置DXInputScene场景缓冲区。
    • RenderEnd — 完成场景渲染并将结果接收到内部缓冲区。如果redraw==true,在图像运行的图表上显示图像。
    • ViewMatrixGet — 接收视图矩阵。
    • ViewMatrixSet — 设置视图矩阵。矩阵不兼容ViewPositionSet、ViewRotationSet、ViewTargetSet和ViewUpDirectionsSet方法。
    • ViewPositionSet — 设置视图位置。
    • ViewRotationSet — 设置视图旋转矩阵。
    • ViewTargetSet — 设置视图指向的点。与ViewUpDirectionsSet一起,是ViewRotationSet的另一种选择。
    • ViewUpDirectionsSet — 设置视图的垂直位置。与ViewTargetSet一起,是ViewRotationSet的另一种选择。
    • ProjectionMatrixGet — 接收投影矩阵。
    • ProjectionMatrixSet — 设置投影矩阵。

    关于新程序库的详细文档将很快发布。




  2. 添加支持直接从MQL5操作SQLite数据库。这使得无需创建复杂的指令即可轻松执行SQL查询。内部操作通过新的标准库扩展实现。

    提供以下函数:

    • DatabaseOpen — 在指定文件中打开或创建数据库
    • DatabaseClose — 关闭数据库
    • DatabaseTableExists — 检查数据库中是否有表格
    • DatabaseExecute — 执行对指定数据库的查询
    • DatabasePrepare — 创建查询句柄,该句柄可以使用DatabaseRead()进一步执行
    • DatabaseRead — 跳转到查询结果中的下一条记录
    • DatabaseFinalize — 删除在DatabasePrepare()中创建的查询
    • DatabaseTransactionBegin — 启动交易事务执行
    • DatabaseTransactionCommit — 完成交易事务执行
    • DatabaseTransactionRollback — 滚动返回交易事务
    • DatabaseColumnsCount — 接收查询中的字段数
    • DatabaseColumnName — 根据数字接收字段名
    • DatabaseColumnType — 根据数字接收字段类型
    • DatabaseColumnSize — 接收字段大小(以字节为单位)
    • DatabaseColumnText — 接收当前记录中的字段的字符串值
    • DatabaseColumnInteger —  接收当前记录中的int值
    • DatabaseColumnLong — 接收当前记录中的long值
    • DatabaseColumnDouble — 接收当前记录中的double值
    • DatabaseColumnBlob — 接收当前记录中的字段值数组

    函数操作添加了以下错误代码:

    • ERR_MQL_DATABASE_INTERNAL (5120) — 内部数据库错误
    • ERR_MQL_DATABASE_INVALID_HANDLE (5121) — 无效数据库句柄
    • ERR_MQL_DATABASE_TOO_MANY_OBJECTS (5122) 超出数据库对象的最大数目
    • ERR_MQL_DATABASE_CONNECT (5123)数据库连接错误
    • ERR_MQL_DATABASE_EXECUTE (5124) 请求执行错误
    • ERR_MQL_DATABASE_PREPARE (5125) 请求创建错误
    • ERR_MQL_DATABASE_NO_MORE_DATA (5126) — 没有要读取的数据
    • ERR_MQL_DATABASE_STEP (5127) 移动到下一个查询记录时出错
    • ERR_MQL_DATABASE_NOT_READY (5128) 读取查询记录的数据尚未准备好
    • ERR_MQL_DATABASE_BIND_PARAMETERS (5129) SQL查询自动替换错误

  3. 添加MQL5程序的新属性,可以选择默认的可视化方法。
    #property optimization_chart_mode "3d,InpX,InpY"
    该属性可以设置优化结束时打开的图表类型,以及X和Y轴的程序参数。

    该属性仅设置默认图表视图。它可以随时使用快捷菜单手动更改。

  4. MathArctan2新函数。返回角度的弧度值,其正切值等于两个指定数值的比率。
    double  MathArctan2(
       double  y      // 点的y坐标
       double  x      // 点的x坐标
       );
  5. 我们对程序进行了总体优化,提高性能并降低资源消耗。
  6. 添加可在策略测试中执行的数学计算示例。这些在\MQL5\Experts\Examples\Math 3D\目录下提供。
  7. 引入对namespaces(命名空间)更严格控制。
  8. 添加在MQL5程序中使用.NET库时加载链接库。如果使用的.NET程序库需要其他程序库才可运行,编译器将尝试从\MQL5\Libraries自动下载所需的程序端。
  9. 修正用于Python集成的MetaTrader模块中的时间操作。现在,所有输出数据都使用程序端连接的交易服务器的时间。

Tester

  1. 添加许多新功能和改进:


    交易品种的自定义设置
    现在您可以更改主要交易品种的设置,并为此执行测试/优化。几乎所有规格参数都可以重写:交易量、交易模式、预付款需求、执行模式和其他设置。因此,如果您需要在不同条件下检查EA,则无需创建单独的自定义交易品种和下载其历史记录。这可以通过更改标准的交易品种设置来完成。



    如果交易品种规格为自定义,则齿轮图标和交易品种图标将用星号标记。这表示自定义参数用于当前测试。




    最后设置/EA交易/图表
    使用新快捷菜单命令进行快速测试或优化设置。选择最后使用的测试设置、最近图表或应用程序:




MetaEditor

  1. 添加直接从MetaEditor处理C/C++和Python项目的能力。现在,可以使用内置编辑器管理多语言项目。

    如果您的电脑安装了对应的编译器,MetaEditor将进行检测并添加到设置中。同时,您还可以在“编译器”选项卡下指定所需组件的路径。在相同的选项卡中,您可以通过点击相应字段旁边的“安装”来下载组件。




    然后,您就可以如同处理MQL5程序一样,处理C/C++和Python项目。

  2. 添加支持Shared Project目录中的子项目,旨在通过MQL5存储开发共享项目。以前,只能在顶层创建单个项目。
  3. 内置调试程序更新。
  4. 修正在使用代码样式(styler)时添加函数标题。
  5. “跳转到上一个/下一个光标位置”命令现在不仅在“查看”菜单提供,还显示在工具栏上。
  6. 现在可以在项目名称中使用空格。

Android

  1. 添加在交易商网站快速切换到入金/出金页面的能力。

    无需在交易商网站的交易者室中搜索对应的功能。可在程序端中直接获得快速导航命令:用户可以从“账户”和“交易”部分切换到入金和出金页面:



    • 只有在交易商对交易账户启用对应的功能,才可以进行入金/出金操作。
    • 交易程序端不执行任何账户入金/出金操作。集成功能将用户重新定向到对应的交易商网站页面。

  2. 现在,历史持仓可按平仓日期进行排序。
  3. 添加在历史部分用红色和绿色垂直线标记“止损”平仓或“止盈”平仓。
  4. 交易品种规格中添加新字段:

    • 分类 — 这个属性用于额外标记交易品种。例如,这可以是该交易品种所属的市场行业:农业、石油&天然气等。只有在交易商提供对应信息的情况下才显示分类。
    • 交易所 — 进行证券交易的交易所名称。只有在交易商提供对应信息的情况下才显示分类。

  5. 交易部分添加“追加预付款”状态的显示。在这种状态出现时,“预付款”、“可用预付款”和“预付款水平”参数将显示为红色。
  6. 修正在平板电脑上显示OTP部分打开按键。
  7. 其他修复和改进。

iPhone/iPad

  1. 添加在交易商网站快速切换到入金/出金页面的能力。更多详细信息请参阅“MetaTrader 5 Android版新功能列表”。



  2. 添加对iOS/iPadOS暗模式的支持。
  3. 在iPad版本中已提供动态密码部分。
  4. 历史部分用红色和绿色垂直线标记“止损”平仓或“止盈”平仓。
  5. 现在,历史持仓可按平仓日期进行排序。如果持仓尚未关闭,则使用开仓日期进行排序。
  6. 其他修复和改进。




18 十月 2019

MetaTrader 5平台Build 2190

程序端

  1. 修正“导航”中MQL5程序的显示顺序。

MQL5

  1. 修正在输入组声明的程序中使用局部静态变量导致的编译错误。

VPS

  1. 修正请求主机日志。

Tester

  1. 改进显示三维优化图表。
  2. 修正前向优化过程中frames的接收。现在,主优化和前向优化的所有框架都可以在OnTesterDeinit函数中使用。
  3. 修正在“策略测试”设置中形成交易品种树状图。

添加旁遮普语(印度)的用户界面翻译。

文档已更新。

基于崩溃日志进行修复。

更新将通过实时更新系统提供。

5 十月 2019

新版MetaTrader 5平台build 2170:MQL5作用域,全局策略测试和内置虚拟主机更新

程序端

  1. 重新设计了内置虚拟主机管理选项。关于租用程序端以及环境迁移、停止和启动功能的所有信息,现在都可以在“工具箱”窗口的单独选项卡中获得。

    在早期版本中,“虚拟主机”功能可以在“导航”窗口的快捷菜单中使用。现在所有必要的信息和控制命令都方便简捷地排列在“VPS”选项卡中:




    基本订阅信息显示在左侧:

    • 连接数据:比较您主机服务器和本地计算机上的客户端运行之间的网络延迟。
    • 租用主机的交易账户和付款计划。
    • 独特的订阅标识符。点击ID打开MQL5.community用户个人资料中的“主机”部分,也可以在这里管理订阅。
    • 注册日期和当前状态。如果主机服务停止,那么相应的状态将立即出现在这里。

    使用“启动/停止”按键,虚拟程序端可以快速启动或停止。

    有关主机服务器硬件和CPU使用图表的数据显示在右侧窗口区。根据显示的信息,如果您的EA交易或指标使用了过多的内存或CPU时间,您将可以及时作出响应。

    有关最后交易的环境迁移以及迁移命令的信息也在这里提供。这些命令可以在购买订阅后加快环境迁移的速度。

    虚拟平台可以从“VPS”选项卡租用。租用过程不变,仍旧可以快速轻松完成租用。您只需选择一个计划和一个合适的付款方式。将会自动选择连接您交易商的最佳服务器。




  2. 添加在交易商网站快速切换到入金/出金操作的能力。

    无需在交易商网站的交易者室中搜索对应的功能。可在程序端中直接获得快速导航命令:“导航”和“工具箱”中的账户菜单 > 交易选项卡:



    • 只有在交易商对交易账户启用对应的功能,才可以进行入金/出金操作。
    • 交易程序端不执行任何账户入金/出金操作。集成功能将用户重新定向到对应的交易商网站页面。
  3. 交易品种规格中的新字段:

    分类
    这个属性用于额外标记交易品种。例如,这可以是该交易品种所属的市场行业:农业、石油&天然气等。只有在交易商提供对应信息的情况下才显示分类。

    交易所
    进行证券交易的交易所名称。只有在交易商提供对应信息的情况下才显示分类。

    手续费
    有关交易商为成交交易品种所收取的手续费的信息。计算详细信息在这里显示:

    • 手续费包括单级手续费和多级手续费,即无论成交量/交易额是多少,手续费都是相同的,或者可以根据交易规模而定。对应的数据在程序端显示。
    • 手续费可以在交易完成后,或在交易日/交易月结束时立即收取。
    • 手续费可以依据成交方向进行收取:市场买入、市场卖出或两种都包括的操作类型。
    • 手续费可按照每手或每笔交易来收取。
    • 手续费能够以资金金额、百分比或点数来计算。

    例如,下面进入交易表示交易进入和退出时立即收取手续费。如果成交量为0 - 10手,那么每次操作收取1.2 USD手续费。如果成交量为11 - 20手,那么每笔交易每手收取1.1USD手续费。
    手续费 | 立即、交易量、进入/退出交易
    0  - 10  | 每笔交易1.2 USD
    11 - 20  | 每手交易1.1 USD



  4. 附加期权相关字段已添加到交易品种规格中:

    • 期权类型 — 买进或卖出
    • 标的 — 期权的标的交易品种
    • 执行价格 — 期权执行价格

  5. 添加对期权"Greeks"交付的支持:delta、gamma、vega、theta、rho。交易商可以提供与此类交易品种相关的其他信息。这些数据显示在“市场报价”窗口的“详细信息”部分并可用于高级交易分析:



  6. “十字光标”工具现在除了之前可用的信息之外,还表示以百分比计算的价格水平之间的距离。




  7. 添加显示在“市价”执行和“交易所”执行操作期间交易对话框中产生的价格,如果该价格在收到交易商的响应时可用:




  8. 修正由于“市场报价”窗口中的“全部显示”命令无法显示所有可用交易品种列表而产生的错误。

MQL5

  1. 作用域操作已得到修改,因此MQL5更加接近C++。这为MQL5程序员在使用第三方程序库时提供更广泛的可能性。此更新消除了修改程序库和统一标识符的需求。

    例如,代码包含两个同名结构的声明,即使它们属于不同的类。在早期版本中,这类声明会导致编译错误:“标识符已使用”。现在,这个代码将被成功编译并执行。要从作用域外正确地访问所需的变量/结构/函数,您应指定一个类(在本例中是CBar::Item)。
    class CFoo
      {
    public:
       struct Item { int x; };
      };
    //+------------------------------------------------------------------+
    class CBar
      {
    public:
       struct Item { int x; };
      };
      
    CBar::Item item;  // 正确声明Bar类的Item结构
    Item       item;  // 错误声明
    添加namespace支持,它可以在MQL5应用程序使用第三方代码/程序库时提供更多的可能性。

    #define PrintFunctionName() Print(__FUNCTION__)
    
    namespace NS
    {
    void func()
      {
       PrintFunctionName();
      }
    
    struct C
      {
       int               x;
                         C() { PrintFunctionName(); };
      };
    }
    
    struct C
      {
       int               x;
                         C() { PrintFunctionName(); };
      };
    
    //+------------------------------------------------------------------+
    //|                                                                 |
    //+------------------------------------------------------------------+
    void func()
      {
       PrintFunctionName();
      }
    //+------------------------------------------------------------------+
    //| 脚本程序起始函数                                                 |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       func();
       NS::func();
    
       C c;
       NS::C ac;
      }
    执行时,输出以下结果:
    2019.09.18 13:39:35.947    TestScript (AUDCAD,H1)    func
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    NS::func
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    C::C
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    NS::C::C

  2. 新版本支持使用以下函数更快速地访问时间序列数据:iTime、 iOpen、iHigh、iLow、iClose、iVolume、iTickVolume、iSpread。

  3. 添加对"=delete"属性的支持。它可以禁止使用某些类方法。
    class A
      {
       void              operator=(const A &)=delete;    // 禁止对象复制操作符
      };
    
    class B : public A
      {
      };
    
    //+------------------------------------------------------------------+
    //| 脚本程序起始函数                                                 |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       A a1,a2;
       B b1,b2; 
      
       a1=a2;
       b1=b2;
      }
    在这个示例中,编译器将返回错误"a1=a2"和"b1=b2":
    试图引用已删除函数'void A::operator=(const A&)'
       'void A::operator=(const A&)'函数在这里被明确删除

    试图引用已删除函数'void B::operator=(const B&)'
       'void B::operator=(const B&)'函数被隐式删除,因为它由已删除函数'void A::operator=(const A&)'产生

  4. 以下值已被添加到ENUM_SYMBOL_INFO_STRING枚举:

    • SYMBOL_CATEGORY — 交易品种分类。它用于额外标记交易品种。例如,这可以是该交易品种所属的市场行业:农业、石油&天然气等。
    • SYMBOL_EXCHANGE — 进行交易品种交易的交易所的名称。

  5. 添加对通过FIFO规则平仓的支持。

    • ACCOUNT_FIFO_CLOSE值已被添加到ENUM_ACCOUNT_INFO_INTEGER。它表示只能通过FIFO规则平仓。如果属性值为true,那么每个交易品种都将按照持仓的相同顺序进行平仓:最早的持仓应最先平仓,然后以此类推。如果试图以不同的顺序进行平仓,则将返回一个错误。没有锁仓管理的账户的属性值始终为'false' (ACCOUNT_MARGIN_MODE!=ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)。
    • 新返回代码:MT_RET_REQUEST_CLOSE_ONLY — 请求被拒绝,因为交易品种已经设置“仅通过FIFO规则关闭现有持仓”规则

    主要有三种平仓方法:

    • 从客户端平仓:交易者使用EA,基于“信号”服务订阅等手动平仓。如果试图平仓,但不符合FIFO规则,那么交易者将收到一个对应的错误。
    • 在“止损”或“止盈”激活时平仓:这些订单在服务器端处理,因此不在交易者端(程序端)请求平仓,而是由服务器发起。如果一个持仓触发“止损”或“止盈”,且该持仓不符合FIFO规则(相同交易品种有一个更早的持仓),则该持仓将不会平仓。
    • 在“强平”触发时平仓:这些操作也在服务器端处理。在正常模式下(禁用基于FIFO平仓),“强平”时从亏损最大的持仓开始平仓。如果启用此选项,则将为亏损持仓额外检查开仓时间。服务器确定每个交易品种的亏损持仓,找出每个交易品种的最早持仓,然后在找到的持仓中关闭亏损最大的持仓。

  6. 添加通过“输入组”进行参数分组的选项。这可以根据参数的基本逻辑实现参数的可视化分离。

    在以下EA交易代码中,输入参数根据其用途进行分组:
    input int             ExtBBPeriod = 20;         // 布林带周期
    input double          ExtBBDeviation=2.0;       // 偏差
    input ENUM_TIMEFRAMES ExtSignalTF=PERIOD_M15;   // BB时间周期
    
    input group           "Trend"
    input int             ExtMAPeriod = 13;         // Moving Average period
    input ENUM_TIMEFRAMES ExtTrendTF=PERIOD_M15;    // MA 时间周期
    
    input group           "ExitRules"
    input bool            ExtUseSL      = true;     // 使用“止损”
    input int             Ext_SL_Points = 50;       // StopLoss in points
    input bool            ExtUseTP      = false;    // 使用“止盈”
    input int             Ext_TP_Points = 100;      // TakeProfit in points
    input bool            ExtUseTS      = true;     // 使用“追踪止损”
    input int             Ext_TS_Points = 30;       // 以点数计算“追踪止损”
    
    input group           "MoneyManagement"
    sinput double         ExtInitialLot =0.1;       // 初始手数值
    input bool            ExtUseAutoLot =true;      // 自动手数计算
    
    input group           "Auxiliary"
    sinput int            ExtMagicNumber =123456;   // EA幻数
    sinput bool           ExtDebugMessage=true;     // 打印调试信息
    当这种EA在“策略测试”中启动时,输入参数块可以通过双击组名来折叠或扩展,并且可以通过单个复选框选择组内的所有参数进行优化。




  7. 修正导入名称匹配MQL5函数名称的DLL函数。例如:
    #import "lib.dll"
    int func();
    #import
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    int func()
      {
       return(0);
      }
    //+------------------------------------------------------------------+
    //| 脚本程序起始函数                                                 |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       Print( func() );
      }
    在早期版本中,编译时会返回以下错误:
    'func' - 对具有相同参数的重载函数的模糊调用可以是2种函数之一
       int func()
       int func()
    现在,默认情况下将使用优先级更高的内置MQL5函数,来代替错误。导入的函数可以通过显式指定作用域来调用:
    void OnStart()
      {
       Print( lib::func() );
      }
  8. 修正经济日历新闻中的时间规格。现在,交付事件时考虑的是程序端所连接的交易服务器的时区,而不是本地计算机的时区。
  9. 修正CopyticksCopyTicksRange函数中的过多内存消耗。

信号

  1. 修正使用Wine(Mac OS和Linux)工作时信号图表的显示。

Tester

  1. 策略测试的大规模更新。全新开始页面、重新设计的设置页面、提高了可用性。

    开始页面
    现在,tester启动之后,用户看到的是一个标准任务列表,而不是多个设置,通过选择任务,用户可以快速开始测试。新设计主要是为没有经验的用户而准备的。

    我们选择最频繁的策略测试和优化任务,并将其添加到开始页面。此外,还可以从开始页面重新启动一个以前执行的任务。如果您运行了多个任务,且这些任务不适合开始页面,那么请使用搜索栏。您可以通过任何参数找到测试:程序名称、交易品种、时间周期、建模模式等。




    隐藏不相关的参数
    选择任务之后,用户继续进一步测试参数:选择EA交易、交易品种、测试周期等。所选任务不需要的所有无关参数都将从设置页面中隐藏。例如,选择数学计算,只需要指定两个参数:选择要测试的程序和优化模式。在测试期间,将会隐藏延迟和报价生成的设置。




    方便测试设置
    为了方便起见,设置页面上的一些参数已经重新排列。对延迟和可视化参数添加了扩展解释。此外,现在测试设置可以手动保存和加载,因此交易者可以快速返回到以前的设置。




    使用相同的选项卡,您可以在MetaEditor中快速打开程序进行编辑。

    以点数计算盈利
    使用这些设置,您可以启用以点数计算盈利。这种模式加快了测试速度,同时不需要使用转化率以入金货币重新计算盈利(因此没有必要下载对应的价格历史)。在此模式下,取消库存费和手续费的计算。




    请注意,当以点数计算盈利时,成交量并不重要。每笔交易只计算盈/亏点数。此外,在此模式下不执行预付款控制。只将其用于快速粗略的策略评估,然后使用更精确的模式检查得到的结果。

    一般改进
    测试启动/停止按键和进度条已经被移到选项卡栏。因此,用户可以控制任何“策略测试”部分的流程。测试启动/停止命令也被添加到设置和输入部分的快捷菜单中。




  2. 优化图表现在可以显示在程序端的主工作区,而不是显示在单独的策略测试区。这样,就可以为数据分析提供更多的空间。同时更新了3D可视化系统。




  3. 为“市场报价中全部交易品种”模式添加保存优化缓存
  4. 添加保存测试缓存。

    在早期版本中,只有在优化EA交易时才会将所执行任务的结果保存到文件中。现在,单个测试期间也保存缓存文件,通过它用户可以返回到之前的计算,并随时查看统计数据、结余、净值和入金加载图。在未来的版本中,这个选项将支持测试结果的比较。

    要加载之前的测试结果,请使用Tester新开始页面:点击“之前的结果”并选择想要的网站:




  5. 明显加快了测试和优化的速度,包括使用MQL5云网络执行的操作。
  6. 修正并优化了周期操作。

MetaEditor

  1. 添加配置代码样式(styler)的功能。

    MetaEditor包含一个内置代码样式(styler),它可以根据所采用的标准自动格式化程序文本。现在除了常见样式外,您还可以使用其他流行的标准。为此,请打开MetaEditor设置并选择所需的样式:




    可以为样式(styler)额外设置以下参数:

    每个缩进空间
    设置用于对齐内嵌结构的空格数:
    if(condition)
      {
       //---
      }

    用空格代替制表符
    如果启用此选项,样式(styler)将用空格代替代码中的所有制表符。每个制表符的字符数在“一般”部分中设置。

    删除空行
    启用此选项后,样式(styler)将删除只有一个换行符的所有行。

    在逗号和分号之后插入空格
    启用此选项后,样式(styler)将使用元素枚举以可视方式分隔结构。示例:
    // 之前样式
    ParameterGetRange("InpX",enable,x_cur,x_start,x_step,x_stop);
    // 之后样式
    ParameterGetRange("InpX", enable, x_cur, x_start, x_step, x_stop);

    在声明操作符周围插入空格
    启用此选项后,样式(styler)将围绕赋值、等式、比较和其他操作符插入空格。示例:
    // 之前样式
    if(x==1&y!=2)
      {
       int a=0;
      }
    // 之后样式
    if(x == 1 & y != 2)
     {
      int a = 0;
     }

  2. “在导航中显示”命令已添加到文件书签的快捷菜单。因此,用户可以轻松地在编辑器文件夹结构中找到要编辑的打开文件。




  3. 修正在工具提示中显示'union'关键字。

用户界面翻译又添加了18种新语言:


  • 欧盟地区 — 瑞典语、立陶宛语、丹麦语、拉脱维亚语、爱沙尼亚语、塞尔维亚语、斯洛文尼亚语、斯洛伐克语、芬兰语、格鲁吉亚语
  • 亚洲地区 — 爪哇语、马拉地语、孟加拉语、旁遮普语、泰米尔语、泰卢固语
  • 非洲地区 — 斯瓦西里语、豪萨语

该平台界面现已支持50种语言,涵盖40多亿人使用的语言。

若要设置界面语言,请进入程序端顶部的“查看\语言”菜单。

文档已更新。

基于崩溃日志进行修复。

更新将通过实时更新系统提供。

13 六月 2019

MetaTrader 5平台build 2085:集成Python并改进策略测试

程序端

  1. 添加新API,使用Python语言通过应用程序,启用MetaTrader 5程序端数据请求。

    Python是一种用于开发脚本和应用程序的现代高水平编程语言。它包含用于机器学习、自动化处理以及数据分析和可视化的多个程序库。

    MetaTrader Python程序包是为有效快速地从MetaTrader 5程序端直接通过处理器通信获得交易所数据而设计的。通过这种途径接收的数据可以进一步用于统计计算和机器学习。



    连接

    1. https://www.python.org/downloads/windows下载最新版Python
    2. 安装Python期间,请检查“将Python X.X添加到PATH%”,以便能够从命令行启用Python脚本。
    3. 从命令行安装MetaTrader 5模块
      pip安装MetaTrader5
    4. 添加matplotlib和pytz包
      pip安装matplotlib
      pip安装pytz

    函数


  2. 优化了市场信号部分。现在,产品和信号展示的运行速度提高了7倍,从而提供了更好的浏览体验服务。




  3. 新增在Wine系统下支持“市场”、“信号”和“搜索”。LinuxMac OS用户现在可以访问最大的交易应用程序商店和复制交易服务。




  4. 内置学习程序已被翻译成30多种语言,包括西班牙语、中文、葡萄牙语和德语。若要查看所需语言的互动提示,请使用“查看”菜单切换界面语言。




  5. 新选项可以验证交易者在开设模拟账户和初始账户时指定的电话号码和电子邮箱。

    是否需要验证数据由交易商来决定。如果启用了这个选项,确认码会在账户请求时自动发送给交易者,对话框中会出现特殊代码字段:




    确认码在几分钟内有效。如果在这个时间段内没有将确认码输入到字段中,那么交易者将需要重复这个程序。

    发送确认码之前,系统将检查指定电话号码/电子邮箱是否之前已确认。如果交易者已在他或她的计算机上通过了验证,那么将无需额外确认即可开户。因此,交易者在请求账户时不会遇到额外的困难。

  6. 扩展了通过PayPal系统进行付款的MQL5.community付款选项。现在,使用该系统可实现一键购买。

    如何工作
    当您使用PayPal账户登录进行购买之后,您将被要求允许进一步付款给我们公司:





    确认此选项后,您只需点击之前保存的账户按键,即可一键执行进一步购买:




    如果您点击“取消并返回MetaQuotes Software Corp.”,您将以正常的方式进行付款,为每次购买手动输入PayPal账户详情。
    MQL5.com网站和MetaTrader 5平台不存储您的付款详情。当您存款购买“市场”产品或订阅“信号”时,在付款系统端将执行数据验证。
    您可以随时移除您的PayPal 账户链接。

  7. 策略测试器的改进和优化。

    我们引入了大量隐藏的改进和修正的错误来优化策略测试器操作。此更新可以更快地测试一些任务类型,使操作稳定性更高。主要改进包括:

    框架操作
    本地、网络和源代码的操作框架得到优化。这类操作现在处理速度更快,永远不会跳过。

    将任务分配给代理
    测试器现在可以在优化过程中将任务重新分配给代理。如果有新代理可用(或发布之前用过的一个代理),测试器会使用之前在其他代理中分配的任务包自动创建新的任务包。如果检测出代理速度慢,任务还可以重新分配。这类代理的任务被发送至其他代理,以便更快地完成优化。

    数学计算模式下的任务分配速度会更快。

    日志中的优化统计
    优化日志记录得以扩展:它包括与MQL5云网络使用相关的详细统计,启用和禁用云代理等。

    在全优化日志模式下运行
    为了获得最佳的资源消耗,并不是所有来自代理的消息都被记录到测试日志中。若要查看所有日志,您可以通过测试日志快捷菜单启用“完整优化日志”选项。此前,这个模式可以明显拖慢优化进程。而现在则不会影响计算时间。

    MQL5云网络
    优化云测试代理的运行。现在,计算任务的分配更加有效。

  8. 内置经济日历提供了18个全球大型经济体相关的900+指标,包括美国、欧盟、日本和英国等国家。相关数据都是从开放资源实时收集。通过定期查看此服务,交易者可以随时了解最新的全球新闻,并做出明智的交易决策。

    经济日历可在桌面版、网页版以及移动设备上使用。可以使用程序端的“日历”快捷菜单打开应用程序:




    选择您的平台并下载Tradays apps:


    除了桌面平台提供的日历功能之外,移动版还以图表和表格的形式提供事件提醒和访问指标的完整历史记录。

  9. 添加了在导入报价历史期间自动生成自定义交易品种柱形历史。现在,如果自定义交易品种的报价数据出现变化,对应的柱形图也自动重新计算。

    • 因此,统一的数据被保存在平台中。
    • 导入报价数据(假设有足够的数据)之后,因为由程序端自动计算,而无需导入柱形图。

    更改涉及通过程序端界面执行的报价导入,以及使用CustomTicks*函数从MQL5应用程序执行的报价更新。报价数据的任何变化都会导致重新计算对应的自定义交易品种的1分钟柱形图。

  10. 修正当在分离图表上使用十字光标时“数据窗口”中的数据更新。
  11. 修正报价历史保存。在早期版本中,一毫秒内的多个报价可能以错误的顺序保存。
  12. 修正基于服务器上过短的价格历史(少于一天)生成图表的问题。

MQL5

  1. 添加MQL5服务调试选项。现在可以对这些应用程序进行类似于EA交易和指标的测试。
  2. ENUM_SYMBOL_CALC_MODE枚举中,添加了全新的盈利和预付款计算模式:

    • SYMBOL_CALC_MODE_EXCH_BONDS — 适用于交易所债券的计算。
    • SYMBOL_CALC_MODE_EXCH_STOCKS_MOEX — 适用于莫斯科交易所股票交易的计算。
    • SYMBOL_CALC_MODE_EXCH_BONDS_MOEX — 适用于莫斯科交易所债券交易的计算。

  3. TesterDeposit函数支持在测试期间模拟入金操作。该函数适用于测试资金管理策略。
    bool  TesterDeposit(
       double money      //入金金额
       );
  4. OnDeinit方法执行期间,MQL5应用程序不会从程序端接收任何事件。以前,由于接收到其他事件,应用程序有时无法完成去初始化(例如,删除所有创建的对象)。
  5. 修正当日更改自定义交易品种报价历史后可能发生的偶然错误。
  6. 修正使用大量图形对象(数以万计)时应用程序偶尔出现的运行速度减慢的问题。
  7. 修正从MQL5程序频繁调用交易历史的情况下出现程序端冻结的问题。
  8. 修正iBarShift函数操作。通过"exact=false"标识和数据外的请求,该函数返回最早的柱数而不是最新柱数。

Tester

  1. 修正确定有多个NUMA节点的计算机处理器上的内核数。
  2. 添加使用零初始入金运行测试和优化的可能性,因为使用新TesterDeposit函数可以在测试期间模拟入金操作。

MetaEditor

  1. 现在,整码器命令可添加到工具栏以快速访问。
  2. 修正在函数和变量名称中使用非统一字符时切换到参数定义和查看相关数据。

文档已更新。

更新内容通过LiveUpdate系统提供。

26 十月 2018

新版MetaTrader 5平台build 1930:浮动窗口图表和MQL5中的.Net程序库

程序端

  1. 现在,您可以在交易程序端窗口之外使用交易品种图表。

    这个功能的便利性在使用多个显示器进行操作时非常明显。因此,您可以在一个显示器上设置平台的主窗口来管理您的账户状态,并将您的图表移动到另一个显示器上以观察市场动向。若要将图表从程序端分离,请在快捷菜单中禁用“固定”选项。然后,将图表移动到所需的显示器。





    通过分离图表的独立工具栏可以应用分析对象和指标,而无需在显示器间进行切换。使用工具栏快捷菜单来管理可用命令集或将命令隐藏。

  2. 完全更新的嵌入式聊天功能。现在,该功能支持群组聊天和频道交流。可以在一个环境内与一个群组的人们进行私人讨论,而不需要在不同的对话之间切换,您还可以根据您的兴趣和语言创建频道。在MQL5.community与同业和好友进行交流,而不需要访问网站。

    群组聊天和频道交流既可以是公开的,也可以设为私人状态。由创建者来决定是否可以自由加入群聊或是只能通过邀请加入。您还可以为频道和聊天分派版主/群主,为了进一步进行交流管理。




  3. 新增对数字加密货币交易提高交易量精确性的支持。现在,交易操作可允许的最小交易量为0.00000001手数。现在,市场深度,成交时间和交易量,以及其他界面元素都能够精确显示到小数点后8位。

    最小交易量及其变动幅度取决于交易商的交易品种设置。




  4. 在工具箱窗口,添加了MQL5.community网站发布的文章的选项卡。现在,在程序端可以直接获得600多篇关于使用MQL5开发交易策略的详细材料。每周都会发布新文章。




  5. 新增在Wine系统下操作时,支持使用证书进行扩展认证
  6. 修正了市场深度被限定在一个水平时的显示。
  7. 将“另存为图片”的命令添加到标准工具栏中。现在,保存图表图片并将其分享在社区中会更加容易。




  8. 修正导入柱形图和报价时,应用时间切换。之前,在某些情况下无法使用时间切换。




  9. 修正大量经济日历新闻情况下的程序端冻结。

MQL5

  1. 添加了通过"smart"导入函数对.NET程序库的本机支持。现在,.NET程序库可以在无需编写特殊包装样式的情况下使用 — MetaEditor可以独立完成。

    若要使用.NET程序库函数,只需导入DLL本身,而不必定义特定的函数。MetaEditor自动导入所有可以使用的函数:
    • 简单结构(POD,普通旧数据) — 仅包含简单数据类型的结构。
    • 有参数的公共静态函数,在这里只有简单类型和POD结构或其数组可被使用

    若要从程序库调用函数,简单导入即可:
    #import "TestLib.dll"
    
    //+------------------------------------------------------------------+
    //| 脚本程序起始函数                         |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       int x=41;
       TestClass::Inc(x);
       Print(x);
      }
    TestClass的Inc函数C#代码如下:
    public class TestClass
    {
       public static void Inc(ref int x)
       {
        x++;
       }
    }
    作为执行结果,脚本返回值为42。

    对.NET程序库的支持工作仍继续。其功能将在未来得到扩展。

  2. 添加了支持使用标准程序库的WinAPI函数。现在,不需要手动导入程序库和描述函数签名来在MQL5程序中使用操作系统函数。只需包括来自MQL5\Include\WinAPI目录的头文件。

    WinAPI函数按其用途在单独的文件中分组:

    • libloaderapi.mqh — 使用资源
    • memoryapi.mqh — 使用内存
    • processenv.mqh — 使用环境
    • processthreadsapi.mqh — 使用流程
    • securitybaseapi.mqh — 使用OS安全系统
    • sysinfoapi.mqh — 获取系统信息
    • winbase.mqh — 常用函数
    • windef.mqh — 常量、结构和枚举
    • wingdi.mqh — 使用图形对象
    • winnt.mqh — 处理异常
    • winreg.mqh — 使用注册表
    • winuser.mqh — 窗口和界面管理
    • errhandlingapi.mqh — 处理错误
    • fileapi.mqh — 使用文件
    • handleapi.mqh — 使用句柄
    • winapi.mqh — 包含所有函数(WinAPI头文件)

    绑定仅适用于64位架构。

  3. 在解析代码时,新增对inline, __inline和 __forceinline描述符的支持。代码中的描述符不会导致错误,也不会影响编译。目前,该特性简化了将С++ 代码转为MQL5。
    MSDN中了解关于描述符的更多信息。

  4. 显著优化了MQL5程序的执行。在某些情况下,性能改进可以达到10%。在新版MetaEditor重新编译您的程序,使其运行得更快。
    遗憾的是,由于这个额外的优化功能,新程序将无法与以前的程序端版本兼容。使用MetaEditor 1910版本编译的程序之后无法在1880版本及更低的程序端中启用。使用早期的MetaEditor版本编译的程序则可以在新版程序端中运行。

  5. 显著优化了MQL5函数集。
  6. 新增向程序端主窗口附加图表/从程序端主窗口分离图表并管理图表位置的新属性。

    添加以下属性到ENUM_CHART_PROPERTY_INTEGER枚举:

    • CHART_IS_DOCKED — 图表窗口固定。如果设为'false',图表可被拖拽到程序端区域之外。
    • CHART_FLOAT_LEFT — 相对于虚拟屏幕的未固定的图表窗口的左坐标。
    • CHART_FLOAT_TOP — 相对于虚拟屏幕的未固定的图表窗口的顶部坐标。
    • CHART_FLOAT_RIGHT — 相对于虚拟屏幕的未固定的图表窗口的右坐标。
    • CHART_FLOAT_BOTTOM — 相对于虚拟屏幕的未固定的图表窗口的底部坐标。

    添加以下函数到ENUM_TERMINAL_INFO_INTEGER枚举:

    • TERMINAL_SCREEN_LEFT — 虚拟屏幕的左坐标。虚拟屏幕是覆盖所有监视器的长方形。如果系统从右至左有两个监视器,那么虚拟屏幕的左坐标可以在两个监视器的边界上。
    • TERMINAL_SCREEN_TOP — 虚拟屏幕的顶部坐标。
    • TERMINAL_SCREEN_WIDTH — 程序端宽度。
    • TERMINAL_SCREEN_HEIGHT — 程序端高度。
    • TERMINAL_LEFT — 相对于虚拟屏幕的程序端的左坐标。
    • TERMINAL_TOP — 相对于虚拟屏幕的程序端的顶部坐标。
    • TERMINAL_RIGHT — 相对于虚拟屏幕的程序端的右坐标。
    • TERMINAL_BOTTOM — 相对于虚拟屏幕的程序端的底部坐标。

  7. 将volume_real字段添加到MqlTick和MqlBookInfo结构。其设计目的在于提高交易量准确性。volume_real值的优先级要高于'volume'。如果该值已指定,那么服务器将会优先使用。

    struct MqlTick
      {
       datetime         time;          // 最后价格更新时间
       double           bid;           // 当前卖价
       double           ask;           // 当前买价
       double           last;          // 最后一笔交易的当前价格
       ulong            volume;        // 当前最后价格的交易量
       long             time_msc;      // 以毫秒计算的最后价格更新时间
       uint             flags;         // 报价标识
       double           volume_real;   // 准确性更高的当前最后价格的交易量
      };

    struct MqlBookInfo
      {
       ENUM_BOOK_TYPE   type;            //ENUM_BOOK_TYPE枚举的订单类型
       double           price;           // 价格
       long             volume;          // 交易量
       double           volume_real;     //准确度更高的交易量
      };

  8. 添加新属性到ENUM_SYMBOL_INFO_DOUBLE枚举:

    • SYMBOL_VOLUME_REAL — 最后已执行成交的交易量;
    • SYMBOL_VOLUMEHIGH_REAL — 当日已执行成交的最高交易量;
    • SYMBOL_VOLUMELOW_REAL — 当日已执行成交的最低交易量。

    使用SymbolInfoDouble函数来获得这些属性。

  9. 添加MQL_FORWARD属性到ENUM_MQL_INFO_INTEGER枚举 — 前测模式标识。
  10. 为结构添加了( integer_value )属性包。它可以使您设置结构中字段排列的对齐方式,这是在使用DLL时要求的。1、2 、4、8和16可用于integer_value。
    如果属性没有定义,则默认为1字节对齐方式——pack(1).

    使用示例:
    //+------------------------------------------------------------------+
    //| 默认包装                             |
    //+------------------------------------------------------------------+
    struct A
      {
       char              a;
       int               b;
      };
    //+------------------------------------------------------------------+
    //| 指定包装                             |
    //+------------------------------------------------------------------+
    struct B pack(4)
      {
       char              a;
       int               b;
      };
    //+------------------------------------------------------------------+
    //| 脚本程序起始函数                         |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       Print("sizeof(A)=",sizeof(A));
       Print("sizeof(B)=",sizeof(B));
      }
    //+------------------------------------------------------------------+
    结论:
    sizeof(A)=5
    sizeof(B)=8
    MSDN中了解关于结构中对齐方式的更多信息。

  11. 降低转换枚举的需求。在隐式转换的情况下,编译器会自动替换正确的枚举值并显示警告。

    以下代码:
    enum Main
      {
       PRICE_CLOSE_,
       PRICE_OPEN_
      };
    
    input Main Inp=PRICE_CLOSE;
    //+------------------------------------------------------------------+
    //| 起始函数                             |
    //+------------------------------------------------------------------+
    void OnStart()
      {
      }
    编译器显示警告:
    从'enum ENUM_APPLIED_PRICE'隐式转换到'enum Main'
    'Main::PRICE_OPEN_'将替换'ENUM_APPLIED_PRICE::PRICE_CLOSE'并被使用
    早期,在该情况下生成以下错误:
    'PRICE_CLOSE' - 不能转换枚举
    如果在函数参数中错误地使用枚举,编译器将仍显示该错误。

  12. 修正编译模板函数。现在,当使用重载模板函数时,只重载必要的函数,而不是所有现有函数都被重载。
    class X {  };
    
    void f(int)  {  }
      
    template<typename T>
    void a(T*) { new T(2); }  // 以前,编译器在这里生成错误
      
    template<typename T>
    void a()  { f(0); }
      
      
    void OnInit()  { a<X>(); }  

  13. 通过CopyTicks* 函数优化了一些访问报价历史的情况。
  14. 添加了新TesterStop函数,可以使您提前完成测试/优化过程。当调用该函数时,整个交易统计信息和OnTester结果都会像完成常规测试/优化一样被传递到客户端。
  15. 为自定义指标添加新属性 #property tester_everytick_calculate。它用于策略测试,允许在每次报价时强制计算指标。

Tester

  1. 现在,对于非可视化测试/优化,使用的所有指标(标准指标和自定义指标)只在数据请求期间计算。包含EventChartCustom函数调用和应用OnTimer处理程序的指标排除在外。在此之前,在每次报价进入时,所有指标在策略测试中都无条件计算。这项新功能显著增加了测试和优化的速度。

    若要在每次报价时启用强制指标计算,请为该程序添加#property tester_everytick_calculate属性。
    通过之前版本的编译器编译的指标将按照之前的规则计算 —— 在每次报价时计算。

  2. 修正当测试/优化和生成相关报告时计算入金货币的准确性。
  3. 优化并加速策略测试操作。
  4. 修正多个测试和优化的错误。

MetaEditor

  1. 修正搜索整个单词。现在,搜索时,下划线被记为常规字符,而不是单词分隔符。
  2. 更新文档。

更新将通过实时更新系统提供。

6 七月 2018

MetaTrader 5 build 1880: calculation of the complete history of synthetic symbols

Terminal

  1. Added calculation of the price history of synthetic symbols for the entire available data depth.

    The platform calculates the history of one-minute bars based on minute bars of instruments as applied in its formula. Previously, the history was only calculated for the last two months. A deeper history could be created upon an explicit request (when scrolling the chart to the left or calling Copy functions). Now, the history is calculated using all available data unconditionally.




    Each symbol used in the synthetic formula can have price history of different depth. Synthetic history calculation is performed for the shortest available period. For example, the formula uses three financial instruments:

    • EURUSD with the history down to 2009.01.01
    • USDJPY with the history down to 2012.06.01
    • EURJPY with the history down to 2014.06.01

    In this case, the history of the synthetic symbol will be calculated for a period from 2014.06.01 to the present. 100 minutes will be additionally discarded from this date, to ensure the calculation integrity (if any minute bar is not available in history, a previous minute bar is used in the calculation).

    If deep history of used symbols is available, the synthetic symbol history calculation can take quite a long time. To enable immediate synthetic symbol chart view, the history for the last two months is calculated first (similarly to calculations in previous versions). Calculation of an earlier history begins after that.

MQL5

  1. New property ACCOUNT_CURRENCY_DIGITS — the number of decimal places in the account deposit currency. Use the AccountInfoInteger function to get the property. You may use the property when calculating profit on your own, to normalize the values ​​obtained.
  2. Fixed delay in the execution of Copy functions and i-functions during operations with the weekly timeframe.
  3. Fixed operation of the WebRequest function.

Tester

  1. Added ability to perform a single Expert Advisor test after downloading optimization results from a cache file.
  2. The new version features a faster initial download of price history by local agents.

Documentation has been updated.

6 七月 2018

MetaTrader 5平台build 1880:计算合成交易品种的完整历史

程序端

  1. 程序端:为整个可用的数据深度添加了合成交易品种价格历史的计算。

    平台根据公式中使用的工具的一分钟柱来计算一分钟柱的历史记录。以前,只能计算最近两个月的历史记录。根据一个明确的请求可以创建更深入的历史(当将图表滚动到左侧或调用Copy函数时)。现在,可以无条件使用所有可用数据来计算历史。




    在合成公式中使用的每一个交易品种都可以有不同深度的价格历史。合成历史计算是对最短的可用周期来执行。例如,公式使用三个交易品种:

    • EURUSD 历史最早可以追溯回2009.01.01
    • USDJPY历史最早可以追溯回2012.06.01
    • EURJPY历史最早可以追溯回2014.06.01

    这种情况下,合成交易品种历史的计算周期将从2014.06.01到现在。从这个日期开始将额外排除100分钟,来确保计算的完整性(如果有任何分钟柱不可用在历史中,那么计算中会使用前一分钟柱)。

    如果所用交易品种的深度历史可以使用,那么合成交易品种历史计算可能需要相当长的时间。为了确保合成交易品种图表即时查看,则首先计算最近两个月的历史(类似于之前版本的计算)。然后再开始计算较早期的历史。

MQL5

  1. ACCOUNT_CURRENCY_DIGITS新属性 — 在账户入金货币中的小数位数。使用AccountInfoInteger函数来获得属性。您可以在自己计算利润的时候使用这个属性,使所获得的值标准化。
  2. 修正周时间周期操作期间执行Copy函数i-函数的延迟。
  3. 修正WebRequest函数的操作。

Tester

  1. 添加了下载缓存文件的优化结果之后执行单独EA交易测试的功能。
  2. 新版本提供了通过本地代理加快价格历史初步下载的功能。

文档已更新。

26 六月 2018

MetaTrader 5 build 1870: adding symbols to Market Watch by ISIN

Terminal

  1. Search for trading symbols by ISIN (International Securities Identification Number) has been added in the Market Watch window. Now, you can add symbols using three methods: by name, description and ISIN.



  2. Fixed user interface slowdown when changing a trading account password.
  3. Fixed occasional CPU load increase caused by the client terminal.

MQL5

  1. Fixed passing of custom HTTP headers in the WebRequest function.
  2. Fixed behavior of the Bars function in cases when the range beginning and end dates are the same. Now, if there is a bar, the function returns 1. In earlier versions, the function unconditionally returned 0.

Tester

  1. Fixed start of single testing in the visual mode after a forward optimization.
  2. Fixed sorting of optimization results. Now sorting takes into account passes with incorrect input parameters (INIT_INCORRECT_PARAMETERS) and those having no profit factor.
  3. Fixed recalculation of genetic optimization graph after changing the optimization criterion.

Documentation has been updated.

26 六月 2018

MetaTrader 5 build 1870:通过ISIN在市场报价中添加交易品种

程序端

  1. 在市场报价窗口中添加了通过ISIN(国际证券识别码)搜索交易品种。现在,您可以使用三种方式搜索并添加交易品种:名称、描述和ISIN。



  2. 修正更改交易账户密码时用户界面反应迟缓的问题。
  3. 修正由客户端导致的偶尔CPU负载增加的问题。

MQL5

  1. 修正在WebRequest函数中自定义HTTP标题的传递。
  2. 修正在开始和结束日期范围相同的情况下,Bars函数的行为。现在,如果有一个柱形图,则函数返回1。在早期版本中,函数无条件返回0。

Tester

  1. 修正在前测优化之后开始在可视模式下单点测试
  2. 修正排序优化结果。现在,排序过程会考虑到错误输入参数(INIT_INCORRECT_PARAMETERS)和没有利润因子的传递。
  3. 修正在改变优化准则后,对遗传优化图形进行重新计算。

文档已更新。

15 六月 2018

MetaTrader 5 build 1860: MQL5 functions for operations with bars and Strategy Tester improvements

Terminal

  1. The account opening dialog has been completely redesigned. Now, you may select a broker from the list and then choose the desired account type. This update has made the list of brokers more compact, since now it only displays company names instead of showing all available servers.

    Company logos are additionally shown in the list to make the search easier and more efficient. If the desired broker is not shown in the list, type the company name or the server address in the search box and click "Find your broker".




    Descriptions of account types have been added to the dialog to help beginners choose the right account. Also, to align with the General Data Protection Regulation (GDPR), the updated dialog may contain links to brokers' agreements and data protection policies:




    The possibilities for opening real accounts have been significantly expanded. The functionality for uploading ID and address confirmation documents, which was earlier presented in mobile terminals, is now available in the desktop version. Now, MiFID regulated brokers can request any required client identification data, including information on employment, income, trading experience, etc. The new functionality will help traders to open real accounts faster and easier, without unnecessary bureaucratic procedures.




  2. The history of deals now displays the values of Stop Loss and Take Profit. Stop Loss and Take Profit values for entry and reversal deals are set in accordance with the Stop Loss and Take Profit of orders, which initiated these deals. The Stop Loss and Take Profit values ​​of appropriate positions as of the time of position closing are used for exit deals. The latter allows saving and showing information about Stop Loss and Take Profit of a position as of the moment of its closure. This information was not stored in earlier versions, since positions disappear after closure, while the history of positions in the terminal is generated based on deals.




  3. The history of positions now displays the values of Stop Loss and Take Profit. Stop Loss and Take profit values of deals, which open and close appropriate positions, are specified for such positions.




  4. Now, the current volume of pending orders is shown on the chart, instead of the initially requested volume.




  5. The updated terminal features optimized and faster rendering of the Market Depth feature in the extended mode with the enabled spread display.
  6. Processing of trade request execution results has been optimized. This optimizations leads to a much faster processing in some cases.
  7. Fixed error in Trailing Stop operation, which could occasionally lead to sending of several Stop Loss modification requests for the same position.
  8. Fixed setting of minimum and maximum volume, as well as volume step in custom symbol settings.
  9. Fixed error, due to which the "Fix Scale" option could be ignored, when applying a template to a symbol chart.
  10. Fixed occasional incorrect accumulation of tick history.

MQL5

  1. The speed of MQL5 applications has increased due to the additional source code optimization during compilation. Recompile your programs in the new MetaEditor version to make them run faster.
    Unfortunately, new programs will not be compatible with previous terminal versions due to this additional optimization. Programs compiled in MetaEditor version 1860 and later cannot be launched in terminal versions below 1860. Programs compiled in earlier MetaEditor versions can run on new terminals.

  2. New functions: iTime, iOpen, iHigh, iLow, iClose, iVolume, iBars, iBarShift, iLowest, iHighest, iRealVolume, iTickVolume, iSpread. These functions are similar to those used in MQL4. The functions provide for an easier transfer of code of trading applications to the fifth generation platform.

    Earlier, most of tasks performed through these functions could be implemented using Copy* functions. However, users had to implement their own functions in order to find the High/Low values ​​on the chart and to search for bars based on their time. Now, these tasks can be easily executed using iHighest, iLowest and iBarShift functions.

    iTime
    Returns the Open time of the bar (indicated by the 'shift' parameter) on the corresponding chart.
    datetime  iTime(
       string           symbol,          // Symbol
       ENUM_TIMEFRAMES  timeframe,       // Period
       int              shift            // Shift
       );

    iOpen
    Returns the Open price of the bar (indicated by the 'shift' parameter) on the corresponding chart.
    double  iOpen(
       string           symbol,          // Symbol
       ENUM_TIMEFRAMES  timeframe,       // Period
       int              shift            // Shift
       );

    iHigh
    Returns the High price of the bar (indicated by the 'shift' parameter) on the corresponding chart.
    double  iHigh(
       string           symbol,          // Symbol
       ENUM_TIMEFRAMES  timeframe,       // Period
       int              shift            // Shift
       );

    iLow
    Returns the Low price of the bar (indicated by the 'shift' parameter) on the corresponding chart.
    double  iLow(
       string           symbol,          // Symbol
       ENUM_TIMEFRAMES  timeframe,       // Period
       int              shift            // Shift
       );

    iClose
    Returns the Close price of the bar (indicated by the 'shift' parameter) on the corresponding chart.
    double  iClose(
       string           symbol,          // Symbol
       ENUM_TIMEFRAMES  timeframe,       // Period
       int              shift            // Shift
       );

    iVolume
    Returns the tick volume of the bar (indicated by the 'shift' parameter) on the corresponding chart.
    long  iVolume(
       string           symbol,          // Symbol
       ENUM_TIMEFRAMES  timeframe,       // Period
       int              shift            // Shift
       );

    iBars
    Returns the number of bars of a corresponding symbol and period, available in history.
    int  iBars(
       string           symbol,          // Symbol
       ENUM_TIMEFRAMES  timeframe        // Period
       );

    iBarShift
    Search bar by time. The function returns the index of the bar corresponding to the specified time.
    int  iBarShift(
       string           symbol,          // Symbol
       ENUM_TIMEFRAMES  timeframe,       // Period
       datetime         time,            // Time
       bool             exact=false      // Mode
       );

    iLowest
    Returns the index of the smallest value found on the corresponding chart (shift relative to the current bar).
    int  iLowest(
       string           symbol,          // Symbol
       ENUM_TIMEFRAMES  timeframe,       // Period
       int              type,            // Timeseries identifier
       int              count,           // Number of elements
       int              start            // Index
      );

    iHighest
    Returns the index of the largest value found on the corresponding chart (shift relative to the current bar).
    int  iHighest(
       string           symbol,          // Symbol
       ENUM_TIMEFRAMES  timeframe,       // Period
       int              type,            // Timeseries identifier
       int              count,           // Number of elements
       int              start            // Index
      );

    iRealVolume
    Returns the real volume of the bar (indicated by the 'shift' parameter) on the corresponding chart.
    long  iRealVolume(
       string           symbol,          // Symbol
       ENUM_TIMEFRAMES  timeframe,       // Period
       int              shift            // Shift
       );

    iTickVolume
    Returns the tick volume of the bar (indicated by the 'shift' parameter) on the corresponding chart.
    long  iTickVolume(
       string           symbol,          // Symbol
       ENUM_TIMEFRAMES  timeframe,       // Period
       int              shift            // Shift
       );

    iSpread
    Returns the spread value of the bar (indicated by the 'shift' parameter) on the corresponding chart.
    long  iSpread(
       string           symbol,          // Symbol
       ENUM_TIMEFRAMES  timeframe,       // Period
       int              shift            // Shift
       );

  3. New TesterHideIndicators function has been added. The function sets the show/hide mode for indicators used in Expert Advisors. The function is intended for managing the visibility of used indicators only during testing. Set to true if you need to hide created indicators. Otherwise use false.
    void  TesterHideIndicators(
       bool      hide     // Flag
       );
  4. Added generation of the CHARTEVENT_CLICK event at a click on trade levels on the chart.
  5. Fixed and optimized operation of CopyTicks functions.
  6. Fixed value returned by the SymbolInfoDouble function for the SYMBOL_PROP_LIQUIDITY_RATE property.
  7. Fixed copying of string arrays with overlapping memory.
  8. Fixed allocation of a string array in the FileReadArray array.
  9. Fixed errors in the MQL5 Standard Library.

Tester

  1. The system for working with the optimization cache has been updated. The cache stores data about previously calculated optimization passes. The strategy tester stores the data to enable resuming of optimization after a pause and to avoid recalculation of already calculated test passes.

    Changes in the optimization cache storage format
    In earlier versions, optimization cache was stored as one XML file. All Expert Advisor optimization passes with the specified testing settings were added to this file. Therefore, the same file stored results of optimizations with different input parameters.
    Now, the optimization cache is stored as separate binary files for each set of optimized parameters. Strategy Tester operations involving the optimization cache have become significantly faster due to the new format and smaller file size. The acceleration can be especially noticeable when you resume a paused optimization pass.

    Viewing results of earlier optimizations
    Now, the results of earlier optimizations can be viewed right in the Strategy Tester, so there is no need to analyze huge XML files using third-party software. Open the "Optimization results" tab, select an Expert Advisor and a file with the optimization cache:



    The list contains all optimization cache files existing on the disk for the selected Expert Advisor. Optimization date, testing settings (symbol, timeframe, interval) and input parameters are shown for each file. You can additionally filter optimization results by the trade server, on which the results were obtained.

    Recalculation of the optimization criterion on the fly
    An optimization criterion is a certain variable parameter, the value of which determines the quality of a tested set of inputs. The higher the value of the optimization criterion, the better the testing result with the given set of parameters is considered to be.

    Earlier, only one criterion selected before optimization start was calculated during optimization. Now, you can change the optimization criterion on the fly when viewing results, and the Strategy Tester will automatically recalculate all values.




    Manual use of the optimization cache
    In earlier versions, optimization cache was stored as an XML file, which could be opened and analyzed using third-party software. Now it is stored in closed binary files. To get data in XML format, export them using the context menu of the "Optimization Results" tab.

  2. Added possibility to manually set the deposit currency and leverage for testing and optimization. In earlier versions, the currency was set in accordance with the connected account. Therefore, one had to switch to other accounts in order to change the currency. The leverage size could only be selected from a predefined list, now any value can be specified.

    Please note that cross rates for converting profit and margin to the specified deposit currency must be available on the account, to ensure proper testing.




  3. Removed ban on the use of OpenCL in testing agents. Earlier, OpenCL devices were only allowed when testing on local agents. Now, agents are allowed to use all available OpenCL devices (such as processor, video card) when working in the local network and in the MQL5 Cloud Network.

    MetaEditor

  1. Optimized and accelerated work with the MQL5 Storage.
  2. Fixed resuming of debugging process after a pause in the MQH file.
  3. Fixed source code highlighting in the editor.
  4. Fixed navigation through search results.
  5. Fixed mass text replace function. In some cases, only the first occurrence was replaced instead of all of them.

Documentation has been updated.

15 六月 2018

MetaTrader 5平台build 1860:改进MQL5柱形图操作和策略测试功能

程序端

  1. 重新设计了开户对话框。现在,您可以从列表中选择一个交易商,然后选择想要的账户类型。这一更新使交易商列表更加集中,因为现在它只显示公司名,而不会显示所有可用的服务器。

    公司logo也在列表中显示,使搜索更加轻松,更有效率。如果想要的交易商没有显示在列表中,请在搜索框中输入公司名或服务器地址,然后点击“查找交易商”。




    在对话框中还添加了账户类型的描述,帮助初级投资者选择正确的账户。此外,为了与一般数据保护条例(GDPR)保持一致,更新后的对话框可能包含交易商协议和数据保护政策的链接:




    明显提高了开设真实账户的可能性。之前只存在于移动端的上传ID和地址确认文档的功能,现在也可以在桌面版中使用了。现在,MiFID监管的交易商可以要求所需的任何客户身份识别数据,包括关于就业、收入、交易经验等信息。新功能将帮助交易者更快更容易地开设真实账户,而无需不必要的繁琐程序。




  2. 交易历史现在显示了止损值和止盈值。根据发起这些交易的订单的止损和止盈来设置进入和逆转交易的止损值和止盈值。平仓时对应持仓的止损值和止盈值被用于退出交易。后者可以保存和显示平仓时持仓的止损和止盈信息。这个信息并没有存储在早期版本中,因为平仓之后持仓会消失,而程序端的持仓历史则根据交易产生。




  3. 持仓历史现在显示了止损值和止盈值。打开和关闭相应持仓的交易的止损值和止盈值是为这种持仓指定的。




  4. 现在,图表上显示挂单的当前交易量,而不是最初请求的交易量。




  5. 更新后的程序端优化并快速渲染了扩展模式下的市场深度特性,并启用了点差显示。
  6. 对交易请求执行结果进行了优化。这种优化在某些情况下可以实现更快处理。
  7. 修正追踪止损操作中的错误,该错误偶尔可能导致对同一持仓发送多个止损更改的请求。
  8. 修正最小和最大交易量的设置,以及自定义交易品种设置中的交易量步骤。
  9. 修正了在将模板应用到交易品种图表时,忽略“修正比例”选项可能导致的错误。
  10. 修正了报价历史的偶尔错误积累。

MQL5

  1. 由于在编译过程中实行的额外的源代码优化,MQL5应用程序的速度也得到了大幅度提升。在新版MetaEditor重新编译您的程序,使其运行得更快。
    遗憾的是,由于这个额外的优化功能,新程序将无法与以前的程序端版本兼容。使用MetaEditor 1860版本编译的程序,之后无法在低于1860版本的程序端中启用。使用早期的MetaEditor版本编译的程序则可以在新版程序端中运行。

  2. 新函数:iTime、iOpen、iHigh、iLow、iClose、iVolume、iBars、iBarShift、iLowest、iHighest、iRealVolume、iTickVolume、iSpread等。这些函数类似于MQL4中使用的函数。这些函数提供了更轻松地将交易应用程序代码传输到第五代交易平台。

    在此之前,通过这些函数执行的大部分任务都可以使用Copy*函数实行。但是,用户不得不执行他们自己的函数以便在图表上找到最高/最低值,和根据他们的时间搜索柱形图。现在,这些任何可以使用iHighest、iLowest和iBarShift函数来轻松执行。

    iTime
    返回对应的图表上柱形图的开盘时间(通过'shift'参数表示)。
    datetime  iTime(
       string       symbol,     //交易品种
       ENUM_TIMEFRAMES  timeframe,    // 周期
       int         shift      //转移
       );

    iOpen
    返回对应的图表上柱形图的开盘价(通过'shift'参数表示)。
    double  iOpen(
       string       symbol,     // 交易品种
       ENUM_TIMEFRAMES  timeframe,    // 周期
       int         shift       // 转移
       );

    iHigh
    返回对应的图表上柱形图的最高价(通过'shift'参数表示)。
    double  iHigh(
       string       symbol,     //交易品种
       ENUM_TIMEFRAMES  timeframe,    // 周期
       int         shift      //转移
       );

    iLow
    返回对应的图表上柱形图的最低价(通过'shift'参数表示)。
    double  iLow(
       string       symbol,     //交易品种
       ENUM_TIMEFRAMES  timeframe,    // 周期
       int         shift      //转移
       );

    iClose
    返回对应的图表上柱形图的收盘价(通过'shift'参数表示)。
    double  iClose(
       string       symbol,     //交易品种
       ENUM_TIMEFRAMES  timeframe,    // 周期
       int         shift      //转移
       );

    iVolume
    返回对应的图表上柱形图的报价量(通过'shift'参数表示)。
    long  iVolume(
       string       symbol,     //交易品种
       ENUM_TIMEFRAMES  timeframe,    // 周期
       int         shift      //转移
       );

    iBars
    返回在历史记录中可用的对应交易品种和周期的柱形图数量。
    int  iBars(
       string       symbol,     //交易品种
       ENUM_TIMEFRAMES  timeframe     // 周期
       );

    iBarShift
    根据时间搜索柱形图。这个函数返回与指定时间对应的柱形图指数。
    int  iBarShift(
       string       symbol,    // 交易品种
       ENUM_TIMEFRAMES  timeframe,   // 周期
       datetime      time,     // 时间
       bool        exact=false  // 模式
       );

    iLowest
    返回在对应图表上找到的最小值的指数(相对于当前柱形图的转移)。
    int  iLowest(
       string        symbol,    // 交易品种
       ENUM_TIMEFRAMES  timeframe,   // 周期
       int         type,     // 时间序列标识符
       int         count,     // 元素数量
       int         start     // 指数
      );

    iHighest
    返回在对应图表上找到的最大值的指数(相对于当前柱形图的转移)。
    int  iHighest(
       string       symbol,     // 交易品种
       ENUM_TIMEFRAMES  timeframe,   // 周期
       int         type,     // 时间序列标识符
       int         count,     // 元素数量
       int         start     // 指数
      );

    iRealVolume
    返回对应的图表上柱形图的真实交易量(通过'shift'参数表示)。
    long  iRealVolume(
       string       symbol,     //交易品种
       ENUM_TIMEFRAMES  timeframe,    // 周期
       int         shift      //转移
       );

    iTickVolume
    返回对应的图表上柱形图的报价量(通过'shift'参数表示)。
    long  iTickVolume(
       string       symbol,     //交易品种
       ENUM_TIMEFRAMES  timeframe,    // 周期
       int         shift      //转移
       );

    iSpread
    返回对应的图表上柱形图的点差值(通过'shift'参数表示)。
    long  iSpread(
       string       symbol,     //交易品种
       ENUM_TIMEFRAMES  timeframe,    // 周期
       int         shift      //转移
       );
  3. 添加了新的TesterHideIndicators函数。该函数设置了EA交易中使用的指标的显示/隐藏模式。这个函数仅用于在测试期间管理已用指标的可见性。如果您需要隐藏已创建的指标,请设置为true。否则,使用false。
    void  TesterHideIndicators(
       bool hide     //标识
       );
  4. 添加了在图表上单击交易价位时生成CHARTEVENT_CLICK事件。
  5. 修正和优化CopyTicks函数的操作。
  6. 修正SYMBOL_PROP_LIQUIDITY_RATE属性,SymbolInfoDouble函数返回的值。
  7. 复制带有叠加内存的字符串数组。
  8. 修正在FileReadArray数组中分配字符串数组。
  9. 修正MQL5标准程序库中的错误。

Tester

  1. 已经更新用于处理优化缓存的系统。这个缓存存储了关于以前计算的优化传递的数据。策略测试存储了暂停之后恢复优化和避免重新计算已经计算的测试传递的数据。

    优化缓存存储格式的更改
    在早期版本中,优化缓存存储为XML文件。包含指定测试设置的所有EA交易优化传递都被添加到这个文件中。因此,相同的文件也存储了不同输入参数的优化结果。

    现在,优化缓存为每组优化参数存储为单独的二进制文件。由于使用了新格式及更小的文件大小,优化缓存的策略测试操作变得更快。当您恢复暂停的优化传递时,加速情况会更加明显。

    查看早期优化的结果
    现在,早期优化的结果可以在策略测试中直接查看,所以不再需要使用第三方软件来分析巨大的XML文件。打开“优化结果”选项卡,选择一个EA交易和带有优化缓存的文件:



    列表中包含了磁盘上现有的可供被选择的EA使用的所有优化缓存文件。每个文件都显示了优化日期、测试设置(交易品种、时间周期、间隔)和输入参数。您还可以通过获得结果的交易服务器过滤优化结果。

    动态重新计算优化准则
    优化准则是一个特定的变量参数,其值决定了输入测试组的质量。优化准则的值越高,所考虑的给定参数集就越好。

    在此之前,优化期间只计算在优化开始之前选择的一个准则。现在,您可以在查看结果时动态改变优化准则,并且策略测试将自动重新计算所有值。




    手动使用优化缓存
    在早期版本中,优化缓存存储为需要使用第三方软件打开和分析的XML文件。现在,它存储在封闭的二进制文件中。若要获得XML格式的数据,请使用“优化结果”选项卡的快捷菜单将其导出。

  2. 添加了手动设置入金货币和测试与优化杠杆的可能性。在早期版本中,货币是根据连接的账户进行设置的。因此,必须切换到其他账户才能改变这个货币。杠杆大小只能从预定义列表中选定,而现在则可以指定任何值。

    请注意,将利润和预付款转换为指定入金货币的汇率必须在账户上可用,以确保适当的测试。




  3. 移除在测试代理中禁止使用OpenCL的禁令。早些时候,只有在对本地代理进行测试时才允许使用OpenCL设备。现在,当在本地网络和MQL5云网络工作时,代理可以使用所有可用的OpenCL设备(例如处理器、视频卡)。

MetaEditor

  1. 优化和加速MQL5存储
  2. 修正在MQH文件暂停之后修复调试过程。
  3. 修正editor中突出显示的源代码。
  4. 修正通过搜索结果的导航。
  5. 修正大量文本替换功能。在某些情况下,只有第一次出现的情况被替换,而不是全部情况。

文档已更新。

18 一月 2018

MetaTrader 5平台Build 1755

程序端

  1. 修正导致程序端和MetaEditor阻止Windows关机和重新启动的错误。
  2. 修正应用模板时的图表切换。

MQL5

  1. 修正在某些情况下减慢编译速度的错误。

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

12 一月 2018

MetaTrader 5 Platform Build 1745

MetaTrader 5 build 1745 will be the last platform version supporting Microsoft Windows XP/2003/Vista. The minimum required operating system version for running MetaTrader 5 is Windows 7. However, we strongly recommend using the 64-bit version of Windows 10.


Terminal

  1. The /auto key has been added to the installer, allowing to install the program in automated mode without additional actions required from the user. When the installer is launched with this key, installation settings will not be shown to the user, and the terminal will be installed at the standard path, with the standard Start menu folder name for the program. Example of such launch:
    C:\mt5setup.exe /auto
  2. Fixed installer operation in cases when the user does not have appropriate operating system permissions.
  3. Fixed excessive consumption of CPU resources when no actions are performed in the terminal (when there are no open charts and no actions are performed by the user).
  4. The new version features automatic compression of *.log files at the file system level. The new functionality allows reducing the amount of disk space used by logs.
  5. The amount of cache during single test runs has been increased. This provides faster testing in 64-bit operating systems.

Tester

  1. Fixed optimization of trading robots using the MQL5 Cloud Network. Issues could arise with products purchased from the MetaTrader Market.
  2. Fixed calculation of spreads for bars generated in the "Every Tick" testing mode.
  3. Fixed selection of OpenCL devices in the strategy tester. Now, the visual tester is allowed to access all available OpenCL devices.
  4. The new version features automatic compression of *.log files at the file system level. The new functionality allows reducing the amount of disk space used by logs.

MQL5

  1. Fixed deletion of bars of a custom symbol using the CustomRatesDelete method.
Fixes based on crash reports.
Updated documentation.

12 一月 2018

MetaTrader 5平台Build 1745

MetaTrader 5 build 1745将是最后一个支持Microsoft Windows XP/2003/Vista操作系统的平台版本。现在运行MetaTrader 5所需的最低操作系统版本为Windows 7。然而,我们仍强烈建议您使用64位版本的Windows 10。


程序端

  1. /auto键已经添加到安装包,可以在自动模式下安装程序而无需用户的额外操作。当通过这个键启动安装包时,安装设置不会显示给用户,程序端将安装在标准开始菜单的标准路径下,以程序名命名的文件夹中。这种启动示例为:
    C:\mt5setup.exe /auto
  2. 修正操作系统用户没有适当权限时的安装包操作。
  3. 修正在程序端不执行任何操作时(没有打开的图表,用户不执行任何操作),对CPU资源的过度消耗。
  4. 新版本还具有自动压缩文件系统级别*.log文件的特点。这项新功能可以减少日志对磁盘空间的占用率。

Tester

  1. 增加了在单个测试运行期间的缓存量。这可以为64位操作系统提供更快的测试。
  2. 通过MQL5云网络修正了EA交易的优化。这种优化可能体现在从MetaTrader市场上购买的产品中。
  3. 修正在“每个报价”测试模式下生成的柱的点差计算。
  4. 修正策略测试下OpenCL设备的选择。可见的测试器现在可以访问所有可用的OpenCL设备。
  5. 新版本还具有自动压缩文件系统级别*.log文件的特点。这项新功能可以减少日志对磁盘空间的占用率。
  6. MQL5:使用CustomRatesDelete类函数,修正自定义交易品种柱的删除。

修正崩溃日志中报告的错误。
文档已更新。

21 十二月 2017

MetaTrader 5 Build 1730: MetaEditor项目和合成金融工具

停止对旧版程序端的支持

新版平台发布后,将停止对旧版本的桌面版和移动版的支持:

  • 客户端:2012年11月23日发布的730之前的版本
  • iPhone移动版:2015年11月11日发布的1171之前的版本
  • Android移动版:2016年8月5日发布的1334之前的版本
不再提供支持的程序端版本将不能继续连接新的服务器版本。我们强烈建议您提前更新您的程序端。

MQL5 存储操作协议发生变更

为了支持新的共享项目,我们更新了MQL5存储的操作协议。因此,平台更新后,您将需要检查核对来自存储的所有数据。更新过程中,MQL5存储中的所有数据都不会丢失或受到影响。

更新到新版平台之前,我们建议您执行提交操作,将所有本地更改发送到MQL5存储。

程序端

  1. 现在,交易平台允许创建合成金融工具,即基于一个或多个现有工具的交易品种。用户可以设置计算报价的公式,之后平台将会实时生成合成工具的报价并创建分钟历史记录。

    如何工作

    • 您创建合成工具并设置价格计算公式。
    • 如果公式中使用的工具至少有一个的价格发生变化,那么平台会以每秒10次的频率计算报价。
    • 平台还可以根据公式中使用的工具一分钟柱来计算一分钟柱的历史记录(最近两个月)。根据生成的合成工具报价,所有新柱都将实时绘制(当前柱和后面的柱)。

    例如,您可以创建一个工具显示美元指数(USDX)。它使用下面的公式:

    50.14348112 * pow(ask(EURUSD),-0.576) * pow(USDJPY,0.136) * pow(ask(GBPUSD),-0.119) * pow(USDCAD,0.091) * pow(USDSEK,0.042) * pow(USDCHF,0.036)

    注意:USDEUR和USDGBP货币对在源美元指数公式中使用。因为平台中仅可以使用反向货币对,因此合成交易品种公式中使用的是负能量和买价,而不是卖价。

    平台将根据您交易商提供的其他六个交易品种报价来计算新工具的实时价格。价格变化将在市场报价窗口和图表上显示:




    若要创建一个新的自定义交易品种,请打开其规格窗口并指定公式:




    出于方便考虑,公式编辑器在键入交易品种和函数名称时显示了可能的选项列表。

    当合成工具添加到市场报价时,开始计算这个工具的报价和1分钟柱。同时,所有需要计算合成价格的交易品种都会自动添加到市场报价。有关开始计算的条目也将被添加到平台的日志:合成交易品种USDX:处理已开始。
    • 合成工具从市场报价移除后,计算停止。
    • 当前用于计算合成交易品种价格的交易品种不可以在市场报价中隐藏。

    实时计算报价
    每100毫秒检查一次计算中使用的交易品种价格(即每秒10次)。如果至少一次发生变化,那么就会计算合成交易品种的价格并且生成新报价。计算在三个线程中并行执行:卖价,买价和最后价。例如,如果计算公式是EURUSD*GBPUSD,那么合成交易品种的价格将按照以下规则计算:

    • Bid = bid(EURUSD)*bid(GBPUSD)
    • Ask = ask(EURUSD)*ask(GBPUSD)
    • Last = last(EURUSD)*last(GBPUSD)

    并分别针对每个价格检查更改的有效性。例如,如果源工具只更改了卖价,那么也只会计算合成工具相应的价格。

    创建分钟柱的历史记录
    除了收集实时报价之外,这个平台还会创建合成工具的1分钟历史记录。使交易者能够查看与正常图表类似的合成交易品种图表,并使用对象和指标进行技术分析。

    当交易者向市场报价添加合成工具时,平台将检查计算的分钟历史记录是否存在。如果不存在,那么将会创建最近60天的历史记录,其中包含50, 000个柱形图。如果平台设置中图表允许最多柱参数指定的值较低,那么将会应用相应的限制。

    如果这个周期内一些柱形图创建的时间较早,那么该平台将会额外生成新柱形图。如果用户想要查看图表上较早时期的记录(向后滚动或从MQL5程序访问),更进一步的历史记录就会被创建。

    合成工具的一分钟柱历史记录还可以根据公式中使用工具的一分钟柱(不是报价)进行计算。例如,若要计算合成交易品种1分钟柱的开盘价,平台会使用其公式中使用的交易品种的开盘价。最高价,最低价和收盘价也是以相同的方式进行计算。

    如果所需的柱形图不适用于任何工具,那么平台将使用之前柱形图的收盘价。例如,EURUSD,USDJPY和GBPUSD这三个工具被使用。如果计算12:00对应的柱形图时USDJPY所需的柱形图不能使用,那么下面的价格将会用于计算:

    • Open: EURUSD Open 12:00, USDJPY Close 11:59, GBPUSD Open 12:00
    • High: EURUSD High 12:00, USDJPY Close 11:59, GBPUSD High 12:00
    • Low: EURUSD Low 12:00, USDJPY Close 11:59, GBPUSD Low 12:00
    • Close: EURUSD Close 12:00, USDJPY Close 11:59, GBPUSD Close 12:00

    如果分钟柱不能用于公式中使用的所有工具,那么合成工具对应的分钟柱也不会被计算。

    绘制新的分钟柱形图
    所有合成工具的新柱都将根据生成的报价进行创建(当前柱和后面的柱)。用于创建柱形图的价格取决于规格中的“图表模式”参数:




    交易品种公式中可以使用哪些操作
    价格数据和交易商提供的现有交易品种的一些属性可以用于计算合成价格。指定下面信息:

    • 交易品种名称 — 取决于要被计算的合成价格,要使用的指定工具的卖价,买价或最后价。例如,如果工具指定EURUSD*GBPUSD,那么卖价计算为bid(EURUSD)*bid(GBPUSD),买价= ask(EURUSD)*ask(GBPUSD)。
    • 卖价(交易品种名称)— 指定交易品种的卖价将被强制用于计算合成工具的卖价。这个选项与之前选项类似(在之前没有指定价格类型)。
    • 买价(交易品种名称)— 指定交易品种的买价将被用于计算合成工具的买价。指定工具的卖价将被用于计算买价。指定交易品种的最后价将被用于计算最后价。如果ask(EURUSD)*GBPUSD被指定,那么下面计算将被使用:
      • Вid = ask(EURUSD)*bid(GBPUSD)
      • Ask = bid(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • 最后价(交易品种名称) — 指定交易品种的最后价将被用于合成工具所有价格的计算(卖价,买价和最后价)。如果last(EURUSD)*GBPUSD被指定,那么下面计算将被使用:
      • Вid = last(EURUSD)*bid(GBPUSD)
      • Ask = last(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • 交易量(交易品种名称) — 公式中将要使用的指定工具的报价交易量。请确保交易量信息与交易商提供的该交易品种相符。
    • 点差(交易品种名称)— 计算时将会使用的指定工具的最小价格变化。
    • 小数位(交易品种名称) — 公式中将要使用的指定交易品种价格的小数位数。

    如果交易品种名称复杂(包含连字符,点等等),请一定要以引号标记。例如:“RTS-6.17”。
    下面的算术运算可以在公式中使用:加法 (+),减法 (-),乘法(*),除法(/) 和除法余数 (%)。例如,EURUSD+GBPUSD意味着这个价格的计算是EURUSD 和GBPUSD价格总和。您也可以使用减号来改变符号,例如:-10*EURUSD。

    请注意数学运算的优先规则:

    • 首先执行的是乘法运算,除法运算和余数运算,然后执行加法运算和减法运算。
    • 运算顺序为自左向右。如果这个公式使用了多个且优先级相同的运算符号(例如,乘法和除法),那么将先从左边开始执行运算。
    • 您可以使用括号来改变运算的优先规则。括号内的运算是数学运算的最高级别。同样也是按照自左向右的顺序来执行:左侧括号内的运算优先执行。

    您可以在公式中使用常数:

    • 数字类型(整型和浮点型)。例如:EURUSD*2+GBPUSD*0.7。
    • 交易品种属性 _Digits 和 _Point。它们在公式中加入了来自规格的自定义交易品种的适当属性。_Digits意味着工具价格的小数位数;_Point 意味着交易品种价格的最小变化。

    您还可以在公式中使用除了MathSrand,MathRand和MathIsValidNumber以外,MQL5中支持的所有其他数学函数:所有函数仅使用短名称,例如fabs(),acos(),asin()等等。

  2. 已经实施允许实时添加自定义工具报价的新选项。现在,开发为指定自定义交易品种提供报价的MQL5 EA交易已经成为可能。为此可以使用CustomTicksAdd函数。
    int  CustomTicksAdd(
       const string           symbol,       // 交易品种名称
       const MqlTick&         ticks[]       // 可以用于自定义交易品种的报价数据数组
       );
    CustomTicksAdd函数允许提供报价,如同从交易商服务器接收这些报价。数据被发送至市场报价窗口,而不是直接写入报价数据库。然后,程序端将报价从市场报价窗口保存至数据库。如果在一次调用中传递了大量的数据,那么函数行为就会发生变化来节省资源。如果传送的报价数超过256个,那么数据会被分成两个部分。较大的部分直接记录到报价数据库(类似CustomTicksReplace)。第二部分由最近的128个报价组成,被发送到市场报价,程序端从这里将报价保存到数据库。

  3. 市场报价窗口现在还提供了最高价和最低价。这两个价格列默认是隐藏状态。可以通过快捷菜单来启用显示这两列:




    如果交易品种图表使用卖价来构建(依据规格设置),则会显示这个交易品种的最高卖价和最低卖价。如果交易品种图表使用最后价来构建,则会显示这个交易品种的最高最后价和最低最后价。

    如果市场报价至少包含一个基于最后价绘制图表的交易品种,那么除了最高价/最低价以外,最后价的列也会自动启用。

  4. 现在可以编辑自定义金融工具的报价历史记录。在市场报价快捷菜单中点击“交易品种”,选择自定义交易品种并在报价标签请求所需的数据间隔。

    • 双击来改变值。
    • 使用快捷菜单来添加或删除条目。
    • 如果您需要立刻删除多个柱形图/报价,请用鼠标选择并同时按住Shift或Ctrl+Shift。




    为了方便起见,更改的条目会按照以下规则突出显示:

    • 绿背景色表示修改后的条目
    • 灰背景色表示已删除的条目
    • 黄背景色表示已添加的条目

    若要保存更改,请在窗口底部点击“应用更改”。

  5. 在导航树中添加初步账户的显示。
    交易者可以向交易商发送请求,从桌面程序端直接开立一个真实账户。用户需要填写一份简单的请求表格和联系方式。在此之后,将为交易者创建一个特定的初步账户。然后,交易商联系交易者确定正式关系并将真实账户从初步账户转出。




  6. 在报价窗口增加毫秒时间显示。




  7. 在新账户打开对话框中扫描可用服务器的速度更快。
  8. 修正了趋势线图形对象的显示,启用了左射线和右射线的选项。
  9. 优化操作大量内部电子邮件(数十万邮件)。
  10. 优化大量交易工具的程序端操作(50,000或更多)。
  11. 在编辑历史记录之后,对自定义金融工具的报价历史添加了优化,并进行扩展。

MetaEditor

  1. 功能全面的项目现在已可以在MetaEditor中使用。程序开发过程已变得更加方便。

    现在主要的MQL5程序文件不会呈现为项目文件。项目是独立的"MQPROJ"文件,它可以存储程序设置,编译所有已用文件的参数和信息。主要的项目设置可以从独立的对话框访问,所以,现在无需通过#property在源代码中指定项目设置。

    为了便于进行项目工作,还提供了独立的导航标签。全部文件,例如包含文件,资源文件,标题文件和其他文件都被安排到这个标签类别中。所有文件都会自动添加到项目导航中。例如,如果您包括了一个新的MQH文件,那么它将自动出现在导航的“相关性”部分。

    在更新的MQL5存储在线库中也实现了对新项目的支持。现在,通过与MQL5.community其他成员的协作,开发大型项目变得更加方便。

    为组项目提供了新的共享项目部分。在这部分创建的项目会即时发送到存储中:您可以授予其他用户的权限并立即开始协作。




    当您在共享项目中编译一个项目时,根据程序类型,可执行文件EX5会自动复制到本地专家,指标或脚本目录。您可以轻松地在图表上启动程序,而无需手动复制文件。


    MQL5存储操作中的新功能

    为了实现对新共享项目的支持,我们已经更改了MQL5存储的操作协议。因此,平台更新后,您将需要检查核对来自存储的所有数据。更新过程中,MQL5存储中的所有数据都不会丢失或受到影响。

    更新到新版平台之前,我们建议您执行提交操作,将所有本地更改发送到MQL5存储。

    “检查存储”命令现在已经不可用。而是使用“激活MQL5存储”和“更新存储文件”命令来接收数据:

    • 如果在当前MetaEditor实例中您没有使用MQL5存储,那么请在导航窗口的快捷菜单中点击“激活MQL5存储”。您的存储中所有可用的类别和文件将被上传至您的本地电脑。
    • 如果您已经使用存储服务,请在某个项目或导航窗口中MQL5元素根目录的快捷菜单中单击“更新存储文件”,以便接收存储中的数据。

    新项目:创建和操作细节的示例

    新项目版块已被添加到MetaEditor。项目是一个mqproj文件,可以存储普通程序属性和有关所有已用文件的信息。现在,程序属性可以通过独立的MetaEditor对话框方便地管理,不必在源代码中手动更改属性(使用#property指令)。

    如果您有可用代码,您可以通过使用“来自源代码的新项目”命令来轻松地测试新项目。




    在已选文件所在的目录中,将会创建一个具有相同名称和mqproj为扩展名的新项目文件。通过#property在源代码中指定的主要程序属性将被自动添加到项目,包括名称,版权,版本,链接到开发者网站和程序描述。

    项目文件中程序属性会被设置高于程序代码中指定属性的优先级。如果项目和源文件中都指定了属性,那么项目属性将被使用。




    编译MQL5程序的两个新选项已被添加到项目属性:

    • 启用额外优化:禁用优化的应用程序编译速度更快,但执行速度较慢。
    • 检查浮点分隔:检查禁用的应用程序速度稍快,因为在执行代码过程中,不检查除数为零的错误。

    若要使用项目服务,请使用导航窗口独立的项目标签。项目服务中使用的所有文件都以方便的形式展示在这个标签。当项目从源文件生成时,所有使用的包含文件(在主MQ5文件及其包含文件中通过#include目录指定)都会自动添加到相关性部分。

    当新的包含文件添加到源代码时,它也出现在项目导航中。已用的标题文件添加到标题版块;在项目中用作资源的图片,声音和其他MQL5程序也被添加到资源版块。带有源代码的MQ5文件显示在资源版块。在“设置和文件”版块,您可以添加其他文件,例如用于测试的set文件和图表模板。

    使用快捷菜单命令向项目添加现有文件或从项目中删除文件。删除文件时请注意,因为您不但可以从项目中移除文件(解除绑定)还可以从硬盘中彻底删除文件:




    创建一个新项目犹如创建普通MQL5程序一样简单。单击“新项目”,选择新程序类型并指定MQL5向导中的属性(例如名称,事件处理程序)。

    若要获得可执行文件EX5,您可以打开这个项目并按下F7(编译命令)或打开程序的主MQ5文件并编译它。

    MQL5存储中的共享项目:操作细节

    共享项目是由一个单独的共享项目版块来管理。如果您还没有连接存储库,请在所需文件夹的快捷菜单执行“激活MQL5存储”命令。MetaEditor将检查您的存储库是否包含任何保存数据以及是否有任何共享项目可供您使用。所有可用的数据都将从存储库中恢复并上传到您的电脑(检验操作)。可用的组项目出现在共享项目版块。若要恢复项目,请在快捷菜单中执行“在存储库检查”。

    若要创建新组项目,请选择共享项目文件夹并点击“新项目”:




    然后完成标准的MQL5步骤:设置所需程序的类型,名称和属性。对于组项目,您应该使用清晰易懂的名称,以便其他参与者能够轻松地找到它们。项目名称中只可以使用没有空格的拉丁字符和数字。

    创建的对象会立刻添加到MQL5存储库中。项目中使用的标准程序库文件不会添加到存储库中,您可以手动添加它们。

    若要允许其他参与者使用项目,请打开项目属性。在这里,您可以通过指定MQL5.community登录名,以及为组工作设定公共参数,来向选定用户授予权限:

    • 私人项目
    • 免费加入项目
    • 通过请求项目加入




    当您编译一个组项目时,根据程序类型,可执行文件EX5会自动复制到本地专家,指标或脚本目录。它允许您在程序端立即运行程序而不必手动复制到适当的目录。


    MQL5存储中的公共项目:参与开发

    如上所述,MQL5存储中的每个组项目都有公共设置:项目可以是私人的,也可以是对其他人公开的。现在,您可以免费加入的所有项目都显示在单独的“公共项目”标签。

    每个人都可以找到心仪的项目并加入其开发过程。仅需单击加入,接收存储项目。




    每个加入的用户都获得了只读权限。联系项目作者,提交您的更改。若要了解他或她的登录名,请通过快捷菜单打开项目属性。

  2. 添加了能够轻松插入属性和资源到程序代码的能力。例如,您可以迅速地将包含文件加入代码。使用命令“插入—MQH 为 #incude”,并选择所需的包含文件。对所选文件正确路径的#include指令将被插入到程序代码。




    相同菜单允许以二进制或文本数组的形式添加到程序代码文件。另外,您还可以使用EA交易或指标转移图表模板:将您的模板插入到程序代码作为数组,然后使用FileSave函数将其保存到磁盘。然后,可以使用ChartApplyTemplate函数将模板从EA交易直接应用到所需的图表上。
    //+------------------------------------------------------------------+
    //| 脚本程序起始函数                          |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //--- 作为二进制数组的模板文件
       unsigned char my_template[]=
         {
          0xFF,0xFE,0x3C, ... ,0x00 // 本例中数据数组被缩短
         };
    //--- 保存和应用模板
       if(FileSave("my_template.tpl",my_template))
         {
          Print("Custom template saved in \\MQL5\\Files");
          if(ChartApplyTemplate(0,"\\Files\\my_template.tpl"))
             Print("Custom template applied to the current chart");
          else
             Print("Failed to apply custom template");
         }
       else
          Print("Failed to save custom template");
      }

  3. 添加了在ASCII,HEX和Base64格式之间转换字符串的选项。在源代码中选择一行并在编辑——转换菜单中单击所需的命令:




  4. 修正文件搜索不区分大小写。
  5. 修正计算类似x.y[0][1].z表达式时可能发生的调试错误。
  6. 使用前进和后退按键修正代码导航。

MQL5

  1. 添加了新的线上服务——MQL5云保护,用于为MQL5程序提供额外保护。这种保护类似于MetaTrader市场——最大的交易应用程序商店所使用的选项,另外,卖家提交的EX5产品文件也被编译为本地代码。

    现在,平台所有用户都可以使用这种类型的保护。若要保护您的文件,请在MetaEditor中执行以下命令:工具—MQL5云保护。MQL5云保护与市场中使用的机制的唯一不同点在于该文件与用户的电脑没有关联。通过MQL5云保护服务的保护,文件可以在任何电脑上运行,类似于普通的EX5文件。
    MQL5云保护是一种安全服务。额外保护只应用于已编译的文件。源代码没有传递到该服务。第一步,程序被编译到用户电脑上的EX5文件;然后,编译后的文件通过一个加密通道发送到服务,在该服务中,文件得到保护并返回给用户。



  2. 添加使用自定义金融工具的新函数。

    函数 行为
    CustomSymbolCreate 在指定组以指定名称创建一个自定义交易品种
    CustomSymbolDelete 删除指定名称的自定义交易品种
    CustomSymbolSetInteger 为自定义交易品种设置整型属性值
    CustomSymbolSetDouble 为自定义交易品种设置真实型属性值
    CustomSymbolSetString 为自定义交易品种设置字符串类型属性值
    CustomSymbolSetMarginRate 根据订单类型和方向为自定义交易品种设置预付款比例
    CustomSymbolSetSessionQuote 为指定交易品种和工作日设置指定报价期的起止时间
    CustomSymbolSetSessionTrade 为指定交易品种和工作日设置指定交易时期的起止时间
    CustomRatesDelete 在指定时间间隔内从自定义交易品种的价格历史记录中删除所有柱形图
    CustomRatesReplace 在指定时间间隔内用MqlRates类型数组的数据完全替换自定义交易品种的价格历史记录
    CustomRatesUpdate 将缺失的柱形图添加到自定义交易品种的历史记录并用MqlRates类型数组的数据替换现有的数据
    CustomTicksAdd 将MqlTick类型的数组数据添加到自定义交易品种的价格历史记录。自定义交易品种必须在市场报价窗口中选择。
    CustomTicksDelete 在指定时间间隔内从自定义交易品种的价格历史记录中删除所有报价
    CustomTicksReplace 在指定时间间隔内用MqlTick类型数组的数据完全替换自定义交易品种的价格历史记录

  3. 通用数据集合 添加到标准程序库。它们包含基于模板定义数据集合的类和接口。这种新型数据集合提供了更加方便的应用程序开发和高速的数据处理表现。

    程序库位于程序端工作目录的Include\Generic文件夹。

  4. 添加了对union数据类型模板的支持。
  5. SYMBOL_VISIBLE 交易工具属性已被添加。如果指定交易品种在市场报价中不可见,那么调用SymbolInfoInteger(交易品种,SYMBOL_VISIBLE)返回false。
  6. 添加新的CHARTEVENT_MOUSE_WHEEL属性。当鼠标滚轮被滚动或在图表上按下时调用该事件(如果图表CHART_EVENT_MOUSE_WHEEL=true)。
  7. 以下图表属性已被添加:

    • CHART_EVENT_MOUSE_WHEEL — 启用/禁用生成CHARTEVENT_MOUSE_WHEEL(在图表上滚动鼠标并点击事件)。可能值:0 和 1。
    • CHART_CROSSHAIR_TOOL — 启用/禁用单击中键将光标切换到十字光标的可能性。可能值:0 和 1。
    • CHART_CONTEXT_MENU — 启用/禁用右击显示图表快捷菜单。可能值:0 和 1。

  8. 现在,在计算指标窗口比例时不必考虑绘制DRAW_NONE 类型缓冲区。
  9. 在为图表设置CHART_SCALEFIX (固定比例)属性时添加CHARTEVENT_CHART_CHANGE事件生成。
  10. ArraySwap函数已被添加,允许快速交换动态数组的内容。
    bool  ArraySwap(
       void&  array1[],      // 第一数组
       void&  array2[]       // 第二数组
       );
    这个函数接受相同类型和相同维度的动态数组。对于多维数组,除了第一元素以外,所有维度中的元素数量都应该匹配。

  11. 新增新属性TERMINAL_RETRANSMISSION — 对于所有在指定计算机上运行应用程序和服务的TCP/IP协议 中的现有网络数据包的百分比(重新传输)。即使在最快且配置正确的网络中也可能发生数据包的丢失。这种情况下,在接收方与发送方之间没有确认数据包的交付。因此,丢失的数据包会重新发送。

    程序端并不会计算该值。而是每分钟从操作系统请求一次。并不表示特定程序端和交易服务器之间的连接质量,因为这个百分比是为整个网络活动而计算,包括系统和后台活动。

    TERMINAL_RETRANSMISSION属性添加到ENUM_TERMINAL_INFO_DOUBLE枚举,使用TerminalInfoDouble函数来获得它。
  12. 通过交易历史记录优化工作。

信号

  1. 修正了在强制关闭一个根据信号持仓的情况下的订单成交类型的指示。信号复制选项中提供了“账户低于XXX美元时止损”的选项:如果净值跌落了指定水平,交易信号复制将自动终止,所有持仓关闭。以前,如遇强制平仓的情况,平仓订单可能会设置一个不正确的成交类型。现在程序端会检查交易品种设置中允许的成交类型并指示适当的选项。

Tester

  1. 策略测试中HistoryOrderSelect函数的行为现在对应客户端中相同的函数。
  2. 策略测试中CopyTicksCopyTicksRange函数的行为现在对应客户端中相同的函数。
  3. 在视觉测试过程中优化显示图形对象。
  4. 修正显示交易所工具的测试结果(交易所风险管理模式)。现在,图表只能显示净值,而结余和入金负载无法显示。这种账户的交易状况是基于净值水平来进行评估。结余仅显示了账户上的金额而忽略了交易者的资产和负债。入金负债(预付款/净值)不显示,因为在交易所计算模式,预付款等于资产/负债的当前贴现值,它是随着净值的改变而改变。

  • 用户界面现已支持荷兰语。
  • 更新文档。
  • 23 八月 2017

    MetaTrader 5 iOS build 1649: market statistics of financial instruments

    The new version provides the possibility to view market statistics of financial instruments traded in the exchange execution mode. In order to view the statistics, open the menu of any symbol in Market Watch, and select 'Statistics'.


    Operations with positions in the Trade tab have become more convenient. Now, a single tap on a position or order will reveal the detailed information and available actions, such as closing, modifying or increasing the position volume, as well as opening the chart of the position symbol.

    23 八月 2017

    MetaTrader 5 iOS build 1649:支持查看金融工具市场统计信息

    新版本中可以查看交易所执行模式下进行交易的金融工具市场统计信息。打开市场报价(Market Watch)中任何交易品种的菜单,选择“统计”,来查看市场统计信息。

    此外,新版本中交易标签的持仓操作也更加便捷。现在,单击持仓或订单将会显示详细信息和可用操作,例如平仓,更改或增加持仓交易量,以及打开持仓交易品种的图表。

    2 八月 2017

    MetaTrader 5 Android build 1642: simplified way to request a real account

    In MetaTrader 5 for Android, it is now possible to easily create preliminary brokerage accounts. Select "Open a real account" from the menu and find your broker in the list of servers. You will only need attach two documents, including your identity document and a bank account statement. Your request will be forwarded to the broker, who may request additional information required for account opening.

    2 八月 2017

    MetaTrader 5 Android build 1642:简化真实账户申请流程

    MetaTrader 5 Android版,现在能够轻松创建初始真实交易账户。从菜单选择“开立真实账户”并在服务器列表中找到您的交易商。您只需附加两份文件,包括您的身份证明文件和银行账户账单。然后您的请求将被转发至交易商,同时开立账户时您可能会被要求提供其他信息。

    21 七月 2017

    MetaTrader 5 Build 1640:创建和测试自定义交易品种

    程序端

    1. 现在可以在程序端创建自定义的金融品种。使用该新选项,您可以创建任何交易品种,配置其设置,导入您的价格数据到交易品种并查看其图表。

      创建自定义交易品种
      通过“市场报价”窗口的快捷菜单打开交易品种管理窗口并点击“创建自定义交易品种”:



      大量的交易品种参数可以被配置。完整的参数列表及其描述在文档中可以查询。您可以通过复制任何类似品种的参数并修改它们来配置您的自定义交易品种。在“复制自”字段选择现有的交易品种。
      自定义交易品种的名称不可与交易商提供的交易品种名称相同。如果您连接到存在同名交易品种的服务器,那么自定义交易品种将被删除。
      这里还提供了导入和导出参数的命令。您可以在您的程序端之间轻松地分享自定义交易品种或转移交易品种。设置会被导出到JSON文本文件。

      管理自定义交易品种
      所有交易品种都显示在独立的自定义组。如果您需要更改或删除一个交易品种,请使用列表的快捷菜单:



      导入价格历史
      您可以从任何文本文件以及MetaTrader 历史文件HST和HCC导入价格数据到您的自定义交易品种。选择一个交易品种并转到“柱形图”标签。



      在导入对话框,指定到文件的路径并设置所需的参数:

      • 分隔符 — 文本文件中的元素分隔符。
      • 跳过列和行 — 导入过程中将要跳过的列数(从左向右)和行数(从上到下)。
      • 迁移 — 时间迁移小时数。导入不同时区保存的数据时使用的选项。
      • 仅使用选定 — 仅导入在行查看区域突出显示的行。您可以按住 Ctrl 或 Shift 并用您的鼠标突出标记行。

      1分钟柱文件有以下格式:日期 时间 开盘价 最高价 最低价 收盘价 报价量 交易量 点差。例如;
      2016.06.27    00:01:00    1.10024    1.10136    1.10024    1.10070    18    54000000    44
      2016.06.27    00:02:00    1.10070    1.10165    1.10070    1.10165    32    55575000    46
      2016.06.27    00:03:00    1.10166    1.10166    1.10136    1.10163    13    13000000    46
      2016.06.27    00:04:00    1.10163    1.10204    1.10155    1.10160    23    51000000    41
      您可以使用任何现有品种的数据应用于您的自定义交易品种。导出数据(该选项已添加到之前的平台版本),必要情况下进行修改再将其导回。
      价格历史以一分钟柱的形式存储在MetaTrader 5中。其他所有时间周期都基于这些柱来创建。您也可以导入较高时间周期的数据,但这种情况下较低周期的图表将会出现差别。例如,如果您导入一小时数据,按小时显示的柱形图将会出现在M1图表上。
      自定义交易品种的价格数据保存在独立的自定义目录中(不在交易服务器数据存储的目录中):
      C:\Users\[windows account]\AppData\Roaming\MetaQuotes\Terminal\[instance id]\bases\Custom

      使用自定义交易品种
      自定义交易品种的用法类似于使用交易商提供的品种。自定义交易品种显示在市场报价窗口;您可以打开这种交易品种的图表并在这里使用指标和分析对象。自定义交易品种不可以进行交易。

      测试自定义交易品种的策略
      自定义交易品种可以在策略测试中测试自动交易和指标。以此来优化交易策略,甚至包括交易商目前尚未提供的金融品种。您只需要正确导入历史数据并配置自定义交易品种的属性。



      当计算预付款和利润时,策略测试会自动使用可用的交叉汇率。假设我们在外汇预付款计算类型创建AUDCAD.custom交易品种而我们账户的货币为美元。那么,测试器会根据外汇交易品种名称按照下面顺序搜索所需的交易品种:
      1.     首先,会搜索AUDUSD.custom(计算预付款)和USDCAD.custom(计算交易利润)格式的交易品种
      2.     如果其中一些交易品种不存在,那么会搜索第一个与所需货币对名称(AUDUSD和USDCAD分别进行)相对应的交易品种。例如,找到了AUDUSD.b 和 NZDUSD.b 交易品种。这意味着可以使用它们的汇率计算预付款和利润。

      其他预付款计算类型的工具(期货和 股票交易)则需要一种货币对把工具货币兑换成入金货币。假设我们创建了一个利润和预付款货币为GBP的自定义交易品种而入金货币是CHF。这种情况下,会依照以下顺序搜索测试交易品种:
      1. 检查是否存在GBPCHF (GBP vs CHF) 对应的交易品种。
      2. 如果这种交易品种不存在,那么会搜索第一个与GBPCHF名称相对应的交易品种,例如GBPCHF.b或GBPCHF.def。

      当通过自定义工具测试应用程序时,要确保交易账户包含全部所需的货币对。否则,测试期间将无法计算金融结果和预付款需求。

      在MetaTrader 5平台未来的版本中将会提供更多的可能性
      自定义交易品种的开发尚未完成,在接下来的平台版本中将会添加更多的功能。您将可以从EA交易直接导入历史记录到自定义交易品种,以及实时放送该交易品种的数据(添加报价)。

    2. 添加通过交易量过滤成交时间&交易量功能。

      少于指定交易量的实际交易量可以从成交时间&交易量表格中隐藏。如果使用这个过滤器,那么将只有大额交易才会显示在成交时间&交易量窗口。

      双击成交时间&交易量窗口的第一行,指定最小交易量手数,然后点击市场深度的任何其他区域。交易将被过滤,而当前过滤值将会出现在交易量列的标题。



      您还可以使用成交时间&交易量的快捷菜单指定最小交易量。

    3. 添加绑定市场深度和活动图表的选项。每次您切换到金融品种的图表时,在市场深度窗口都会自动启用相同品种。所以,您无需为每个新交易品种打开市场深度窗口。




    4. 修正程序端窗口最小化和最大化后的工具栏刷新。
    5. 修正交易单和持仓单重复情况下生成的持仓交易历史。

    MQL5

    1. 添加在价格历史分析MQL5程序的选项。该选项无需等候新报价就可以检查程序性能。

      当基于真实数据进行分析时,可以在程序端标准图表中启用程序。许多程序,尤其是指标,只有在收到新报价(OnTickOnCalculate)时才会执行计算。因此,若要评估程序表现,您必须等候实时新报价。如果您使用历史数据测试程序,您可以立即提供所需的负载。分析在策略测试中以可视化模式启动,您可以一次性接收许多新报价事件。



    2. 添加支持union。Union是一种特殊的数据类型,由几个共享相同内存区的变量组成。因此,union提供了以两种(或更多)不同的方式讲解相同位序列的能力。Union声明从'union'关键字开始。
      union LongDouble
      {
        long   long_value;
        double double_value;
      };
      与结构不同,不同的union成员属于同一个内存区。在该示例中,LongDouble函数的union是通过共享同一个内存区的long和double类型值来声明。请注意,由于long_value 和 double_value 变量重复(在内存中),所以union不可以同时存储long整型值和double真实型值(不同于结构)。 换句话说,MQL5程序随时都可以将union的数据处理为整型(long)或真实型(double)值。因此,union允许接收表示相同数据序列的两种(或更多种)选项。

      union声明期间,编译器会自动分配足够的内存区以便在变量union存储最大的类型(交易量)。同样的语法也用于访问关于结构的union元素,例如,点操作符
      union LongDouble
      {
        long   long_value;
        double double_value;
      };
      //+------------------------------------------------------------------+
      //| 脚本程序起始函数                                                        |
      //+------------------------------------------------------------------+
      void OnStart()
        {
      //---
         LongDouble lb;
      //--- 获得并显示无效 -nan(ind) 数字
         lb.double_value=MathArcsin(2.0);
         printf("1.  double=%f                integer=%I64X",lb.double_value,lb.long_value);
      //--- 最大的标准化数值 (DBL_MAX)
         lb.long_value=0x7FEFFFFFFFFFFFFF;
         printf("2.  double=%.16e  integer=%I64X",lb.double_value,lb.long_value);
      //--- 最小的正标准化 (DBL_MIN)
         lb.long_value=0x0010000000000000;    
         printf("3.  double=%.16e  integer=%.16I64X",lb.double_value,lb.long_value);
        }
      /*  Execution result
          1.  double=-nan(ind)                integer=FFF8000000000000
          2.  double=1.7976931348623157e+308  integer=7FEFFFFFFFFFFFFF
          3.  double=2.2250738585072014e-308  integer=0010000000000000
      */

    3. 为结构和类对象添加自动生成隐式复制操作符。现在,编译器可以自动创建复制操作符,它可以为对象编写简单的条目,例如b=a:
      class Foo
        {
         int               value;
      public:
         string Description(void){return IntegerToString(value);};
         //--- 默认构造函数
                           Foo(void){value=-1;};
         //--- 参数化构造函数   
                           Foo(int v){value=v;};
        };
      //+------------------------------------------------------------------+
      //|  包括 Foo 类型对象的结构                           |
      //+------------------------------------------------------------------+
      struct MyStruct
        {
         string            s;
         Foo               foo;
        };
      //+------------------------------------------------------------------+
      //| 脚本程序起始函数                                    |
      //+------------------------------------------------------------------+
      void OnStart()
        {
      //---
         MyStruct a,b;
         Foo an_foo(5);
         a.s="test";
         a.foo=an_foo;
         Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
         Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
      //---
         Print("b=a");
         b=a;
      //---
         Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
         Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
      /*
         Execution result;
         a.s=test a.foo.Description()=5
         b.s= b.foo.Description()=-1
         b=a
         a.s=test a.foo.Description()=5
         b.s=test b.foo.Description()=5
      */
        }
      在隐式操作符中执行对象的成员逐一复制。

      • 如果成员是一个对象,那么该对象对应的复制操作符将会被调用。
      • 如果成员是一个对象数组,那么调用每个元素对应的复制操作符之前就会使用ArrayResize增加或减少接收数组到所需的大小。
      • 如果成员是简单类型数组,ArrayCopy函数将用于复制。
      • 如果成员是一个对象指针,那么将会复制指针而不是它指向的对象。

      必要的情况下,您可以使用重载覆盖这个行为然后创建您自己的选项来替代隐式复制操作符。

    4. 当使用Copy* 函数访问来自EA交易的价格历史时,优化内存使用。当处理大量数据将会大幅降低内存消耗。

    5. 现在,TimeToStruct函数返回一个布尔值,允许检查datetime到MqlDateTime转换的成功率。
    6. 添加禁止在结构使用FileWriteStructFileReadStruct函数的禁令,包括字符串,动态数组,对象和指针。
    7. 已添加以下返回代码:

      • TRADE_RETCODE_REJECT_CANCEL — 激活挂单的请求被拒绝,订单被取消
      • TRADE_RETCODE_LONG_ONLY — 由于交易品种设置了“仅允许买入持仓”的规则,所以请求被拒绝
      • TRADE_RETCODE_SHORT_ONLY — 由于交易品种设置了“仅允许卖出持仓”的规则,所以请求被拒绝
      • TRADE_RETCODE_CLOSE_ONLY — 由于交易品种设置了“仅允许关闭现有持仓”的规则,所以请求被拒绝

    8. 通过SYMBOL_ORDER_MODE参数添加SymbolInfoInteger函数的新返回值。SYMBOL_ORDER_CLOSEBY — Close By操作的权限,例如,通过反向持仓来平仓。
    9. SYMBOL_CUSTOM布尔属性已添加到ENUM_SYMBOL_INFO_INTEGER枚举。该属性可以了解交易品种是否为自定义。使用SymbolInfoInteger函数来获得属性。
    10. 现在有可能获得创建一个订单,交易或持仓的原因。

      新属性


      订单,交易和持仓的创建原因
      已添加三个变量用来获得创建交易操作的原因:

      ENUM_POSITION_REASON ENUM_DEAL_REASON ENUM_ORDER_REASON 原因描述
      POSITION_REASON_CLIENT DEAL_REASON_CLIENT ORDER_REASON_CLIENT 激活从桌面程序端下单的订单而执行该操作
      POSITION_REASON_MOBILE DEAL_REASON_MOBILE ORDER_REASON_MOBILE 激活从手机应用下单的订单而执行该操作
      POSITION_REASON_WEB DEAL_REASON_WEB ORDER_REASON_WEB 激活从网页平台下单的订单而执行该操作
      POSITION_REASON_EXPERT DEAL_REASON_EXPERT ORDER_REASON_EXPERT 激活从MQL5程序下单的订单而执行该操作,例如EA交易或脚本
      - DEAL_REASON_SL ORDER_REASON_SL 激活止损而执行该操作
      - DEAL_REASON_TP ORDER_REASON_TP 激活止赢而执行该操作
      - DEAL_REASON_SO ORDER_REASON_SO 由于Stop out 事件而执行该操作
      - DEAL_REASON_ROLLOVER - 由于展期交割而执行交易
      - DEAL_REASON_VMARGIN - 收取变动预付款后执行交易
      - DEAL_REASON_SPLIT - 股票或其他资产分割(价格减少)后执行交易,宣布分割期间拥有持仓

    11. 优化同步和访问报价历史。
    12. CopyTicksRange函数中,修正返回报价到统计数组。在早期版本中,这种情况下经常返回0报价。
    13. 模糊逻辑库完成了多种修正。

    信号

    1. 修正无交易账户连接的情况下从网站打开的信号。

    Tester

    1. 优化并加速处理订单和交易历史。当处理大量数据时(数万条历史条目)将大幅度提高操作速度。
    2. 修正测试报告中计算的持仓时间。

    MetaEditor

    1. 修正了调试程序中静态类成员数组的显示内容。
    2. 在调试程序中添加了一个断点列表。该列表可以使用Debug标签的快捷菜单来打开:



      若要跳转到断点,请双击它。
    更新文档。


    12345678