ALGLIB - 数值分析库 - 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;i 1); // - - 计算 标准差=数学平方根(方差); } 别的 方差=空_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;i 0,我); 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;i 0]*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;i 1;我++) 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.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
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
