Voir comment télécharger gratuitement des robots de trading
Retrouvez-nous sur Twitter !
Rejoignez notre page de fans
Un script intéressant ?
Poster un lien vers celui-ci -
laisser les autres l'évaluer
Vous avez aimé le script ? Essayez-le dans le terminal MetaTrader 5
Bibliothèque

ALGLIB - Bibliothèque d'Analyse Numérique - bibliothèque pour MetaTrader 5

Publié par:
MetaQuotes
Vues:
582
Note:
(125)
Publié:
2022.01.31 09:48
Mise à jour:
2023.09.08 17:28
\MQL5\Include\Math\Alglib\
alglib.mqh (2420.29 KB) afficher
alglibmisc.mqh (119.42 KB) afficher
ap.mqh (89.98 KB) afficher
dataanalysis.mqh (1124.84 KB) afficher
linalg.mqh (1455.11 KB) afficher
matrix.mqh (45.38 KB) afficher
optimization.mqh (2246.73 KB) afficher
solvers.mqh (295.08 KB) afficher
\MQL5\Scripts\UnitTests\Alglib\
TestClasses.mqh (3032.44 KB) afficher
Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance

Véritable auteur :

Sergey Bochkanov. Site Web du projet ALGLIB - http://www.alglib.net/. La bibliothèque date de 1999.

ALGLIB est l'une des bibliothèques mathématiques les plus importantes et les plus complètes

Avez-vous besoin de faire une transformée de Fourier rapide ou de résoudre un système d'équation différentielle ? Effectuez-vous une analyse de données complexe en essayant de rassembler toutes les méthodes en un seul endroit en tant que code source ? Alors la bibliothèque de méthodes numériques ALGLIB est faite pour vous !

ALGLIB est actuellement l'une des meilleures bibliothèques d'algorithmes multi-langages. Vous trouverez ci-dessous les fonctionnalités d'ALGLIB mentionnées sur le site officiel :

ALGLIB est une bibliothèque multiplateforme d'analyse numérique et de traitement de données. Il supporte plusieurs langages de programmation (C++, C#, Pascal, VBA) et plusieurs systèmes d'exploitation (Windows, Linux, Solaris). Les fonctionnalités d'ALGLIB incluent :

  • Algèbre linéaire (algorithmes directs, EVD/SVD)
  • Solveurs (linéaires et non linéaires)
  • Interpolation
  • Optimisation
  • Transformées de Fourier rapides
  • Intégration numérique
  • Ajustement des moindres carrés linéaire et non linéaire
  • Équations différentielles ordinaires
  • Fonctions spéciales
  • Statistiques (statistiques descriptives, tests d'hypothèses)
  • Analyse des données (classification/régression, y compris les réseaux neuronaux)
  • Plusieurs versions de précision multiple d'algèbre linéaire, d'optimisation d'interpolation et d'autres algorithmes (en utilisant MPFR pour les calculs en virgule flottante)

Pourquoi choisir ALGLIB ? Parce que c'est :

  • portable. Elle peut être compilée presque n'importe où en utilisant presque n'importe quel compilateur (voir la matrice de compatibilité pour plus d'informations).
  • facile à utiliser. Elle prend en charge de nombreux langages de programmation. Si vous utilisez un langage, vous n'avez pas besoin d'en étudier un autre (FORTRAN, par exemple) pour compiler et lier une bibliothèque externe.
  • open source. Elle peut être utilisée gratuitement sous GPL 2+.
  • convient également aux utilisateurs commerciaux. Ceux qui souhaitent utiliser ALGLIB dans des applications commerciales peuvent acheter une licence commerciale sans obligation de copyleft.

La bibliothèque ALGLIB est constamment enrichie, de nouvelles fonctions et améliorations en fonction des commentaires des utilisateurs sont régulièrement mises en œuvre. La dernière version est la 4.0.

En outre, la bibliothèque contient une grande collection de cas de test couvrant la majeure partie des fonctionnalités des méthodes proposées. Cela vous permettra de réaliser les tests et de signaler les erreurs détectées aux auteurs du projet.


Les fonctions statiques de la classe CAlglib doivent être utilisées pour travailler avec la bibliothèque - toutes les fonctions de la bibliothèque sont déplacées vers la classe système CAlglib en tant que fonctions statiques.

Les scripts de cas de test testclasses.mq5 et testinterfaces.mq5 sont joints avec un simple script de démonstration usealglib.mq5. Les fichiers d'include du même nom (testclasses.mqh et testinterfaces.mqh) sont utilisés pour lancer les cas de test. Ils doivent être placés dans \MQL5\Scripts\Alglib\Testcases\.

Remarque : l'exécution du script testclasses.mq5 prend du temps (environ 8 minutes).

Vous trouverez ci-dessous des informations plus détaillées sur les packages de bibliothèque portés par ALGLIB MQL5 :

Paquets
Description
alglib.mqh
Le package de la bibliothèque principale comprend des fonctions personnalisées. Ces fonctions doivent être appelées pour travailler avec la bibliothèque.
alglibinternal.mqh
Classes supplémentaires pour le fonctionnement d'autres packages de bibliothèque.
alglibmisc.mqh

Le package contient les classes suivantes :

  1. CHighQualityRand - générateur de nombres aléatoires de haute qualité.
  2. CNearestNeighbor - Génération et solution d'arbres KD.
ap.mqh Le package contient également des classes supplémentaires nécessaires pour d'autres packages.
bitconvert.mqh Classes C++ de base et fonctions qui sont absentes dans MQL5 comme intégrées :
  1. BitConverter - classe pour transformer des chiffres de type int et double en un tableau de bits et vice versa.
  2. CInfOrNaN - NaNs et classe de vérification et de génération plus/moins infini.
  3. ArrayReverse - fonction inverse des éléments du tableau.
  4. GetSelectionString - fonction pour recevoir la chaîne générée à partir des éléments de tableau de type char.
  5. MathSign - fonction de calcul du signe numérique.
  6. MathSinh - fonction de calcul de sinus hyperbolique.
  7. MathCosh - fonction de calcul de cosinus hyperbolique.
  8. MathTanh - fonction de calcul de tangente hyperbolique.
dataanalysis.mqh Classes d'analyse de données :
  1. CBdSS - calcul des fonctions d'erreur.
  2. CDForest - travailler avec les forêts d'arbres de solutions.
  3. CKMeans - clustering utilisant l'algorithme k-means++.
  4. CLDA - analyse discriminante linéaire.
  5. CLinReg - régression linéaire.
  6. CMLPBase - perceptron multicouche (réseaux de neurones).
  7. CLogit - régression logit multinomiale.
  8. CMarkovCPD - Chaînes de Markov pour les données de population.
  9. CMLPTrain - apprentissage du perceptron multicouche.
  10. CMLPE - ensembles de réseaux de neurones.
  11. CPCAnalysis - méthode des composants principaux.
delegatefunctions.mqh Le package contient les classes créées en remplacement des délégués. Les objets de ces classes sont les fonctions optimisées dans plusieurs méthodes de bibliothèque.
diffequations.mqh La classe pour résoudre les équations différentielles ordinaires :
  1. CODEsolver - résolution d'équations différentielles ordinaires.
fasttransforms.mqh Classes de transformation rapide :
  1. CFastFourierTransform - transformée de Fourier rapide.
  2. CConv - circonvolution.
  3. CCorr - corrélation croisée.
  4. CFastHartleyTransform - transformation rapide de Hartley.
integration.mqh Cours d'intégration numérique :
  1. CGaussQ - Quadrature gaussienne.
  2. CGaussKronrodQ - Formules de quadrature de Gauss-Kronrod.
  3. CAutoGK - intégrateur adaptatif.
interpolation.mqh Classes d'interpolation, d'approximation et de différenciation numérique :
  1. CIDWInt - interpolation et approximation par la distance moyenne pondérée inverse.
  2. CRatInt - interpolation rationnelle.
  3. CPolInt - interpolation polynomiale.
  4. CSpline1D - ​​interpolation spline unidimensionnelle.
  5. CLSFit - approximation utilisant la méthode des moindres carrés linéaires ou non linéaires.
  6. CPSpline - interpolation spline paramétrique.
  7. CSpline2D - interpolation spline bidimensionnelle.
linalg.mqh Classes pour le calcul de certaines opérations d'algèbre linéaire :
  1. COrtFac - Décompositions QR/LQ, décompositions de Hessenberg, ainsi que de matrices bi- et tridiagonales.
  2. CEigenVDetect - recherche des valeurs propres et des vecteurs propres.
  3. CMatGen - génération de matrices aléatoires.
  4. CTrFac - Décompositions LU et Cholesky.
  5. CRCond - estimation d'une valeur de dépendance matricielle.
  6. CMatInv - inversion de matrice.
  7. CBDSingValueDecompose - décomposition singulière d'une matrice bidiagonale.
  8. CSingValueDecompose - décomposition matricielle singulière.
  9. CFbls - solutions linéaires de base rapides.
  10. CMatDet - calcul d'un déterminant matriciel.
  11. CSpdGEVD - trouver les valeurs propres et les vecteurs propres dans des matrices symétriques généralisées.
  12. CInverseUpdate - inversion et mise à jour des matrices.
  13. CSchur - Décomposition d'Issai Schur.
matrix.mqh Classes de matrices : entières, continues et complexes.
optimization.mqh Classes d'optimisation dimensionnelle et multidimensionnelle :
  1. CMinCG - optimisation utilisant la méthode du gradient conjugué.
  2. CMinBLEIC - optimisation avec des contraintes linéaires sous forme d'équations et d'inéquations.
  3. CMinLBFGS - optimisation par génération et classification successives du modèle quadratique de la fonction.
  4. CMinQP - programmation quadratique avec contraintes linéaires sous forme d'équations et d'inéquations.
  5. CMinLM - optimisation utilisant l'algorithme de Levenberg-Marquardt.
  6. CMinComp - fonctions de compatibilité descendante.
solvers.mqh Classes de résolution de systèmes d'équations linéaires et non linéaires :
  1. CDenseSolver - résolution de systèmes d'équations linéaires.
  2. CNlEq - résolution de systèmes d'équations non linéaires.
specialfunctions.mqh Classes de fonctions de distribution, intégrales et polynômes :
  1. CGammaFunc - Fonction gamma.
  2. CIncGammaF - fonction Gamma incomplète.
  3. CBetaF - Fonction bêta.
  4. CIncBetaF - fonction bêta incomplète.
  5. CPsiF - fonction psi.
  6. CAiryF - Fonction Airy.
  7. CBessel - Fonctions de Bessel d'ordre intégral.
  8. CJacobianElliptic - Fonctions elliptiques jacobiennes.
  9. CDawson - Intégrale de Dawson.
  10. CTrigIntegrals - intégrales trigonométriques.
  11. CElliptic - intégrales elliptiques du premier et du deuxième type.
  12. CExpIntegrals - intégrales exponentielles.
  13. CFresnel - Intégrales de Fresnel.
  14. CHermite - Polynômes d'Hermite.
  15. CChebyshev - Polynômes de Chebyshev.
  16. CLaguerre - Polynômes de Laguerre.
  17. CLegendre - Polynômes de Legendre.
  18. CChiSquareDistr - distribution du Khi deux.
  19. CBinomialDistr - distribution binomiale.
  20. CNormalDistr - distribution normale.
  21. CPoissonDistr - Loi de Poisson.
  22. CStudenttDistr - Distribution t des étudiants.
  23. CFDistr - Distribution F.
statistics.mqh Classes d'analyse de données statistiques :
  1. CBaseStat - méthodes statistiques de base.
  2. CCorrTests - teste la signification du rapport de corrélation.
  3. CJarqueBera - Croterion JarqueBera.
  4. CMannWhitneyU - Critère U de Mann-Whitney.
  5. CSignTest - test de signe.
  6. CStudentTests - Tests t des étudiants.
  7. CVarianceTests - test F et test du chi carré.
  8. CWilcoxonSignedRank - Critère W de Wilcoxon.


Code :

Les fonctions de la bibliothèque ont des commentaires détaillés sur leur utilisation.

//+-------------------------------------------- ----------------------+
//| Calcul des moments de distribution : moyenne, variance,           |
//| asymétrie, aplatissement.                                         |
//| PARAMÈTRES D'ENTRÉE :                                             |
//|   X     - échantillon                                             |
//|   N     - N>=0, taille de l'échantillon :                         |
//|          * si donné, seuls les N éléments principaux de X sont    |
//|            traités                                                |
//|          * si non fourni, déterminé automatiquement à partir de   |
//|            la taille de X                                         |
//| PARAMÈTRES DE SORTIE                                              |
//|   Moyenne   - moyenne.                                            |
//|   Variance  - variance.                                           |
//|   Asymétrie -   asymétrie (si variance<>0 ; zéro sinon).          |
//|   Kurtosis  -   aplatissement (si variance<>0 ; zéro sinon).      |
//+-------------------------------------------------------------------+
static bool CBaseStat::SampleMoments(const double &cx[],const int n,double &mean,
                                     double &variance,double &skewness,double &kurtosis)
  {
//--- vérification
   if(!CAp::Assert(n>=0,__FUNCTION__+": the error variable"))
      return(false);
//--- vérification
   if(!CAp::Assert(CAp::Len(cx)>=n,__FUNCTION__+": length(x)<n"))
      return(false);
//--- vérification
   if(!CAp::Assert(CApServ::IsFiniteVector(cx,n),__FUNCTION__+": x is not finite vector"))
      return(false);
//--- crée les variables
   double v=0;
   double v1=0;
   double v2=0;
   double stddev=0;
//--- Initialisation, cas spécial 'N=0'
   mean=0;
   variance=0;
   skewness=0;
   kurtosis=0;
//--- vérification
   if(n<=0)
      return(true);
//--- Moyenne
   for(int i=0;i<n;i++)
      mean+=cx[i];
   mean/=n;
//--- Variance (utilisant l'algorithme corrigé en deux passes)
   if(n!=1)
     {
      //--- calcul
      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);
      //--- calcul
      stddev=MathSqrt(variance);
     }
   else
      variance=EMPTY_VALUE;
//--- Asymétrie et aplatissement
   if(stddev!=0)
     {
      //--- calculn
      for(int i=0;i<n;i++)
        {
         v=(cx[i]-mean)/stddev;
         v2=CMath::Sqr(v);
         skewness+=v2*v;
         kurtosis+=CMath::Sqr(v2);
        }
      //--- modification des valeurs
      skewness=skewness/n;
      kurtosis=kurtosis/n-3;
     }
//--- exécution réussie
   return(true);
  }

Les fonctions statiques de la classe CAlgalib doivent être utilisées pour travailler avec la bibliothèque. Vous trouverez ci-dessous le code source du script de fonction usealglib.mq5 pour le calcul de certains paramètres de notation statistiques :

//+------------------------------------------------------------------+
//|                                                    UseAlglib.mq5 |
//|                         Copyright 2012, MetaQuotes Software Corp.|
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Connecter les bibliothèques                                      |
//+------------------------------------------------------------------+
#include <Math\Alglib\alglib.mqh>
#include <Trade\DealInfo.mqh>
#include <Arrays\ArrayDouble.mqh>
//+------------------------------------------------------------------+
//| Fonction de démarrage du programme de script                     |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- objet d'accès aux données sur les ordres
   CDealInfo     deal;
//--- objet pour stocker le profit/la perte de chaque transaction
   CArrayDouble *profit=new CArrayDouble;
//--- objets pour stocker le solde
   CArrayDouble *balance_total=new CArrayDouble;
//--- solde initial
   double        balance=0;
//--- récupération de l'historique
   HistorySelect(0,TimeCurrent());
//--- nombre total de transactions
   int deals_total=HistoryDealsTotal();
//--- récupération des données des profit et solde des transactions
   for(int i=0;i<deals_total;i++)
     {
      //--- se rend à la i-ème transaction
      deal.SelectByIndex(i);
      //--- récupère le solde initial
      if(deal.DealType()==DEAL_TYPE_BALANCE)
        {
         if(NormalizeDouble(deal.Profit()+deal.Swap(),2)>=0.0)
            if(balance==0.0)
               balance=deal.Profit();
        }
      //--- récupère le profit et le solde
      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));
//--- copie les données du solde dans le tableau de types 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);
//--- copie les données du profit dans le tableau de type double
   double arr_profit[];
   ArrayResize(arr_profit,profit.Total());
   for(int i=0;i<profit.Total();i++)
      arr_profit[i]=profit.At(i);
//--- régression linéaire
//--- nombre de variables indépendantes
   int nvars=1;
//--- échantillon de volume
   int npoints=balance_total.Total();
//--- crée la matrice des paramètres pour la régression linéaire
   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 pour détecter les résultats des calculs (réussi, échoué)
   int info;
//--- objets de classe nécessaires pour stocker les données des calculs
   CLinearModelShell lm;
   CLRReportShell    ar;
//--- tableaux pour stocker les résultats de la régression
   double lr_coeff[];
   double lr_values[];
   ArrayResize(lr_values,npoints);
//--- calcule les ratios de la régression linéaire
   CAlglib::LRBuild(xy,npoints,nvars,info,lm,ar);
//--- récupère les ratios de régression linéaire
   CAlglib::LRUnpack(lm,lr_coeff,nvars);
//--- récupère les valeurs de la régression linéaire calculée
   for(int i=0;i<npoints;i++)
      lr_values[i]=lr_coeff[0]*i+lr_coeff[1];
//--- calcule le Rendement Attendu
   double exp_payoff,tmp1,tmp2,tmp3;
   CAlglib::SampleMoments(arr_profit,exp_payoff,tmp1,tmp2,tmp3);
//--- calcule le tableau 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);
//--- calcule l'écart type et les attendus mathématiques depuis HPR
   double AHPR,SD;
   CAlglib::SampleMoments(HPR,AHPR,SD,tmp2,tmp3);
   SD=MathSqrt(SD);
//--- calcule la corrélation LR
   double lr_corr=CAlglib::PearsonCorr2(arr_balance,lr_values);
//--- récupère l'erreur standard 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));
//--- calcule la Ratio de Sharpe
   double sharpe_ratio=(AHPR-1)/SD;
//--- affichage
   PrintFormat("-----------------------------------------------");
   PrintFormat("Fonction de corrélation : y = %.2fx + %.2f",lr_coeff[0],lr_coeff[1]);
//--- parameters
   PrintFormat("Rendement Attendu = %.2f",exp_payoff);
   PrintFormat("AHPR = %.4f",AHPR);
   PrintFormat("Ratio de Sharpe = %.2f",sharpe_ratio);
   PrintFormat("Corrélation LR = %.2f",lr_corr);
   PrintFormat("Erreur Standard LR = %.2f",lr_stand_err);
   PrintFormat("-----------------------------------------------");
//--- supprime les objets
   delete profit;
   delete balance_total;
  }
//+------------------------------------------------------------------+

On obtient le résultat suivant :



Traduit du russe par MetaQuotes Ltd.
Code original : https://www.mql5.com/ru/code/1146

L'exemple d'utilisation de IndicatorParameters() L'exemple d'utilisation de IndicatorParameters()

Cet Expert Advisor illustre l'utilisation de la fonction IndicatorParameters() pour obtenir des informations sur le nombre de paramètres d'entrée, leur type et leurs valeurs.

Visualisation des résultats d'optimisation en temps réel Visualisation des résultats d'optimisation en temps réel

Présentation de l'exemple de visualisation des résultats d'optimisation en temps réel (dynamique de la courbe d'équilibre et paramètres statistiques d'un Expert Advisor).

Moving Average Moving Average

L'Expert Advisor Moving Average trade lorsque le prix franchit la MA.

MACD Sample MACD Sample

L'Expert Advisor MACD Sample trade au croisement de la ligne principale et de la ligne de signal du MACD. Cet Expert Advisor est un exemple d'approche orientée objet dans le développement d'EA.