Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Twitter!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Bibliotheken

ALGLIB - Numerical Analysis Library - Bibliothek für den MetaTrader 5

Veröffentlicht:
MetaQuotes
Ansichten:
4170
Rating:
(125)
Veröffentlicht:
2016.05.12 08:51
Aktualisiert:
2023.09.08 17:27
\MQL5\Include\Math\Alglib\
alglib.mqh (2420.29 KB) ansehen
alglibmisc.mqh (119.42 KB) ansehen
ap.mqh (89.98 KB) ansehen
bitconvert.mqh (13.49 KB) ansehen
dataanalysis.mqh (1124.84 KB) ansehen
integration.mqh (116.61 KB) ansehen
interpolation.mqh (1430.87 KB) ansehen
linalg.mqh (1455.11 KB) ansehen
matrix.mqh (45.38 KB) ansehen
optimization.mqh (2246.73 KB) ansehen
solvers.mqh (295.08 KB) ansehen
statistics.mqh (407.4 KB) ansehen
\MQL5\Scripts\UnitTests\Alglib\
TestClasses.mqh (3032.44 KB) ansehen
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Urheber:

Sergey Bochkanov. ALGLIB project website - http://www.alglib.net/. Die Bibliothek datiert zurück auf 1999.

ALGLIB Ist eine der größten und vollständigsten mathematischen Bibliotheken

Müssen Sie eine schnelle Fourier Transformation durchführen oder eine differentielle Gleichung lösen? Möchten Sie eine komplexe Datenanalyse durchführen und alle dafür notwenigen Methoden an einen Platz zu Verfügung haben? Dann ist die ALGLIB Bibliothek genau das Richtige für Sie!

ALGLIB Ist zurzeit eine der besten Bibliotheken für multi-language Algorithmen. Weiter unten sind die auf der offiziellen ALGLIB Website dargestellten Eigenschaften aufgeführt:

ALGLIB ist eine Cross-Platform Bibliothek für die numerische Datenanalyse. Unterstützt verschiedene Programmiersprachen (C++, C#, Pascal, VBA) Und verschiedene Betriebssysteme (Windows, Linux, Solaris). Die ALGLIB Eigenschaften beinhalten:

  • Linear algebra (Direkte Algorithmen, EVD/SVD)
  • Funktionen für das Lösen von Gleichungen (linear and nonlinear)
  • Interpolation
  • Optimierungen
  • Fast Fourier Transformationen
  • Numerische Integration
  • Lineare und nichtlineare Kleinste-Quadrate
  • Gewöhnliche Differentialgleichungen
  • Spezielle Funktionen
  • Statistik (deskriptive Statistik, Hypothesentests )
  • Die Datenanalyse (Klassifizierung / Regression, einschließlich neuronaler Netze)
  • Mehrere Präzision Versionen der linearen Algebra, Interpolation Optimierung und andere Algorithmen (mit MPFR für Gleitkomma-Berechnungen)

Warum sollte ich ALGLIB verwenden? Weil es:

  • portabel ist.. Dieses Bibliothek kann fast überall mit jedem Compiler kompiliert werden (Schauen Sie hier compatibility matrix für weitere Informationen).
  • Sie ist einfach zu verwenden. Sie unterstützt sehr viele Programmiersprachen. Man braucht also keine weitere Programmiersprache zu lernen(z.B. FORTRAN) um diese Bibliothek kompilieren und verlinken zu können.
  • Sie ist 'Open Source'. Sie kann kostenfrei unter GPL 2+ genutzt werden.
  • Sie ist ebenfalls für gewerbliche Nutzer geeignet. Diejenigen, die die ALGLIB Bibliothek kommerziell nutzen wollen, können sich eine Kommerzielle Lizenz kaufen.

Die ALGLIB Bibliothek wird kontinuierlich erweitert. Es werden auf Nachfrage von Benutzern regelmäßig neue Funktionen und Verbesserungen hinzugefügt. Die neueste Version ist 4.0.

Außerdem enthält die Bibliothek eine große Sammlung von Testfällen für den Großteil der vorgeschlagenen Methoden. Dieses erlaubt es Ihnen, Tests durchzuführen und über mögliche auftretende Fehler zu berichten.


Beim Arbeiten mit dieser Bibliothek sollten die statischen Funktionen der CAlglib-Klasse verwendet werden - Alle Funktionen der Bibliothek sind als statische Funktionen in der CAlglib-Klasse enthalten.

Die Test-Skripte testclasses.mq5 und testinterfaces.mq5 sind dem einfachen Demo-Skript usealglib.mq5 beigefügt. Die enthaltenen Dateien mit dem gleichen Namen (testclasses.mqh und testinterfaces.mqh) werden für die Verwendung der Tests gestartet. Sie sollten in das folgende Verzeichnis kopiert werden: \MQL5\Scripts\Alglib\Testcases\.

Hinweis: Die Ausführung des testclasses.mq5 Skriptes benötigt viel Zeit (ca 8 Minuten).

Nachfolgend nun weitere detaillierte Informationen über das ALGLIB MQL5 ported Bibliotheken-Paket:

Pakete
Beschreibung:
alglib.mqh
Dieses Paket mit der Hauptbibliothek enthält die benutzerdefinierten Funktionen. Diese Funktionen sollten für das Arbeiten mit dieser Bibliothek aufgerufen werden.
alglibinternal.mqh
Eine zusätzliche Klasse für das Arbeiten mit anderen Bibliothek-Paketen.
alglibmisc.mqh

Dieses Paket beinhaltet die folgenden Klassen:

  1. CHighQualityRand - Ein hochqualitativer Zufallsgenerator.
  2. CNearestNeighbor - KD-Bäume, Erzeugung und Lösung.
ap.mqh Dieses Paket enthält ebenfalls weitere Klassen, die für andere Pakete notwendig sind.
bitconvert.mqh С++ Basisklassen und Funktionen, die in MQL5 fehlen:
  1. BitConverter - Klasse für die konvertierung von int und double-Typ Zahlen in ein Array von Bits und umgekehrt.
  2. CInfOrNaN - NaNs und plus/minus unendlich Verifikation und Erzeugung.
  3. ArrayReverse - Array-Elemente Reverse-Funktion.
  4. GetSelectionString - Funktion für das Empfangen von Strings, welche aus Char-Array-Elementen generiert werden.
  5. MathSign - Vorzeichenfunktionen.
  6. Math Sinh - Hyperbelsinus Berechnungsfunktion .
  7. Math Cosh - Hyperbelcosinus Berechnungsfunktion.
  8. Math Tanh - Tangenshyperbolicus-Berechnungsfunktion.
dataanalysis.mqh Klassen für die Datenanalyse:
  1. CBdSS - Fehlerfunktionen-Berechnung.
  2. CDForest - Die Arbeit mit Wäldern von Lösungsbäumen.
  3. CKMeans - Clustering unter Verwendung von k-means++ Algorithmus.
  4. CLDA - lineare Diskriminanzanalyse.
  5. CLinReg - Lineare Regression.
  6. CMLPBase - Multilayer Perceptron (neuronale Netzwerke).
  7. CLogit - multinomial Regression logit.
  8. CMarkovCPD - Markov-Ketten für Bevölkerungsdaten.
  9. CMLPTrain - Ausbildung von mehrschichtigen Perzeptrons..
  10. CMLPE - Ensembles neuronaler Netze.
  11. CPCAnalysis - Hauptkomponenten Methode.
delegatefunctions.mqh Das Paket enthält die als Ersatz geschaffen Klassen für Delegates. Die Objekte dieser Klassen sind die in mehreren Bibliotheks-Methoden optimierten Funktionen.
diffequations.mqh Klasse für das Lösen gewöhnlicher Differentialgleichungen.
  1. CODESolver - Lösung von gewöhnlichen Differentialgleichungen.
fasttransforms.mqh Fast Transformation Klasse:
  1. CFastFourierTransform - Fast Fourier Transformation.
  2. CConv - Convolution.
  3. CCorr - Kreuzkorrelationen.
  4. CFastHartleyTransform - Fast Hartley Transformation.
integration.mqh Klasse für numerische Integration:
  1. CGaussQ - Gauß-Quadratur.
  2. CGaussKronrodQ - Gauss-Kronrod Quadraturformeln.
  3. CAutoGK - Adaptiver Integrator.
interpolation.mqh Interpolation, Annäherung und numerische Differenzierungs-Klassen:
  1. CIDWInt - Interpolation und Approximation durch den inversen durchschnittlichen gewichteten Abstand.
  2. CRatInt - Rational Interpolation.
  3. CPolInt - Polynomiale Interpolation.
  4. CSpline1D - Eindimensionale Spline-Interpolation.
  5. CLSFit - Annäherung mit linearen oder nichtlinearen Methoden der kleinsten Quadrate.
  6. CPSpline - Parametrische Spline-Interpolation.
  7. CSpline2D - Zweidimensionale Spline-Interpolation.
linalg.mqh Klassen für die Berechnung einiger Operationen der linearen Algebra:
  1. COrtFac - QR / LQ Zersetzungen, Zersetzungen Hessenbergmatrizen, sowie bi- und Tridiagonalmatrizen.
  2. CEigenVDetect - Finden der Eigenwerte und Eigenvektoren.
  3. CMatGen - Generierung von Zufallsmatrizen.
  4. CTrFac - LU und Cholesky Zersetzungen..
  5. CRCond - Schätzung eines Matrix-Abhängigkeitswertes.
  6. CMatInv - Matrix Invertierung.
  7. CBdSingValueDecompose - Singular Zersetzung einer Bidiagonalmatrix.
  8. CSingValueDecompose - Zerlegung einer singulären Matrix.
  9. CFbls - schnelle grundlegende lineare Lösungen.
  10. CMatDet - Berechnung einer Matrix Determinante.
  11. CSpdGEVD - Finden der Eigenwerte und Eigenvektoren in generalisierten symmetrischen Matrizen.
  12. CInverseUpdate - Matrizen Inversion und Update.
  13. CSchur - Issai Schur-Zerlegung.
matrix.mqh Klassen von Matrizen: integer, kontinuierlich und komplex.
optimization.mqh Und mehrdimensionale Optimierungsklassen:
  1. CMinCG - Optimierung mit CG-Verfahren.
  2. CMinBLEIC - Optimierung mit linearen Nebenbedingungen in Form von Gleichungen und Ungleichungen.
  3. CMinLBFGS - Optimierung der nachfolgenden Generation und Klassifizierung der Funktion des quadratischen Modells.
  4. CMinQP - quadratische Programmierung mit linearen Nebenbedingungen in Form von Gleichungen und Ungleichungen.
  5. CMinLM - Optimierung mit Levenberg -Marquardt-Algorithmus.
  6. CMinComp - Abwärtskompatibilitäts-Funktionen.
solvers.mqh Klassen für die Lösung von linearen und nichtlinearen Gleichungssystemen:
  1. CDenseSolver - Lösen linearer Gleichungssysteme.
  2. CNlEq - Lösung nicht-linearer Gleichungssysteme.
specialfunctions.mqh Klassen mit Verteilungsfunktionen , Integrale und Polynome:
  1. CGammaFunc - Gamma Funktion.
  2. CIncGammaF - unvollständige Gamma-Funktion.
  3. CBetaF - Beta Funktion.
  4. CIncBetaF - unvollständige Beta-Funktion.
  5. CPsiF - psi-Funktion.
  6. CAiryF - Airy Funktion.
  7. CBessel - Bessel-Funktionen der integralen Ordnung.
  8. CJacobianElliptic - Jacobi elliptische Funktionen.
  9. CDawson - Dawson Integral.
  10. CTrigIntegrals - Trigonometrische integrale.
  11. CElliptic - Elliptische integrale der ersten und zweiten Art.
  12. CExpIntegrals - Exponentielle Integrale.
  13. CFresnel - Fresnel Integrale.
  14. CHermite - Hermite-Polynome.
  15. CChebyshev - Chebyshev Polynome.
  16. CLaguerre - Laguerre Polynome.
  17. CLegendre - Legendre Polynome.
  18. CChiSquareDistr - Chi-Quadrat-Verteilung.
  19. CBinomialDistr - Binomialverteilung.
  20. CNormalDistr - Normalverteilung.
  21. CPoissonDistr - Poisson-Verteilung.
  22. CStudenttDistr - Student t-Verteilung.
  23. CFDistr - F-Verteilung.
statistics.mqh Klassen der statistischen Datenanalyse:
  1. CBaseStat - grundlegende statistische Methoden.
  2. CCorrTests - Test für Korrelationsverhältnis-Bedeutung.
  3. CJarqueBera - Jarque Bera Kriterium.
  4. CMannWhitneyU - Mann-Whitney U-Kriterium.
  5. CSignTest - Vorzeichen-Test.
  6. CStudentTests - Student t-Tests.
  7. CVarianceTests - F-Test und Chi-Quadrat-Test.
  8. CWilcoxonSignedRank - Wilcoxon W-Kriterium.


Code:

Library functions have detailed comments on their usage.

//+----------------------------------------------------------------
// | Die Berechnung der Verteilung Momente: Mittelwert, Varianz, |
// | Schiefe, Kurtosis. |
//| Eingabe Parameter:                                                |
//|     X       -   sample                                           |
// | N - N> = 0, Stichprobengröße : |
//|                 * wenn angegeben, nur führende N Elemente von X werden |     |
//|                   bearbeitet                                      |
//|                 * wenn nicht angegeben, automatisch ermittelt aus    |
//|                   größe von X                                      |
//| Ausgabe Parameter                                                |
//|     Mean    -   mean.                                            |
//|     Variance-   variance.                                        |
//|     Skewness-   Schiefe (Varianz <> 0; sonst Null).       |
//|     Kurtosis- Kurtosis (Varianz <> 0; andernfalls Null).       |
//+----------------------------------------------------------------
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);
  }

Beim Arbeiten mit dieser Bibliothek sollten die statischen Funktionen der CAlglib-Klasse verwendet werden. Im Folgenden finden Sie den Quellcode des alglib.mq5 Funktion-Skript für die Berechnung von einigen statistischen Handelsparametern:

//+----------------------------------------------------------------
//|                                                    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"
//+----------------------------------------------------------------
//| Verbinden der Bibliotheken                                         |
//+----------------------------------------------------------------
#include <Math\Alglib\alglib.mqh>
#include <Trade\DealInfo.mqh>
#include <Arrays\ArrayDouble.mqh>
//+----------------------------------------------------------------
//| Script Programm Start Funktion                                    |
//+----------------------------------------------------------------
void OnStart()
  {
//--- Objekt für den Zugriff auf Daten von Transaktionen
   CDealInfo     deal;
//--- Objekt für das Abspeichern von Profit oder Verlust zu jeder Transaktion
   CArrayDouble *profit=new CArrayDouble;
//--- Objekt für das Abspeichern des Kontostandes
   CArrayDouble *balance_total=new CArrayDouble;
//--- Anfänglicher Kontostand
   double        balance=0;
//--- Empfang historischer Daten
   HistorySelect(0,TimeCurrent());
//--- Gesamt Anzahl der Transaktionen
   int deals_total=HistoryDealsTotal();
//--- Empfang der Daten über den Profit und den Kontostand der Transaktionen
   for(int i=0;i<deals_total;i++)
     {
      //--- Mit dem i Index zu der Transaktion gehen
      deal.SelectByIndex(i);
      //--- Empfangen des anfänglichen Kontostandes
      if(deal.DealType()==DEAL_TYPE_BALANCE)
        {
         if(NormalizeDouble(deal.Profit()+deal.Swap(),2)>=0.0)
            if(balance==0.0)
               balance=deal.Profit();
        }
      //--- Empfangen von Profit und Kontostand
      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));
//--- Kopieren der Kontostand-Daten in das 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);
//--- Kopieren der Profit Daten in das 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);
//--- Lineare Regression
//--- Anzahl der unabhängigen Variablen
   int nvars=1;
//--- sample volume
   int npoints=balance_total.Total();
//--- Erstellen der Matrix mit den Parametern für die lineare 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]);
     }
//--- Variabel für das Erfassen des Berechnungsergebnisse (Erfolgreich, nicht erfolgreich)
   int info;
//--- Notwendiges Klassenobjekt für das Abspeichern der berechneten Daten
   CLinearModelShell lm;
   CLRReportShell    ar;
//--- arrays Für das Abspeichern der Regressionsergebnisse
   double lr_coeff[];
   double lr_values[];
   ArrayResize(lr_values,npoints);
//--- Berechnung der Verhältnisse der linearen Regression
   CAlglib::LRBuild(xy,npoints,nvars,info,lm,ar);
//--- Erhalten der Verhältnis-Ergebnisse der linearen Regression
   CAlglib::LRUnpack(lm,lr_coeff,nvars);
//--- Empfangen der gewonnenen linearen Regressionswerte
   for(int i=0;i<npoints;i++)
      lr_values[i]=lr_coeff[0]*i+lr_coeff[1];
//--- Berechnung des erwarteten Payoff
   double exp_payoff,tmp1,tmp2,tmp3;
   CAlglib::SampleMoments(arr_profit,exp_payoff,tmp1,tmp2,tmp3);
//--- Berechnung des 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);
//--- berechnen der Standardabweichung und mathematische Erwartung von HPR
   double AHPR,SD;
   CAlglib::SampleMoments(HPR,AHPR,SD,tmp2,tmp3);
   SD=MathSqrt(SD);
//--- Berechnung der LR Correlation
   double lr_corr=CAlglib::PearsonCorr2(arr_balance,lr_values);
//--- Empfangen des LR Standard Errors
   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));
//--- Berechnung von 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("-----------------------------------------------");
//--- Löschen von Objekten
   delete profit;
   delete balance_total;
  }
//+----------------------------------------------------------------

Jetzt erhalten wir das folgende Ergebnis:



Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/1146

Breakout Bars Trend Breakout Bars Trend

Ein alternativer Indikator für die Definition von Trends, basierend auf Ausbruchsbars und Abstände von Extremwerten.

Exp_CMO Exp_CMO

Dieses Handelssystem basiert auf den Signalen von dem CMO Oszillator

T3MA-ALARM T3MA-ALARM

Ein gleitender Durchschnitt mit doppelter Glättung

T3MA(MTC) T3MA(MTC)

Ein Expert Advisor basierend auf dem T3MA-ALARM Indikator