MetaTrader 5平台Build 1455:MQL5 的数学函数库

MetaTrader 5新功能

14 十月 2016

程序端

  1. 在交易对话框添加买入,卖出和关闭按键的工具提示。工具提示包括操作期间买入或卖出安全性的信息,以帮助新手了解交易的过程。




  2. 在“交易”和“历史”标签添加订单,交易和持仓的新图标。




  3. 更新的程序端提供了优化及更快(最高加速4-5倍)的市场深度,市场深度报价图表以及成交时间&交易量数据的展示和更新。
  4. 修正非交易时间报价历史的同步。这一过程在某些情况下可能会消耗过多的网络流量。

MQL5

  1. 标准程序库中加入了MQL5版的ALGLIB数值分析库

    程序库特点

    • 线性代数
    • 线性和非线性方程组
    • 插值
    • 优化
    • 快速傅里叶变换
    • 数值积分
    • 线性和非线性最小平方拟合
    • 常微分方程
    • 特殊函数
    • 描述性统计和假设测试
    • 数据分析 - 分类,回归
    • 多种精确算法中的线性代数,插值等的实施算法(使用MPFR)

    如何使用

    ALGLIB 文件位于\MQL5\Include\Math\Alglib。若要使用这些函数,请将主程序文件添加到您的程序:

     #include <Math\Alglib\alglib.mqh> 

  2. 标准程序库包含了数理统计函数。MQL5 现在提供R语言的功能,这是最好的统计数据处理和分析工具之一。

    程序库特点

    统计程序库包含计算数据统计特征的函数以及统计分布操作的函数:

    • 计算数组元素统计特征的函数
    • 统计分布操作的选项:常态分布,对数常态分布,贝塔分布等。

    如何使用

    统计程序库文件位于 \MQL5\Include\Math\Stat。若要使用该程序库,请将所需函数的文件添加到您的程序,例如:

    #include <Math\Stat\Binomal.mqh>
    #include <Math\Stat\Cauchy.mqh>
    
    
    

    程序库函数的详细描述可在文章MQL5统计分布 - 使用最好的R中得到。


  3. 标准程序库中加入了MQL5版的Fuzzy程序库。Fuzzy程序库实现了Mamdani和Sugeno模糊推理系统。

    程序库特点

    • 13 个成员函数
    • 灵活的开发模糊系统规则的形式
    • Mamdani模糊推理系统
    • Sugeno模糊推理系统
    • Mamdani - 类型系统的5种去模糊化方式
    • 无限数量的输入输出变量

    如何使用

    Fuzzy程序库文件位于\MQL5\Include\Math\Fuzzy。若要使用该程序库,请将所需函数的文件添加到您的程序,例如:

    #include <Math\Fuzzy\mamdanifuzzysystem.mqh>
    #include <Math\Fuzzy\sugenofuzzysystem.mqh>
    
    
    

    程序库的详细描述可在代码库:Fuzzy - 开发模糊模型的程序库中得到


  4. CHART_QUICK_NAVIGATION新属性允许在图表中启用/禁用快速导航栏。如果您需要更改和访问属性状态,请使用ChartSetInteger和ChartGetInteger函数。




    导航栏可以通过按下回车或空格键来打开。它允许您快速转到图表上的指定日期,以及切换到交易品种和时间周期。如果您的MQL5程序会处理按下回车或空格键,请禁用CHART_QUICK_NAVIGATION属性,以避免程序库拦截这些事件。快速导航栏仍然可以通过双击打开。

  5. 添加了FileLoad和FileSave新函数。它们提供了一种简单的阅读和数组保存到文件的方式。不同于FileRead*和FileWrite*,这些函数不需要指标处理程序。FileLoad和FileSave操作数值类型的数组,以及没有字符串,动态数组或类对象的简单结构。
    long  FileLoad(
       const string filename,      // [in] 文件名
       void         &buffer[],     // [out] 阅读文件的数组
       uint         common_flag=0  // [in] 0 - 搜索程序端Files文件夹中的文件,FILE_COMMON - 在程序端普通目录中搜索
       );
    
    bool  FileSave(
       const string filename,      // [in] 文件名
       const void   &buffer[],     // [in] 保存文件的数组
       uint         common_flag=0  // [in] 0 - 创建程序端Files文件夹中的文件,FILE_COMMON - 在程序端普通目录中创建
       );
    
    
    如何将报价写入文件然后阅读的示例:
    //--- 输入参数
    input int      ticks_to_save=1000; // 报价数
    //+------------------------------------------------------------------+
    //| 脚本程序起始函数                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       string  filename=_Symbol+"_ticks.bin";
       MqlTick ticks[];
    //---
       int copied=CopyTicks(_Symbol,ticks,COPY_TICKS_ALL,0,ticks_to_save);
       if(copied!=-1)
         {
          PrintFormat(" CopyTicks(%s) copied %d ticks",_Symbol,copied);
          //--- 如果报价历史被同步,错误代码等于零
          if(!GetLastError()==0)
             PrintFormat("%s: Ticks are not synchronized. Error=",_Symbol,copied,_LastError);
          //---  写入报价到文件
          if(!FileSave(filename,ticks,FILE_COMMON))
             PrintFormat("FileSave() failed, error=%d",GetLastError());
         }
       else
          PrintFormat("Failed CopyTicks(%s), Error=",_Symbol,GetLastError());
    //--- 现在阅读返回到文件的报价
       ArrayFree(ticks);
       long count=FileLoad(filename,ticks,FILE_COMMON);
       if(count!=-1)
         {
          Print("Time\tBid\tAsk\tLast\tVolume\tms\tflags");
          for(int i=0;i<count;i++)
            {
             PrintFormat("%s.%03I64u:\t%G\t%G\t%G\t%I64u\t0x%04x",
             TimeToString(ticks[i].time,TIME_DATE|TIME_SECONDS),ticks[i].time_msc%1000,
             ticks[i].bid,ticks[i].ask,ticks[i].last,ticks[i].volume,ticks[i].flags);
            }
         }
      }
    
    

  6. 通过DRAW_CANDLES 绘制模式更改自定义指标的展示。现在该模式可以设置1-3种颜色。蜡烛图的显示取决于设定的颜色数量。

    如果指定一种颜色,图表上的所有蜡烛图都将绘制这种颜色。
    //--- 绘制相同颜色的蜡烛图 
    #property indicator_label1  "One color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- 仅指定一种颜色,所以所有蜡烛图都是相同的颜色
    #property indicator_color1  clrGreen  
    
    
    如果指定两种颜色,一种颜色用于蜡烛图的边框,另一种用于主体。
    //--- 蜡烛图的颜色不同于阴影颜色
    #property indicator_label1  "Two color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- 蜡烛图边框和阴影为绿色,主体为白色
    #property indicator_color1  clrGreen,clrWhite 
    
    
    如果指定三种颜色,一种颜色用于蜡烛图的边框,其他两种颜色用于牛市蜡烛图和熊市蜡烛图的主体。
    //--- 蜡烛图的颜色不同于阴影颜色
    #property indicator_label1  "One color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- 蜡烛图边框和阴影为绿色,牛市蜡烛图主体为白色,熊市蜡烛图主体为红色
    #property indicator_color1  clrGreen,clrWhite,clrRed
    
    
    DRAW_CANDLES 风格允许设置自定义颜色的蜡烛图。使用PlotIndexSetInteger函数运行指标期间还可以动态更改所有颜色(drawing_index_DRAW_CANDLES, PLOT_LINE_COLOR, modifier_number, color),在这里modifier_number 可能是以下的值:
    • 0 – 边框和阴影的颜色
    • 1 – 牛市蜡烛图主体颜色
    • 2 – 熊市蜡烛图主体颜色
    //--- 设置边框和阴影的颜色
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrBlue);
    //--- 设置牛市蜡烛图主体颜色
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrGreen);
    //--- 设置熊市蜡烛图主体颜色
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrRed);
    
    
  7. 修正漏洞并改进使用CopyTicks函数的报价历史操作。
  8. 从新版开始,操作符可用于接口(之前是不允许的)。

市场

  1. 修正从市场买入产品时可能导致重复请求登录MQL5.community的错误。

Tester

  1. 添加希腊语,马来语和希伯来语的UI 翻译。

更新文档。