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

谢尔盖·博奇卡诺夫。 ALGLIB 项目网站 -http://www.alglib.net/。图书馆日期回到1999年。
注意:EA 交易与 MetaTrader 4 配合使用构建 555 及更高版本。
您需要进行快速傅里叶变换或求解微分方程组吗?您是否执行复杂的数据分析,试图将所有方法作为源代码收集在一个地方?然后ALGLIB library of numerical methods is for you!
ALGLIB是目前最好的多语言算法库之一。以下是官网上提到的ALGLIB功能:
ALGLIB 是一个跨平台的数值分析和数据处理库。它支持多种编程语言(C++、C#、Pascal、VBA)和多种操作系统(Windows、Linux、Solaris)。 ALGLIB 的功能包括:
为什么选择ALGLIB?因为它是:
ALGLIB 库正在不断增强,根据用户的意见定期实施新功能和改进。最新版本是3.6.0。
此外,该库包含大量测试用例,涵盖了所提出方法的主要功能。这将使您能够进行测试并报告检测到的错误给该项目的作者。
CAlglib 类静态函数应该用于与库一起工作 - 所有库函数都作为静态函数移至 CAlglib 系统类。
testclasses.mq4 和 testinterfaces.mq5 测试用例脚本与简单的 usealglib.mq4 演示脚本一起附加。同名的包含文件(testclasses.mqh 和 testinterfaces.mqh)用于启动测试用例。它们必须放置到 \MQL4\Scripts\Alglib\Testcases\。
笔记:testclasses.mq4 脚本执行需要相当长的时间(大约 30 分钟)。
以下是有关 ALGLIB MQL4 移植库包的更多详细信息:
该包包含以下类:
库函数对其使用有详细的注释。
//+------------------------------------------------------------------+ //|分布矩的计算:均值、方差、 | //|偏度、峰度。 | //|输入参数: | //| 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.mq4 | //| 版权所有 2012,MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #财产版权 “版权所有 2012,MetaQuotes Software Corp.” #财产关联 “https://www.mql5.com” #财产版本 “1.00” #财产严格的//+------------------------------------------------------------------+ //|包括库 | //+------------------------------------------------------------------+ #包括<数学\Alglib\alglib.mqh>#包括<数组\ArrayDouble.mqh>//+------------------------------------------------------------------+ //|脚本程序启动函数 | //+------------------------------------------------------------------+ 空白 启动时() {//--- 用于存储每个订单的损益数据的对象 CArrayDouble *利润=新的CArrayDouble;//--- 用于存储余额数据的对象 CArrayDouble *balance_total=新的CArrayDouble;//--- 初始余额 双倍的 余额=0;//--- 历史数据请求 //--- 获取订单总金额 整数order_total=OrdersHistoryTotal();//--- 获取利润数据 为了(整数我=0;i<订单总数;i++) { 如果(订单选择(i,SELECT_BY_POS,MODE_HISTORY)==错误的) { 打印(“订单选择错误(”,获取最后一个错误(),“)”); 返回; } 整数order_type=订单类型(); //--- 初始余额 如果(订单类型==6)// OP_BALANCE=6 { 如果(规范化双精度(订单利润()+订单掉期(),2)>=0.0) 如果(余额==0.0) 余额=订单利润(); } //--- 添加订单利润 如果(订单类型==OP_BUY || 订单类型==OP_SELL) { 双倍的order_profit=OrderProfit()+OrderSwap()+OrderCommission(); 利润.添加(规范化双精度(订单利润,2)); Balance_total.Add(余额); 余额=余额+规范化双精度(订单利润,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//--- 将利润数据复制到double类型的数组 双倍的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 (1372.18 KB)
📎 alglibinternal.mqh (325.33 KB)
📎 alglibmisc.mqh (60.23 KB)
📎 ap.mqh (75.68 KB)
📎 arrayresize.mqh (6.59 KB)
📎 bitconvert.mqh (17.24 KB)
📎 complex.mqh (14.07 KB)
📎 dataanalysis.mqh (574.08 KB)
📎 delegatefunctions.mqh (17.68 KB)
📎 diffequations.mqh (35.66 KB)
📎 fasttransforms.mqh (85.21 KB)
📎 integration.mqh (243.57 KB)
📎 interpolation.mqh (522.71 KB)
📎 linalg.mqh (712.14 KB)
📎 matrix.mqh (23.83 KB)
📎 optimization.mqh (501.04 KB)
📎 solvers.mqh (149.25 KB)
📎 specialfunctions.mqh (234.36 KB)
📎 statistics.mqh (398.3 KB)
📎 TestClasses.mq4 (14.31 KB)
📎 TestClasses.mqh (1380.85 KB)
📎 TestInterfaces.mq4 (8.86 KB)
📎 TestInterfaces.mqh (403.03 KB)
📎 UseAlglib.mq4 (6.31 KB)
Source: MQL5 #11077
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
