请观看如何免费下载自动交易
请在Telegram上找到我们!
加入我们粉丝页
有趣的脚本?
因此发布一个链接 -
让其他人评价
喜欢这个脚本? 在MetaTrader 5客户端尝试它
显示:
6949
等级:
(53)
已发布:
2015.08.05 13:50
已更新:
2023.09.12 10:33
\MQL4\Include\Math\Alglib\
alglib.mqh (1372.18 KB) 预览
alglibmisc.mqh (60.23 KB) 预览
ap.mqh (75.68 KB) 预览
bitconvert.mqh (17.24 KB) 预览
complex.mqh (14.07 KB) 预览
dataanalysis.mqh (574.08 KB) 预览
integration.mqh (243.57 KB) 预览
linalg.mqh (712.14 KB) 预览
matrix.mqh (23.83 KB) 预览
optimization.mqh (501.04 KB) 预览
solvers.mqh (149.25 KB) 预览
statistics.mqh (398.3 KB) 预览
\MQL4\Scripts\Alglib\
TestClasses.mq4 (14.31 KB) 预览
TestClasses.mqh (1380.85 KB) 预览
UseAlglib.mq4 (6.31 KB) 预览
MQL5自由职业者 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务

原作者:

Sergey Bochkanov. ALGLIB项目网址 - http://www.alglib.net/. 该库的历史可 追溯至1999年

ALGLIB是最大最完整的数学库之一

你需要做快速傅立叶变换或解答一个差分方程系统吗?你试图在一个源代码里收集所有方法以执行复杂的数据分析吗?那么 ALGLIB 数值方法库就是你所需要的!

ALGLIB是目前多语言算法的最好库之一。以下是在官方网站提到的ALGLIB的特性:

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

  • 线性代数(直接算法,EVD / SVD)
  • 解算器(线性和非线性)
  • 插值
  • 优化
  • 快速傅里叶变换
  • 数值积分
  • 线性和非线性最小二乘拟合
  • 常微分方程
  • 特殊功能
  • 统计数据(描述性统计,假设检验)
  • 数据分析(分类/回归,包括神经网络)
  • 多重精密版线性代数,插值优化和其他算法(使用MPFR浮点运算)

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

  • 可移植的. 它可以在几乎任何地方使用任何编译器编译(参见兼容性矩阵获取更多信息)。
  • 易用的。它支持多种编程语言。如果你使用一种语言,你并不需要学习另一个语言(例如FORTRAN)来编译和链接外部库。
  • 开源的. 它可以在GPL 2 +协议下免费使用。
  • 也适合商业用户的。那些想要在商业应用中使用ALGLIB的用户可以购买商业许可而没有著佐权的要求。

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

此外,库中包含大量的测试用例,覆盖了所提方法的大部分功能。这将允许你进行测试并将检测到的错误报告给项目作者。


CAlglib类的静态函数应该被用来与库合作 - 所有的库函数作为静态函数被移动到CAlglib系统类。

附件中包括测试用例 脚本testclasses.mq4和testinterfaces.mq4与一个简单的演示脚本usealglib.mq4。同名的包括文件 (testclasses.mqh和testinterfaces.mqh)用于加载测试用例。他们应被放置到 \MQL4\Scripts\Alglib\Testcases\.

注意: testclasses.mq4脚本执行需要相当长的时间(约30分钟)。

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


描述
alglib.mqh
该主要库包包括自定义函数。这些函数应该被调用来与库合作。
alglibinternal.mqh
用于操作其他库包的附加类。
alglibmisc.mqh

该软件包包含以下类:

  1. CHighQualityRand - 高质随机数产生器。
  2. CNearestNeighbor - KD-树 代和结论。
ap.mqh 该包还包含其他包所必需的附加类。
bitconvert.mqh MQL4自身缺少的С++的基本类和函数:
  1. BitConverter - 用来将int和double型数字与位数组互相转换的类。
  2. CInfOrNaN - NaN和正/负无穷的验证和生成类。
  3. ArrayReverse - 反转数组元素的函数。
  4. GetSelectionString - 接收从char型数组元素产生的字符串的函数。
  5. MathSign - 数字符号计算函数。
  6. MathSinh - 双曲正弦计算函数。
  7. MathCosh - 双曲余弦计算函数。
  8. MathTanh - 双曲正切计算函数。
complex.mqh 定义操作复杂数的复杂结构。
dataanalysis.mqh 数据分析类:
  1. CBdSS - 误差函数计算。
  2. CDForest - 操作方案树的森林。
  3. CKMeans - 使用k-means++ 算法的集群。
  4. CLDA - 线性判别分析。
  5. CLinReg - 线性回归。
  6. CMLPBase - 多层感知器(神经网络)。
  7. CLogit - 多项Logit回归。
  8. CMarkovCPD - 人口数据的马尔可夫链。
  9. CMLPTrain - 多层感知器的训练。
  10. CMLPE - 神经网络的合成。
  11. CPCAnalysis - 主成分分析法。
delegatefunctions.mqh 该软件包包含为替换代理而创建的类。这些类的对象是在各种库方法中优化的函数。
diffequations.mqh 解常微分方程的类:
  1. CODESolver - 解常微分方程.
fasttransforms.mqh 快速变换类:
  1. CFastFourierTransform - 快速傅立叶变换。
  2. CCONV - 卷积码。
  3. CCorr - 交叉相关。
  4. CFastHartleyTransform - 快速哈特利变换。
integration.mqh 数值积分的类:
  1. CGaussQ - 高斯正交。
  2. CGaussKronrodQ - 高斯-Kronrod求积公式。
  3. CAutoGK - 自适应积分。
interpolation.mqh 插值,逼近和数值分化类:
  1. CIDWInt - 逆加权平均距离的插值和逼近.
  2. CRatInt - 关系插值.
  3. CPolInt - 多项式插值。
  4. CSpline1D - 一维样条插值。
  5. CLSFit - 线性或非线性最小二乘法近似。
  6. CPSpline - 参数化样条插值。
  7. CSpline2D - 二维样条插值。
linalg.mqh 一些线性代数操作的计算类:
  1. COrtFac - QR / LQ分解,Hessenberg分解,以及双向和三对角矩阵。
  2. CEigenVDetect - 寻找特征值和特征向量。
  3. CMatGen - 随机矩阵生成.
  4. CTrFac - LU和乔莱斯基分解。
  5. CRCond - 矩阵依赖值评估。
  6. CMatInv - 矩阵求逆。
  7. CBdSingValueDecompose - 双对角矩阵的奇异值分解。
  8. CSingValueDecompose - 矩阵奇异值分解。
  9. CFbls - 快速基本线性解决方案。
  10. CMatDet - 矩阵行列式计算。
  11. CSpdGEVD - 寻找广义对称矩阵的特征值和特征向量。
  12. CInverseUpdate - 矩阵反演和更新。
  13. CSchur - 一斋舒尔分解。
matrix.mqh 矩阵类:整数,连续的和复杂的。
optimization.mqh 维和多维优化类:
  1. CMinCG - 利用共轭梯度法优化。
  2. CMinBLEIC - 方程和不等式形式的线性约束优化。
  3. CMinLBFGS -使用二次函数模型的连续生成和分类进行优化。
  4. CMinQP - 方程和不等式形式的线性约束二次规划
  5. CMinLM - 使用Levenberg-Marquardt算法优化。
  6. CMinComp - 向后兼容的函数。
solvers.mqh 解线性和非线性方程组的类:
  1. CDenseSolver - 解线性方程组.
  2. CNlEq - 解非线性方程组
specialfunctions.mqh 分布函数,积分和多项式的类:
  1. CGammaFunc - 伽玛函数。
  2. CIncGammaF - 不完全伽玛函数.
  3. CBetaF - 贝塔函数。
  4. CIncBetaF - 不完全β函数。
  5. CPsiF - psi-函数.
  6. CAiryF - Airy函数.
  7. CBessel - 积分序列的Bessel函数.
  8. CJacobianElliptic - Jacobi椭圆函数。
  9. CDawson - 道森积分。
  10. CTrigIntegrals - 三角积分。
  11. CElliptic - 椭圆积分的第一类和第二类。
  12. CExpIntegrals - 指数积分。
  13. CFresnel - 菲涅尔积分。
  14. CHermite - 埃尔米特多项式。
  15. CChebyshev - 切比雪夫多项式。
  16. CLaguerre - 拉盖尔多项式。
  17. CLegendre - 勒让德多项式。
  18. CChiSquareDistr - 卡方分布。
  19. CBinomialDistr - 二项分布。
  20. CNormalDistr - 正态分布。
  21. CPoissonDistr - 泊松分布。
  22. CStudenttDistr - 学生t-分布。
  23. CFDistr - F-分布。
statistics.mqh 统计数据分析类:
  1. CBaseStat - 基本统计法.
  2. CCorrTests - 测试关联比重。
  3. CJarqueBera - JarqueBera标准。
  4. CMannWhitneyU - Mann-Whitney U-标准。
  5. CSignTest - 符号测试。
  6. CStudentTests - 学生t测试。
  7. CVarianceTests - F测试和卡方测试。
  8. CWilcoxonSignedRank - 魏氏W-标准。


代码:

库函数都有对自身用法的详细注释。

//+------------------------------------------------------------------+
//| 分布时机计算: 均值, 方差,                                           |
//| 偏度, 峰度.                                                       |
//| 输入参数:                                                         |
//|     X       -   样品                                              |
//|     N       -   N>=0, 样本大小:                                   |
//|                 * 如果赋值,则只前N个元素                            |
//|                   被处理                                          |
//|                 * 如果未赋值,则自动取值为                           |
//|                   X的大小                                         |
//| 输出参数                                                          |
//|     Mean    -   均值.                                             |
//|     Variance-   方差.                                             |
//|     Skewness-   偏度 (如果方差为0则取值为0).                        |
//|     Kurtosis-    峰度 (如果方差为0则取值为0).                       |
//+------------------------------------------------------------------+
static bool CBaseStat::SampleMoments(const double &cx[],const int n,double &mean,
                                     double &variance,double &skewness,double &kurtosis)
  {
//--- 检测
   if(!CAp::Assert(n>=0,__FUNCTION__+": the error variable"))
      return(false);
//--- 检测
   if(!CAp::Assert(CAp::Len(cx)>=n,__FUNCTION__+": length(x)<n"))
      return(false);
//--- 检测
   if(!CAp::Assert(CApServ::IsFiniteVector(cx,n),__FUNCTION__+": x is not finite vector"))
      return(false);
//--- 创建变量
   double v=0;
   double v1=0;
   double v2=0;
   double stddev=0;
//--- 初始化, 特例 'N=0'
   mean=0;
   variance=0;
   skewness=0;
   kurtosis=0;
//--- 检测
   if(n<=0)
      return(true);
//--- 均值
   for(int i=0;i<n;i++)
      mean+=cx[i];
   mean/=n;
//--- 方差 (使用正确的二过算法)
   if(n!=1)
     {
      //--- 计算
      for(int i=0;i<n;i++)
         v1+=CMath::Sqr(cx[i]-mean);
      for(int i=0;i<n;i++)
         v2+=cx[i]-mean;
      v2=CMath::Sqr(v2)/n;
      variance=(v1-v2)/(n-1);
      //--- 计算
      stddev=MathSqrt(variance);
     }
   else
      variance=EMPTY_VALUE;
//--- 偏度和峰度
   if(stddev!=0)
     {
      //--- 计算
      for(int i=0;i<n;i++)
        {
         v=(cx[i]-mean)/stddev;
         v2=CMath::Sqr(v);
         skewness+=v2*v;
         kurtosis+=CMath::Sqr(v2);
        }
      //--- 修改值
      skewness=skewness/n;
      kurtosis=kurtosis/n-3;
     }
//--- 成功执行
   return(true);
  }

CAlglib类的静态函数应该被用来与库合作。以下是计算一些交易统计参数的usealglib.mq4函数脚本的源代码 :

//+------------------------------------------------------------------+
//|                                                    UseAlglib.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2012 版权所有, MetaQuotes软件公司"
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| 引入库文件                                                         |
//+------------------------------------------------------------------+
#include <Math\Alglib\alglib.mqh>
#include <Trade\DealInfo.mqh>
#include <Arrays\ArrayDouble.mqh>
//+------------------------------------------------------------------+
//| 脚本程序 start 函数                                                |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 访问交易数据的对象
   CDealInfo     deal;
//--- 存储每笔交易的盈利/亏损的对象
   CArrayDouble *profit=new CArrayDouble;
//--- 存储余额的对象
   CArrayDouble *balance_total=new CArrayDouble;
//--- 初始余额
   double        balance=0;
//--- 获取历史数据
   HistorySelect(0,TimeCurrent());
//---总交易量
   int deals_total=HistoryDealsTotal();
//--- 获取交易盈利和余额数据
   for(int i=0;i<deals_total;i++)
     {
      //--- 选择第i个交易
      deal.SeilectByIndex(i);
      //--- 获取初始余额
      if(deal.DealType()==DEAL_TYPE_BALANCE)
        {
         if(NormalizeDouble(deal.Profit()+deal.Swap(),2)>=0.0)
            if(balance==0.0)
               balance=deal.Profit();
        }
      //--- 获取盈利和余额
      if(deal.DealType()==DEAL_TYPE_BUY || deal.DealType()==DEAL_TYPE_SELL)
         if(deal.Entry()==DEAL_ENTRY_OUT || deal.Entry()==DEAL_ENTRY_INOUT)
           {
            profit.Add(NormalizeDouble(deal.Profit()+deal.Swap()+deal.Commission(),2));
            balance_total.Add(balance);
            balance=balance+NormalizeDouble(deal.Profit()+deal.Swap()+deal.Commission(),2);
           }
     }
   balance_total.Add(balance_total.At(balance_total.Total()-1)+profit.At(balance_total.Total()-1));
//--- 将余额数据拷贝到double型数组
   double arr_balance[];
   ArrayResize(arr_balance,balance_total.Total());
   for(int i=0;i<balance_total.Total();i++)
      arr_balance[i]=balance_total.At(i);
//---将盈利数据拷贝到double型数组
   double arr_profit[];
   ArrayResize(arr_profit,profit.Total());
   for(int i=0;i<profit.Total();i++)
      arr_profit[i]=profit.At(i);
//--- 线性回归
//--- 独立变量个数
   int nvars=1;
//--- 样品成交量
   int npoints=balance_total.Total();
//--- 创建线性回归参数的矩阵
   CMatrixDouble xy(npoints,nvars+1);
   for(int i=0;i<npoints;i++)
     {
      xy[i].Set(0,i);
      xy[i].Set(1,arr_balance[i]);
     }
//---  检测计算结果 (成功, 不成功)的变量
   int info;
//--- 存储计算数据所必需的类对象
   CLinearModelShell lm;
   CLRReportShell    ar;
//--- 存储回归结果的数组
   double lr_coeff[];
   double lr_values[];
   ArrayResize(lr_values,npoints);
//--- 计算线性回归率
   CAlglib::LRBuild(xy,npoints,nvars,info,lm,ar);
//---接收线性回归率
   CAlglib::LRUnpack(lm,lr_coeff,nvars);
//--- 接收回收线性回归值
   for(int i=0;i<npoints;i++)
      lr_values[i]=lr_coeff[0]*i+lr_coeff[1];
//--- 计算预期回报
   double exp_payoff,tmp1,tmp2,tmp3;
   CAlglib::SampleMoments(arr_profit,exp_payoff,tmp1,tmp2,tmp3);
//---  计算HPR数组
   double HPR[];
   ArrayResize(HPR,balance_total.Total()-1);
   for(int i=0;i<balance_total.Total()-1;i++)
      HPR[i]=balance_total.At(i+1)/balance_total.At(i);
//--- 计算HPR标准偏差和数学期望
   double AHPR,SD;
   CAlglib::SampleMoments(HPR,AHPR,SD,tmp2,tmp3);
   SD=MathSqrt(SD);
//--- 计算LR关联
   double lr_corr=CAlglib::PearsonCorr2(arr_balance,lr_values);
//--- 接收LR标准错误
   double lr_stand_err=0;
   for(int i=0;i<npoints;i++)
     {
      double delta=MathAbs(arr_balance[i]-lr_values[i]);
      lr_stand_err=lr_stand_err+delta*delta;
     }
   lr_stand_err=MathSqrt(lr_stand_err/(npoints-2));
//--- 计算Sharpe比率
   double sharpe_ratio=(AHPR-1)/SD;
//--- 打印
   PrintFormat("-----------------------------------------------");
   PrintFormat("Correlation function: y = %.2fx + %.2f",lr_coeff[0],lr_coeff[1]);
//--- 参数
   PrintFormat("Expected Payoff = %.2f",exp_payoff);
   PrintFormat("AHPR = %.4f",AHPR);
   PrintFormat("Sharpe Ratio = %.2f",sharpe_ratio);
   PrintFormat("LR Correlation = %.2f",lr_corr);
   PrintFormat("LR Standard Error = %.2f",lr_stand_err);
   PrintFormat("-----------------------------------------------");
//--- 删除对象
   delete profit;
   delete balance_total;
  }
//+------------------------------------------------------------------+

我们得到以下结果:


由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/11077

Trade History Export to CSV Trade History Export to CSV

统计分析当前商品历史订单,并导出CSV文档。

仓位计算器 仓位计算器

这是一款帮你计算下单持仓比例的计算器。

Fuzzy 模糊逻辑库 Fuzzy 模糊逻辑库

FuzzyNet 程序库用于开发模糊模块, 以 C# 编写。当移植到 MQL4 时, 程序库里添加了 8 个隶属函数, 以及 4 个针对马丹尼 (Mamdani) 型系统的去模糊化方法。

OrderTimeAlert OrderTimeAlert

该 EA观察市价单, 并自开单时间, 根据预定义时间生成声音信号。