Voir comment télécharger gratuitement des robots de trading
Retrouvez-nous sur Telegram !
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 4

Vues:
433
Note:
(53)
Publié:
2022.01.31 10:18
Mise à jour:
2023.09.12 10:26
\MQL4\Include\Math\Alglib\
alglib.mqh (1372.18 KB) afficher
ap.mqh (75.68 KB) afficher
complex.mqh (14.07 KB) afficher
linalg.mqh (712.14 KB) afficher
matrix.mqh (23.83 KB) afficher
solvers.mqh (149.25 KB) afficher
\MQL4\Scripts\Alglib\
TestClasses.mqh (1380.85 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.

Remarque : L'Expert Advisor fonctionne avec MetaTrader 4 build 555 et supérieur.

L'archive doit être décompressée dans : terminal_data_folder.
Les codes de la bibliothèque se trouvent dans terminal_data_folder\Math\Alglib\
Des exemples de scripts de test se trouvent dans terminal_data_folder\MQL4\Scripts\Alglib\

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 3.6.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.mq4 et testinterfaces.mq5 sont joints avec un simple script de démonstration usealglib.mq4. 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 \MQL4\Scripts\Alglib\Testcases\.

Remarque : l'exécution du script testclasses.mq4 prend beaucoup de temps (environ 30 minutes).

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

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 absentes dans MQL4 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.
complex.mqh Définir des structures complexes pour travailler avec des nombres complexes.
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 trading statistiques :

//+------------------------------------------------------------------+
//|                                                    UseAlglib.mq4 |
//|                        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"
#property strict
//+------------------------------------------------------------------+
//| Fichiers include                                                 |
//+------------------------------------------------------------------+
#include <Math\Alglib\alglib.mqh>
#include <Arrays\ArrayDouble.mqh>
//+------------------------------------------------------------------+
//| Fonction de démarrage du programme                               |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- objet pour le stockage des données de profit/perte pour chaque ordre
   CArrayDouble *profit=new CArrayDouble;
//--- objet pour le stockage des données du solde
   CArrayDouble *balance_total=new CArrayDouble;
//--- solde initial
   double        balance=0;
//--- requête des données historiques
//--- obtient la quantité totale d'ordres
   int orders_total=OrdersHistoryTotal();
//--- obtient le profit
   for(int i=0;i<orders_total;i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
        {
         Print("Erreur dans OrderSelect (",GetLastError(),")");
         return;
        }
      int order_type=OrderType();
      //--- solde initial
      if(order_type==6) // OP_BALANCE=6
        {
         if(NormalizeDouble(OrderProfit()+OrderSwap(),2)>=0.0)
            if(balance==0.0)
               balance=OrderProfit();
        }
      //--- ajoute le profit de l'ordre
      if(order_type==OP_BUY || order_type==OP_SELL)
        {
         double order_profit=OrderProfit()+OrderSwap()+OrderCommission();
         profit.Add(NormalizeDouble(order_profit,2));
         balance_total.Add(balance);
         balance=balance+NormalizeDouble(order_profit,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 doubles
   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 doubles
   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;
//--- nombre de points
   int npoints=balance_total.Total();
//--- création d'une matrice de paramètres, utilisée 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 de détection du résultat des calculs (succès, échec)
   int info;
//--- objets de classe nécessaires au stockage des données sur les calculs
   CLinearModelShell lm;
   CLRReportShell    ar;
//--- tableaux pour stocker les résultats de régression
   double lr_coeff[];
   double lr_values[];
   ArrayResize(lr_values,npoints);
//--- calcule les coefficients de régression linéaire
   CAlglib::LRBuild(xy,npoints,nvars,info,lm,ar);
//--- récupère les coefficients de régression linéaire
   CAlglib::LRUnpack(lm,lr_coeff,nvars);
//--- obtient les valeurs de régression linéaire récupérées
   for(int i=0;i<npoints;i++)
      lr_values[i]=lr_coeff[0]*i+lr_coeff[1];
//--- calcul du gain attendu
   double exp_payoff,tmp1,tmp2,tmp3;
   CAlglib::SampleMoments(arr_profit,exp_payoff,tmp1,tmp2,tmp3);
//--- calcul du 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);
//--- calcul de l'écart type et de la moyenne de HPR
   double AHPR,SD;
   CAlglib::SampleMoments(HPR,AHPR,SD,tmp2,tmp3);
   SD=MathSqrt(SD);
//--- calcul de la corrélgation LR
   double lr_corr=CAlglib::PearsonCorr2(arr_balance,lr_values);
//--- calcul de 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));
//--- calcul du ration Sharpe
   double sharpe_ratio=(AHPR-1)/SD;
//--- print
   PrintFormat("-----------------------------------------------");
   PrintFormat("Régrssion linéaire : y = %.2fx + %.2f",lr_coeff[0],lr_coeff[1]);
//--- paramètres
   PrintFormat("Gain 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("-----------------------------------------------");
//--- delete objects
   delete profit;
   delete balance_total;
  }
//+------------------------------------------------------------------+

Nous recevrons le résultat suivant (en fonction des résultats de votre trading) :

Résultat du test d'Alglib



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

OBJ_EDIT_Example OBJ_EDIT_Example

Exemple d'utilisation de l'objet graphique OBJ_EDIT.

OBJ_Label_Example OBJ_Label_Example

Exemple d'utilisation de l'objet graphique OBJ_LABEL.

Zigzag R Zigzag R

Une version optimisée de l'indicateur Zigzag, qui a été inclus dans la livraison MT4 de 2005 (et dans MT3.83).

SignalsDemo SignalsDemo

L'Expert Advisor affiche les propriétés des signaux, permet de modifier les paramètres de copie du signal et de s'abonner ou de se désabonner au signal de trading sélectionné.