MetaTrader 5 Build 1430:更新展示标签

MetaTrader 5新功能

16 九月 2016

程序端



  1. 实现为交易所市场形成展示标签的新算法。现在,平台根据应用于交易账户的风险管理系统来适应资产显示:零售外汇,期货或交易所模式。

    资产部分有助于在交易所交易外汇或期货 显示它们当前的市场状态。相同货币可以在不同的交易品种种类中找到:作为货币组中的一个,作为基础货币,等等。例如,您可以反向持仓 GBPUSD,USDJPY和GBPJY。在这种情况下,了解您有多少货币以及您需要多少货币是非常困难的。持有超过3个持仓会使这个任务进一步复杂化。 如今在此种情况下,账户的所有状态都可以轻松地在资产标签查看。
    让我们使用3种相同的持仓举例说明:

    以134.027 的价位买入1手 GBPJPY— 收到 100 000 GBP,给出134 027 000 JPY
    以102.320 的价位卖出1手 USDJPY— 给出 100 000 USD,收到102 320 000 JPY
    以1.30923 的价位卖出1手 GBPUSD— 给出100 000 GBP,收到 103 920 USD

    我们同时买入卖出100 000GBP。我们有0GBP,资产标签不会显示这个货币。而USD,我们在一种情况下给出货币而在另一种情况下接收它。由于入金货币也是USD,资产标签会计算最终结果并将其添加到当前结余。参与两个交易的JPY意味着该标签显示其总值。




    使用交易所模式的人们 可以使用这个部分了解他们资金的使用情况。与之前模式不同,资金是在交易执行的时候直接出金/加入。例如,如果您买入EURRUB,您马上会收到EUR而 相应的RUB总值会从结余取出。在交易过程中,账户结余甚至可能是负数:当您使用借款时而购买的资产则用作抵押。在这种情况下,资产标签可以使您轻松地了 解交易账户状态。

    此外,在这里您还可以看到清算值 — 账户的金额和以市价平掉当前所有持仓的价格(结果)。




  2. 修正交易操作历史记录中显示的交易类型。
  3. 修正重新连接交易账户时重复显示的风险提示窗口。
  4. 优化和修正大量交易品种情况下交易品种选择对话框的使用情况(几千甚至更多)。
  5. 修正基于Moving Average(Bollinger Bands,Adaptive Moving Average等)计算的内置指标的展示水平。在此之前,当在独立子窗口绘制指标时会产生错误。
  6. 修正如果订单价格与合约上限或下限价格一致的情况下偶尔出现的干扰下期货合约订单的错误。

MQL5

  1. 优化和加快MQL5应用程序的编译速度。
  2. 为类,结构和函数添加支持'final' 和'override'修饰符。

    类和结构的'final'修饰符
    'final'修饰符在声明一个结构或类的时候禁止进一步继承它。 如果在这个类(结构)中无需做出任何进一步变化或这种变化出于安全原因无法接受,则以'final'修饰符声明那个类(结构)。在这种情况下,所有类的类函数也默认为 'final'。
    class CFoo final
      {
      //--- 类主体
      };
     
    class CBar : public CFoo
      {
      //--- 类主体
      };
    当如上面显示的一样试图以'final'修饰符从一个类继承时,编译器显示一个错误:
    不能像其被声明为'final'一样从'CFoo' 继承
    参照 'CFoo' 声明

    函数的'override'修饰符
    'override' 修饰符表示声明的函数应该始终重写父类的类函数。使用修饰符可以使您避免重写时的错误,例如意外修改类函数的签名。例如,接受 'int' 类型变量的 'func' 类函数定义在基本类中:
    class CFoo
      {
       void virtual func(int x) const { }
      };
    类函数重写在继承类:
    class CBar : public CFoo
      {
       void func(short x) { }
      };
    但是自变量类型错误的从'int' 变为'short'。实际上,替代重写的重载类函数在这种情况下执行。根据重载函数定义算法进行操作时,编译器在有些情况下可能会选择基本类中定义的类函数而不是重写的类函数。

    为了避免这种错误,'override' 修饰符应该明确添加到重写的类函数。
    class CBar : public CFoo
      {
       void func(short x) override { }
      };
    如果在重写过程中更改了类函数签名,编译器将无法在发布编译错误的父类中找到相同签名的类函数:
    'CBar::func' 类函数是通过'override'标识符声明但不会重写任何基本类的类函数

    函数的'final'修饰符

    'final' 修饰符操作是相反的 — 它禁止在衍生类中重写类函数。如果类函数的实现非常充分并得到完全完成,则以 'final' 修饰符声明它以确保其以后不被修改。
    class CFoo
      {
       void virtual func(int x) final { }
      };
     
    class CBar : public CFoo
      {
       void func(int) { }
      };
     
    当如上面显示的一样试图以'final'修饰符重写一个类函数,编译器显示一个错误:
    声明为'final'的'CFoo::func' 类函数不能通过 'CBar::func'重写
    请见 'CFoo::func' 声明
  3. 以默认参数修正编译的模板函数。

市场

  1. 修正分类市场产品的几个错误。

Tester

  1. 修正为可视测试模式的打开订单和持仓订单更新当前市场价格。
  2. 移除使用交易所交易品种进行测试时买入限价和卖出限价订单执行的滑移。
  3. 修正"开盘价"测试模式下意外生成的错误价格。
  4. 修正测试时生成OnTrade交易事件。
  5. 当基于真实报价测试时,不匹配的报价数据(取决于用于生成柱形图的价格的卖价或最后价)和现有分钟柱形图的最低值或最高值会出现在tester日志中。

MetaEditor

  1. 修正源代码文件中配置的数据展示。

更新文档。