無料でロボットをダウンロードする方法を見る
Facebook上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
記事を気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
ライブラリ

ALGLIB - 数値分析ライブラリ - MetaTrader 4のためのライブラリ

ビュー:
2046
評価:
(53)
パブリッシュ済み:
2018.11.20 14:38
アップデート済み:
2023.09.12 10:34
このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

著者:

Sergey Bochkanov. ALGLIB のサイト- http://www.alglib.net/. ライブラリデータ1999まで

ALGLIB は、広く使われている数学ライブラリの中の一つです。

高速フーリエ変換や微分方程式を解く場合がありますか。ソースコードにすべてのメソッドを記述して、複雑なデータ解析を行いますか。上記に当てはまる場合、ALGLIBの算術ライブラリが役に立ちます!

ALGLIB は、今のところマルチ言語アルゴリズムに対応した最良のライブラリです。オフィシャルサイトにはALGLIB の特徴が下記のように述べられています:

ALGLIB はクロスプラットフォームの算術分析ライブラリで、データ加工が可能です。いくつかのプログラミング言語(C++, C#, Pascal, VBA) と OS (Windows, Linux, Solaris)をサポートしています。ALGLIB の特徴:

  • 線形代数 (直接解放 EVD/SVD)
  • Solvers (線形、非線形)
  • 補間法
  • 最適化
  • 高速フーリエ変換
  • 積分
  • 線形、非線形最小二乗法
  • 微分方程式
  • 特殊関数
  • 統計 (記述統計、仮説検定)
  • データ分析(分類/回帰、神経ネットワーク)
  • 線形代数の任意精度演算、補間最適化、その他のアルゴリズム (浮動小数点に MPFR)

ALGLIBを選ぶ理由下記参照:

  • 汎用性。 ほとんどのコンパイラでコンパイルすることができる。(詳細は互換表 を参照)。
  • 簡易性。 数多くのプログラミング言語に対応しています。一つの言語を使えば、外部ライブラリの参照とコンパイルに他の言語(例えば、FORTRANなど)
  • オープンソース。 GPL 2+下で自由に利用することができます。
  • 商業利用にも適しています商業利用で ALGLIB を使う場合にはcommercial license を購入してください。(コピーレフトの義務はありません。)

ALGLIB ライブラリは、ユーザーの意見に添って新しい関数や改善など常に拡張されていて、定期的に更新されています。最新版は 3.6.0.

また、このライブラリはほとんどすべての想定されたメソッドの使い方のサンプルが格納されています。これにより、サンプルを試すことができ、もしエラーなどがあれば、report detected errorsで作成者に報告できます。


CAlglib クラスは、ライブラリを利用するのに必要です。すべてのライブラリの関数はstatic関数としてCAlglibを経由します。

testclasses.mq5 と testinterfaces.mq5 のスクリプトは、usealglib.mq5 デモスクリプトと共に付属されています。名前を変更せずに (testclasses.mqh と testinterfaces.mqh) を格納してください。サンプルを起動するのに利用します。ディレクトリの場所は \MQL5\Scripts\Alglib\Testcases\ です。

注意: testclasses.mq5 スクリプトの実行にはかなり時間がかかります。 (約 30 分).

ALGLIB MQL4 の詳細情報は下記にあります:

パッケージ
詳細
alglib.mqh
メインのライブラリには、カスタム関数が格納されています。 この関数はライブラリと同様に呼び出してください。
alglibinternal.mqh
他のライブラリの追加のクラス
alglibmisc.mqh

このパックには下記のクラスがあります:

  1. CHighQualityRand - 高品質な乱数生成
  2. CNearestNeighbor - KD-ツリー生成と解
ap.mqh 他のパックに必要な関数もあります。
bitconvert.mqh デフォルトのMQL5では利用できない С++ の基本的なクラスと関数:
  1. BitConverter - int型やdouble型の値をbit型の配列に変換するクラス(逆も可)
  2. CInfOrNaN - NaN や 正/負の無限大の判定 のクラス
  3. ArrayReverse - 配列要素を反転する関数
  4. GetSelectionString - char型配列で生成したstring型を受け取る関数
  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 - 順序ロジスティック回帰分析
  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 - ガウスークロンロッド求積法
  3. CAutoGK - 適応型積分
interpolation.mqh 補間、近似、微分のクラス:
  1. CIDWInt - 反転平均加重距離による補間法と近似
  2. CRatInt - 有理補間
  3. CPolInt - 多項式補間
  4. CSpline1D - 一次元スプライン補間
  5. CLSFit - 線形・非線形最小二乗法による近似
  6. CPSpline - パラメトリックスプライン補間
  7. CSpline2D - 2次元スプライン補間
linalg.mqh 線形代数の計算用クラス:
  1. COrtFac - QR/LQ 分解、 ヘッセンベルグ分解、2重・3重対角行列
  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 行列のクラス: integer型、連続型、複素数型
optimization.mqh 次元、多次元最適化クラス:
  1. CMinCG - 共役勾配法による最適化
  2. CMinBLEIC - 等式・非等式の線形束縛条件の最適化
  3. CMinLBFGS - 連続生成による最適化と関数の二次元モデルによる分類
  4. CMinQP - 等式・非等式の線形束縛の二次元プログラミング
  5. CMinLM - レーベンバーグ・マーカート法による最適化
  6. CMinComp - 下位互換機能
solvers.mqh 線形・非線形方程式を解くクラス:
  1. CDenseSolver - 線形方程式の解
  2. CNlEq - 非線形方程式の解
specialfunctions.mqh 分布関数のクラス、インテグラルと多項式:
  1. CGammaFunc - ガンマ関数
  2. CIncGammaF - 不完全ガンマ関数
  3. CBetaF - ベータ関数
  4. CIncBetaF - 不完全ベータ関数
  5. CPsiF - ポリガンマ関数
  6. CAiryF - エアリー関数
  7. CBessel - インテグラルオーダーのベッセル関数
  8. CJacobianElliptic - ヤコビ楕円関数
  9. CDawson - Dawsonインテグラル
  10. CTrigIntegrals - 三角インテグラル
  11. CElliptic - 第1種、第2種完全楕円積分
  12. CExpIntegrals - 指数積分
  13. CFresnel - フレネル積分
  14. CHermite - エルミート多項式
  15. CChebyshev - チェビシェフ多項式
  16. CLaguerre - ラゲール多項式
  17. CLegendre - ルジャンドル多項式
  18. CChiSquareDistr - カイ2乗分布
  19. CBinomialDistr - 二項分布
  20. CNormalDistr - 正規分布
  21. CPoissonDistr - ポアソン分布
  22. CStudenttDistr - t分布
  23. CFDistr - F分布
statistics.mqh 統計データ分析のクラス:
  1. CBaseStat - 基本となる統計的メソッド
  2. CCorrTests - 相関係数の検定
  3. CJarqueBera - ジャック–ベラ検定
  4. CMannWhitneyU - マン・ホイットニーのU検定
  5. CSignTest - サイン検定
  6. CStudentTests - t検定
  7. CVarianceTests - F検定とカイ2乗検定
  8. CWilcoxonSignedRank - ウィルコクソンの符号順位検定


コード:

ライブラリの関数は利用法に詳細が記載されています。

//+------------------------------------------------------------------+
//| Calculation of the distribution moments: mean, variance,         |
//| skewness, kurtosis.                                              |
//| INPUT PARAMETERS:                                                |
//|     X       -   sample                                           |
//|     N       -   N>=0, sample size:                               |
//|                 * if given, only leading N elements of X are     |
//|                   processed                                      |
//|                 * if not given, automatically determined from    |
//|                   size of X                                      |
//| OUTPUT PARAMETERS                                                |
//|     Mean    -   mean.                                            |
//|     Variance-   variance.                                        |
//|     Skewness-   skewness (if variance<>0; zero otherwise).       |
//|     Kurtosis-   kurtosis (if variance<>0; zero otherwise).       |
//+------------------------------------------------------------------+
static bool CBaseStat::SampleMoments(const double &cx[],const int n,double &mean,
                                     double &variance,double &skewness,double &kurtosis)
  {
//--- check
   if(!CAp::Assert(n>=0,__FUNCTION__+": the error variable"))
      return(false);
//--- check
   if(!CAp::Assert(CAp::Len(cx)>=n,__FUNCTION__+": length(x)<n"))
      return(false);
//--- check
   if(!CAp::Assert(CApServ::IsFiniteVector(cx,n),__FUNCTION__+": x is not finite vector"))
      return(false);
//--- create variables
   double v=0;
   double v1=0;
   double v2=0;
   double stddev=0;
//--- Init, special case 'N=0'
   mean=0;
   variance=0;
   skewness=0;
   kurtosis=0;
//--- check
   if(n<=0)
      return(true);
//--- Mean
   for(int i=0;i<n;i++)
      mean+=cx[i];
   mean/=n;
//--- Variance (using corrected two-pass algorithm)
   if(n!=1)
     {
      //--- calculation
      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);
      //--- calculation
      stddev=MathSqrt(variance);
     }
   else
      variance=EMPTY_VALUE;
//--- Skewness and kurtosis
   if(stddev!=0)
     {
      //--- calculation
      for(int i=0;i<n;i++)
        {
         v=(cx[i]-mean)/stddev;
         v2=CMath::Sqr(v);
         skewness+=v2*v;
         kurtosis+=CMath::Sqr(v2);
        }
      //--- change values
      skewness=skewness/n;
      kurtosis=kurtosis/n-3;
     }
//--- successful execution
   return(true);
  }

CAlglib の統計系関数をライブラリと一緒に使う必要があります。下記は、 統計的パラメタの計算用の usealglib.mq5 関数のスクリプトのソースコードです:

//+------------------------------------------------------------------+
//|                                                    UseAlglib.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Connecting the libraries                                         |
//+------------------------------------------------------------------+
#include <Math\Alglib\alglib.mqh>
#include <Trade\DealInfo.mqh>
#include <Arrays\ArrayDouble.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- object to access data on deals
   CDealInfo     deal;
//--- object for storing profit/loss of each deal
   CArrayDouble *profit=new CArrayDouble;
//--- objects for storing the balance
   CArrayDouble *balance_total=new CArrayDouble;
//--- initial balance
   double        balance=0;
//--- receive history
   HistorySelect(0,TimeCurrent());
//--- total amount of deals
   int deals_total=HistoryDealsTotal();
//--- receive data on deals' profit and balance
   for(int i=0;i<deals_total;i++)
     {
      //--- move to the deal having i index
      deal.SelectByIndex(i);
      //--- receive initial balance
      if(deal.DealType()==DEAL_TYPE_BALANCE)
        {
         if(NormalizeDouble(deal.Profit()+deal.Swap(),2)>=0.0)
            if(balance==0.0)
               balance=deal.Profit();
        }
      //--- receive profit and balance
      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));
//--- copy data on the balance to double type array
   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);
//--- copy data on profit to double type array
   double arr_profit[];
   ArrayResize(arr_profit,profit.Total());
   for(int i=0;i<profit.Total();i++)
      arr_profit[i]=profit.At(i);
//--- linear regression
//--- number of independent variables
   int nvars=1;
//--- sample volume
   int npoints=balance_total.Total();
//--- create the matrix of parameters for the linear regression
   CMatrixDouble xy(npoints,nvars+1);
   for(int i=0;i<npoints;i++)
     {
      xy[i].Set(0,i);
      xy[i].Set(1,arr_balance[i]);
     }
//--- variable for detecting calculations result (successful, unsuccessful)
   int info;
//--- class objects necessary for storing data on calculations
   CLinearModelShell lm;
   CLRReportShell    ar;
//--- arrays for storing regression results
   double lr_coeff[];
   double lr_values[];
   ArrayResize(lr_values,npoints);
//--- calculate linear regression ratios
   CAlglib::LRBuild(xy,npoints,nvars,info,lm,ar);
//--- receive linear regression ratios
   CAlglib::LRUnpack(lm,lr_coeff,nvars);
//--- receive recovered linear regression values
   for(int i=0;i<npoints;i++)
      lr_values[i]=lr_coeff[0]*i+lr_coeff[1];
//--- calculate Expected Payoff
   double exp_payoff,tmp1,tmp2,tmp3;
   CAlglib::SampleMoments(arr_profit,exp_payoff,tmp1,tmp2,tmp3);
//--- calculate HPR array
   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);
//--- calculate standard deviation and math expectation from HPR
   double AHPR,SD;
   CAlglib::SampleMoments(HPR,AHPR,SD,tmp2,tmp3);
   SD=MathSqrt(SD);
//--- calculate LR Correlation
   double lr_corr=CAlglib::PearsonCorr2(arr_balance,lr_values);
//--- receive LR Standard Error
   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));
//--- calculate Sharpe Ratio
   double sharpe_ratio=(AHPR-1)/SD;
//--- print
   PrintFormat("-----------------------------------------------");
   PrintFormat("Correlation function: y = %.2fx + %.2f",lr_coeff[0],lr_coeff[1]);
//--- parameters
   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 objects
   delete profit;
   delete balance_total;
  }
//+------------------------------------------------------------------+

下記の結果が得られます:


MetaQuotes Ltdによってロシア語から翻訳されました。
元のコード: https://www.mql5.com/ru/code/11077

Price_Action Price_Action

Price_ActionEA trades with "PRICE ACTION" strategy has Trailing Stop Loss &Take Profit works on all time frames major forex pairs and stocks NASDAQ.

4H Swing 4H Swing

4H Swing EA trades with 3 EMA's and "STOCHASTIC" indicator and swing strategy has Trailing Stop Loss &Take Profit works best on 4H & 1D time frame major forex pairs and stocks NASDAQ.

Color MACD Color MACD

MACD indicator, red color mean bullish, blue color mean bearish.

Demarker Martingale Demarker Martingale

This Martingale EA trades with "Demarker" indicator, it is considered relatively safe because it takes a single trade at a time has Trailing Stop Loss &Take Profit works on all time frames major forex pairs and stocks NASDAQ.