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

 

更新的MetaTrader 5 平台测试版已于2019年9月20日发布。我们邀请交易者加入新平台的测试,评估其全部功能从而帮助开发者修正出现的错误。

若要将MetaTrader 5平台更新到build 2155,请转到帮助\检查桌面版更新\最新测试版:


新版MetaTrader 5平台的最终版将在公开测试版结束后发布。

新版将有以下变化:

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




  6. 程序端:修正由于“市场报价”窗口中的“全部显示”命令无法显示所有可用交易品种列表而偶尔产生的错误。
  7. MQL5:作用域操作已得到修改,因此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

  8. MQL5:新版本支持使用以下函数更快速地访问时间序列数据:iTime、 iOpen、iHigh、iLow、iClose、iVolume、iTickVolume、iSpread。
  9. MQL5:添加对"=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&)'产生

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

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

  11. MQL5:添加对通过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平仓),“强平”时从亏损最大的持仓开始平仓。如果启用此选项,则将为亏损持仓额外检查开仓时间。服务器确定每个交易品种的亏损持仓,找出每个交易品种的最早持仓,然后在找到的持仓中关闭亏损最大的持仓。

  12. MQL5:修正导入名称匹配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() );
      }
  13. MQL5:修正经济日历新闻中的时间规格。现在,交付事件时考虑的是程序端所连接的交易服务器的时区,而不是本地计算机的时区。
  14. 信号:修正使用Wine(Mac OS和Linux)工作时信号图表的显示。
  15. Tester:策略测试的大规模更新。全新开始页面、重新设计的设置页面、提高了可用性。

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

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




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




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





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

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



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

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




  16. Tester:优化图表现在可以显示在程序端的主工作区。新增3D可视化系统:




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

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

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




  19. Tester:明显加快了测试和优化的速度,包括使用MQL5云网络执行的操作。
  20. Tester:修正并优化了框架操作。
  21. MetaEditor:添加配置代码样式(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;
     }

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




  23. MetaEditor:修正在工具提示中显示'union'关键字。
  24. 用户界面添加了格鲁吉亚语翻译。
  25. 文档已更新。

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

     
    很实用的更新!
    原因: