---
title: "新版MetaTrader 5平台build 1930：浮动窗口图表和MQL5中的.Net程序库 - 更新历史"
description: "现在，您可以在交易程序端窗口之外使用交易品种图表。 这个功能的便利性在使用多个显示器进行操作时非常明显。因此，您可以在一个显示器上设置平台的主窗口来管理您的账户状态，并将您的图表移动到另一个显示器上以观察市场动向。若要将图表从程序端分离，请在快捷菜单中禁用“固定”选项。 - 更新历史"
image: "https://www.metatrader5.com/c/17/0/terminal_1__49.png"
url: "https://www.metatrader5.com/zh/releasenotes/terminal/1898"
---

# 新版MetaTrader 5平台build 1930：浮动窗口图表和MQL5中的.Net程序库

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

26 十月 2018

### 程序端

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

   ![](https://www.metatrader5.com/c/17/0/terminal_1__49.png)

    通过分离图表的独立工具栏可以应用分析对象和指标，而无需在显示器间进行切换。使用工具栏快捷菜单来管理可用命令集或将命令隐藏。
2. 完全更新的嵌入式聊天功能。现在，该功能支持群组聊天和频道交流。可以在一个环境内与一个群组的人们进行私人讨论，而不需要在不同的对话之间切换，您还可以根据您的兴趣和语言创建频道。在MQL5.community与同业和好友进行交流，而不需要访问网站。群组聊天和频道交流既可以是公开的，也可以设为私人状态。由创建者来决定是否可以自由加入群聊或是只能通过邀请加入。您还可以为频道和聊天分派版主/群主，为了进一步进行交流管理。

   ![](https://www.metatrader5.com/c/17/0/terminal_2__24.png)
3. 新增对数字加密货币交易提高交易量精确性的支持。现在，交易操作可允许的最小交易量为0.00000001手数。现在，市场深度，成交时间和交易量，以及其他界面元素都能够精确显示到小数点后8位。最小交易量及其变动幅度取决于交易商的交易品种设置。

   ![](https://www.metatrader5.com/c/17/0/terminal_3__21.png)
4. 在工具箱窗口，添加了[MQL5.community](https://www.mql5.com/zh/articles)网站发布的文章的选项卡。现在，在程序端可以直接获得600多篇关于使用MQL5开发交易策略的详细材料。每周都会发布新文章。

   ![](https://www.metatrader5.com/c/17/0/terminal_4__21.png)
5. 新增在Wine系统下操作时，支持使用证书进行[扩展认证](https://www.metatrader5.com/zh/terminal/help/start_advanced/extended_authorization)。
6. 修正了市场深度被限定在一个水平时的显示。
7. 将“另存为图片”的命令添加到标准工具栏中。现在，保存图表图片并将其分享在社区中会更加容易。

   ![](https://www.metatrader5.com/c/17/0/terminal_6__5.png)
8. 修正导入柱形图和报价时，应用时间切换。之前，在某些情况下无法使用时间切换。

   ![](https://www.metatrader5.com/c/17/0/terminal_7__4.png)
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](https://msdn.microsoft.com/en-us/library/bw1hbe6y.aspx)中了解关于描述符的更多信息。
4. 显著优化了MQL5程序的执行。在某些情况下，性能改进可以达到10%。在新版MetaEditor重新编译您的程序，使其运行得更快。

   > 遗憾的是，由于这个额外的优化功能，新程序将无法与以前的程序端版本兼容。使用MetaEditor 1910版本编译的程序之后无法在1880版本及更低的程序端中启用。使用早期的MetaEditor版本编译的程序则可以在新版程序端中运行。
5. 显著优化了MQL5函数集。
6. 新增向程序端主窗口附加图表/从程序端主窗口分离图表并管理图表位置的新属性。添加以下属性到[ENUM_CHART_PROPERTY_INTEGER](https://www.mql5.com/zh/docs/constants/chartconstants/enum_chart_property#enum_chart_property_integer)枚举：

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

    添加以下函数到[ENUM_TERMINAL_INFO_INTEGER](https://www.mql5.com/zh/docs/constants/environment_state/terminalstatus#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](https://www.mql5.com/zh/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_double)枚举：

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

    使用[SymbolInfoDouble](https://www.mql5.com/zh/docs/marketinformation/symbolinfodouble)函数来获得这些属性。
9. 添加MQL_FORWARD属性到[ENUM_MQL_INFO_INTEGER](https://www.mql5.com/zh/docs/constants/environment_state/mql5_programm_info#enum_mql_info_integer)枚举 — [前测](https://www.metatrader5.com/zh/terminal/help/algotrading/testing#forward)模式标识。
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](https://msdn.microsoft.com/en-us/library/2e70t5y1.aspx)中了解关于结构中对齐方式的更多信息。
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* 函数](https://www.mql5.com/zh/docs/series/copyticks)优化了一些访问报价历史的情况。
14. 添加了新TesterStop函数，可以使您提前完成测试/优化过程。当调用该函数时，整个交易统计信息和[OnTester](https://www.mql5.com/zh/docs/event_handlers/ontester)结果都会像完成常规测试/优化一样被传递到客户端。
15. 为自定义指标添加新属性 #property tester_everytick_calculate。它用于策略测试，允许在每次报价时强制计算指标。

### Tester

1. 现在，对于非可视化测试/优化，使用的所有指标（标准指标和自定义指标）只在数据请求期间计算。包含[EventChartCustom](https://www.mql5.com/zh/docs/eventfunctions/eventchartcustom)函数调用和应用[OnTimer](https://www.mql5.com/zh/docs/event_handlers/ontimer)处理程序的指标排除在外。在此之前，在每次报价进入时，所有指标在策略测试中都无条件计算。这项新功能显著增加了测试和优化的速度。若要在每次报价时启用强制指标计算，请为该程序添加#property tester_everytick_calculate属性。通过之前版本的编译器编译的指标将按照之前的规则计算 —— 在每次报价时计算。
2. 修正当测试/优化和生成相关报告时计算入金货币的准确性。
3. 优化并加速策略测试操作。
4. 修正多个测试和优化的错误。

### MetaEditor

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

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

**请参阅前面的新闻：**

- [MetaTrader 5平台build 1880：计算合成交易品种的完整历史](https://www.metatrader5.com/zh/releasenotes/terminal/1880)
- [MetaTrader 5 build 1870：通过ISIN在市场报价中添加交易品种](https://www.metatrader5.com/zh/releasenotes/terminal/1870)
- [MetaTrader 5平台build 1860：改进MQL5柱形图操作和策略测试功能](https://www.metatrader5.com/zh/releasenotes/terminal/1860)
- [MetaTrader 5平台Build 1755](https://www.metatrader5.com/zh/releasenotes/terminal/1755)
- [MetaTrader 5平台Build 1745](https://www.metatrader5.com/zh/releasenotes/terminal/1745)
