欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

ALGLIB - 数值分析库 - MetaTrader 5 的库

author emer | 127 人阅读 | 0 人评论 |

ALGLIB - Numerical Analysis Library - library for MetaTrader 5

谢尔盖·博奇卡诺夫。 ALGLIB 项目网站 - http://www.alglib.net/。 图书馆日期回到1999年

您需要进行快速傅里叶变换或求解微分方程组吗?您是否执行复杂的数据分析,试图将所有方法作为源代码收集在一个地方?然后ALGLIB数值方法库适合您!

ALGLIB是目前最好的多语言算法库之一。以下是官网上提到的ALGLIB功能:

ALGLIB 是一个跨平台的数值分析和数据处理库。它支持多种编程语言(C++、C#、Pascal、VBA)和多种操作系统(Windows、Linux、Solaris)。 ALGLIB 的功能包括:

为什么选择ALGLIB?因为它是:

ALGLIB 库正在不断增强,根据用户的意见定期实施新功能和改进。最新版本是4.0。

此外,该库包含大量测试用例,涵盖了所提出方法的主要功能。这将使您能够进行测试并报告检测到的错误给该项目的作者。

CAlglib 类静态函数应该用于与库一起工作 - 所有库函数都作为静态函数移至 CAlglib 系统类。

testclasses.mq5 和 testinterfaces.mq5 测试用例脚本与简单的 usealglib.mq5 演示脚本一起附加。同名的包含文件(testclasses.mqh 和 testinterfaces.mqh)用于启动测试用例。它们应放置到 \MQL5\Scripts\Alglib\Testcases\。

笔记:testclasses.mq5 脚本执行需要相当长的时间(大约 8 分钟)。

以下是有关 ALGLIB MQL5 移植库包的更多详细信息:

该包包含以下类:

库函数对其使用有详细的注释。

//+------------------------------------------------------------------+
//|分布矩的计算:均值、方差、         |
//|偏度、峰度。                                              |
//|输入参数:                                                |
//|     X       -   示例                                          |
//|     N       -   N>=0,样本大小:                               |
//|                 * 如果给定,则只有 X 的前 N ​​个元素是     |
//|                   已处理                                     |
//|                 * 如果未给出,则自动从    | 确定
//|                   X 的大小                                     |
//|输出参数                                               |
//|     平均值    -   平均值。                                            |
//|     方差 - 方差。                                        |
//|     偏度 - 偏度(如果方差<>0;否则为零)。       |
//|     峰度 - 峰度(如果方差<>0;否则为零)。       |
//+------------------------------------------------------------------+
静止的 布尔值CBaseStat::SampleMoments(常量 双倍的&cx[],常量 整数,双倍的&意思是,
                                    双倍的&方差,双倍的&偏度,双倍的&峰度)
  {// - - 查看  如果(!CAp::断言(n>=0,__功能__+“:错误变量”))
      返回错误的);// - - 查看  如果(!CAp::Assert(CAp::Len(cx)>=n,__功能__+“:长度(x)))
      返回错误的);// - - 查看  如果(!CAp::Assert(CApServ::IsFiniteVector(cx,n),__功能__+“:x不是有限向量”))
      返回错误的);//--- 创建变量  双倍的v=0;
  双倍的v1=0;
  双倍的v2=0;
  双倍的标准差=0;//--- 初始化,特殊情况 'N=0'   平均值=0;
   方差=0;
   偏度=0;
   峰度=0;// - - 查看  如果(n<=0)
      返回真的);// - - 意思是  为了整数我=0;i//--- 方差(使用修正的两遍算法)  如果(n!=1)
     {
      // - - 计算      为了整数我=0;i为了(整数我=0;i1);
      // - - 计算      标准差=数学平方根(方差);
     }
  别的      方差=空_VALUE;//--- 偏度和峰度  如果(标准设备!=0)
     {
      // - - 计算      为了整数我=0;i//--- 更改值      偏度=偏度/n;
      峰度=峰度/n-3;
     }//--- 成功执行  返回真的);
  }

应使用 CAlglib 类静态函数与图书馆合作。下面是 usealglib.mq5 函数脚本的源代码,用于计算一些统计交易参数:

//+------------------------------------------------------------------+
//|                                                    使用Alglib.mq5 |
//|                        版权所有 2012,MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#财产版权“版权所有 2012,MetaQuotes Software Corp.”
#属性链接      “https://www.mql5.com”
#属性版本  “1.00”
//+------------------------------------------------------------------+
//|连接库                                        |
//+------------------------------------------------------------------+
#include 
#include <交易\DealInfo.mqh>
#include 
//+------------------------------------------------------------------+
//|脚本程序启动函数                                   |
//+------------------------------------------------------------------+
空白 启动时()
  {//--- 访问交易数据的对象   CDealInfo     交易;//--- 用于存储每笔交易的利润/损失的对象   CArrayDouble *利润=新的CArrayDouble;//--- 用于存储余额的对象   CArrayDouble *balance_total=新的CArrayDouble;//--- 初始余额  双倍的        余额=0;//--- 接收历史记录  历史选择0,时间当前());//--- 交易总额  整数交易总数=历史交易总计();//--- 接收交易利润和余额数据  为了整数我=0;i<交易总数;i++)
     {
      //--- 转到具有 i 索引的交易      deal.SelectByIndex(i);
      //--- 接收初始余额      如果(deal.DealType()==DEAL_TYPE_BALANCE)
        {
        如果规范化双精度(交易.Profit()+交易.Swap(),2)>=0.0)
            如果(余额==0.0)
               余额=交易.Profit();
        }
      //--- 接收利润和余额      如果(deal.DealType()==DEAL_TYPE_BUY|| deal.DealType()==交易类型_卖出)
        如果(交易.Entry()==DEAL_ENTRY_OUT||交易.Entry()==DEAL_ENTRY_INOUT)
           {
            利润.添加(规范化双精度(deal.Profit()+deal.Swap()+deal.Commission(),2));
            Balance_total.Add(余额);
            余额=余额+规范化双精度(deal.Profit()+deal.Swap()+deal.Commission(),2);
           }
     }
   Balance_total.Add(balance_total.At(balance_total.Total()-1)+利润.At(balance_total.Total()-1));//--- 将天平上的数据复制到双精度型数组  双倍的arr_balance[];
  数组调整大小(arr_balance,balance_total.Total());
  为了整数我=0;i//--- 将利润数据复制到双精度型数组  双倍的arr_profit[];
  数组调整大小(arr_profit,profit.Total());
  为了整数我=0;i<利润.Total();i++)
      arr_profit[i]=profit.At(i);//--- 线性回归
//--- 自变量的数量  整数nvars=1;//--- 样本量  整数npoints=balance_total.Total();//--- 创建线性回归的参数矩阵   CMatrixDouble xy(npoints,nvars+1);
  为了整数我=0;i0,我);
      xy[i].设置(1,arr_balance[i]);
     }//--- 检测计算结果的变量(成功、不成功)  整数信息;//--- 存储计算数据所需的类对象   CLinearModelShell lm;
   CLRReportShell    ar;//--- 用于存储回归结果的数组  双倍的lr_coeff[];
  双倍的lr_values[];
  数组调整大小(lr_值,n点);//--- 计算线性回归比率   CAlglib::LRBuild(xy,npoints,nvars,info,lm,ar);//--- 接收线性回归比率   CAlglib::LRUnpack(lm,lr_coeff,nvars);//--- 接收恢复的线性回归值  为了整数我=0;i0]*i+lr_coeff[1];//--- 计算预期收益  双倍的exp_payoff,tmp1,tmp2,tmp3;
   CAlglib::SampleMoments(arr_profit,exp_payoff,tmp1,tmp2,tmp3);//--- 计算 HPR 数组  双倍的HPR[];
  数组调整大小(HPR,balance_total.Total()-1);
  为了整数我=0;i1;我++)
      HPR[i]=balance_total.At(i+1)/balance_total.At(i);//--- 根据 HPR 计算标准差和数学期望  双倍的AHPR、SD;
   CAlglib::SampleMoments(HPR,AHPR,SD,tmp2,tmp3);
   标准差=数学平方根(标清);//--- 计算 LR 相关性  双倍的lr_corr=CAlglib::PearsonCorr2(arr_balance,lr_values);//--- 接收 LR 标准错误  双倍的lr_stand_err=0;
  为了整数我=0;i双倍的德尔塔=数学抗体(arr_balance[i]-lr_values[i]);
      lr_stand_err=lr_stand_err+delta*delta;
     }
   lr_stand_err=数学平方根(lr_stand_err/(npoints-2));//--- 计算夏普比率  双倍的Sharpe_ratio=(AHPR-1)/SD;// - - 打印  打印格式“--------------------------------------------------------”);
  打印格式“相关函数:y = %.2fx + %.2f”,lr_系数[0],lr_coeff[1]);// - - 参数  打印格式“预期收益 = %.2f”,exp_payoff);
  打印格式“AHPR = %.4f”,AHPR);
  打印格式“夏普比率 = %.2f”,锐利比率);
  打印格式“LR 相关性 = %.2f”,lr_corr);
  打印格式“LR 标准误差 = %.2f”,lr_stand_err);
  打印格式“--------------------------------------------------------”);//--- 删除对象  删除利润;
  删除余额总计;
  }//+------------------------------------------------------------------+

我们收到以下结果:

ALGLIB - Numerical Analysis Library - library for MetaTrader 5


附件下载

📎 alglib.mqh (2420.29 KB)

📎 alglibinternal.mqh (579.73 KB)

📎 alglibmisc.mqh (119.42 KB)

📎 ap.mqh (89.98 KB)

📎 arrayresize.mqh (4.88 KB)

📎 bitconvert.mqh (13.49 KB)

📎 dataanalysis.mqh (1124.84 KB)

📎 delegatefunctions.mqh (21.25 KB)

📎 diffequations.mqh (32.41 KB)

📎 fasttransforms.mqh (92.23 KB)

📎 integration.mqh (116.61 KB)

📎 interpolation.mqh (1430.87 KB)

📎 linalg.mqh (1455.11 KB)

📎 matrix.mqh (45.38 KB)

📎 optimization.mqh (2246.73 KB)

📎 solvers.mqh (295.08 KB)

📎 specialfunctions.mqh (235.55 KB)

📎 statistics.mqh (407.4 KB)

📎 TestClasses.mq5 (30.42 KB)

📎 TestClasses.mqh (3032.44 KB)

📎 TestInterfaces.mq5 (17.49 KB)

📎 TestInterfaces.mqh (679.69 KB)

📎 UseAlglib.mq5 (6.2 KB)

Source: MQL5 #1146

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录