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

MetaTrader 5新功能

26 十月 2018

程序端

  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. 更新文档。

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