Mira cómo descargar robots gratis
¡Búscanos en Twitter!
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Librerías

ALGLIB - Biblioteca de análisis numérico - librería para MetaTrader 5

Publicado por:
MetaQuotes
Visualizaciones:
7285
Ranking:
(125)
Publicado:
2014.01.10 13:57
Actualizado:
2023.09.08 17:26
\MQL5\Include\Math\Alglib\
alglib.mqh (2420.29 KB) ver
alglibinternal.mqh (579.73 KB) ver
alglibmisc.mqh (119.42 KB) ver
ap.mqh (89.98 KB) ver
arrayresize.mqh (4.88 KB) ver
bitconvert.mqh (13.49 KB) ver
dataanalysis.mqh (1124.84 KB) ver
diffequations.mqh (32.41 KB) ver
fasttransforms.mqh (92.23 KB) ver
integration.mqh (116.61 KB) ver
interpolation.mqh (1430.87 KB) ver
linalg.mqh (1455.11 KB) ver
matrix.mqh (45.38 KB) ver
optimization.mqh (2246.73 KB) ver
solvers.mqh (295.08 KB) ver
statistics.mqh (407.4 KB) ver
\MQL5\Scripts\UnitTests\Alglib\
TestClasses.mq5 (30.42 KB) ver
TestClasses.mqh (3032.44 KB) ver
TestInterfaces.mq5 (17.49 KB) ver
TestInterfaces.mqh (679.69 KB) ver
UseAlglib.mq5 (6.2 KB) ver
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

Autor real:

Sergey Bochkanov. Sitio web del proyecto ALGLIB - http://www.alglib.net/. Las fechas de la librería se remontan a 1999.

ALGLIB es una de las bibliotecas matemáticas más completas e importantes

¿Necesitas hacer una transformada rápida de Fourier para resolver un sistema de ecuaciones diferenciales? ¿Quieres realizar un análisis de datos complejos tratando de reunir todos los métodos en un solo lugar como un código fuente? Then ALGLIB la biblioteca de métodos numéricos es para ti!!

ALGLIB es actualmente una de las mejores bibliotecas de los algoritmos multi-lenguaje. A continuación se mencionan las características de ALGLIB del sitio web oficial:

ALGLIB es un cruce entre plataforma de análisis numérico y una librería de procesamiento de datos. Es compatible con varios lenguajes de programación (C++, C#, Pascal, VBA) y varios sistemas operativos (Windows, Linux, Solaris). Características incluidas en ALGLIB:

  • álgebra lineal (direct algorithms, EVD/SVD)
  • Solucionadores (lineal y no lineal)
  • interpolación
  • Optimización
  • Transformadas rápidas de Fourier
  • integración numérica
  • mínimos cuadrados lineales y no lineales adecuados
  • Ecuaciones diferenciales ordinarias
  • Funciones especiales
  • Estadísticas (estadística descriptiva, pruebas de hipótesis)
  • Análisis de los datos (clasificación / regresión, incluyendo redes neuronales)
  • Multiples versiones de precisión de álgebra lineal, la optimización de la interpolación y otros algoritmos (utilizando MPFR para los cálculos de punto flotante)

Porque elegir ALGLIB? porque:

  • portable. Puede ser compilado en casi cualquier lugar utilizando cualquier compilador (ver matriz de compatibilidad para más info).
  • fácil de usar . Es compatible con muchos lenguajes de programación. Si utiliza un lenguaje,(FORTRAN, por ejemplo) no es necesario estudiar otro para compilar y enlazar una biblioteca externa.
  • codigo abierto. Se puede utilizar de forma gratuita bajo la licencia GPL 2+.
  • adecuado también para usuarios comerciales. Aquellos que quieran utilizar ALGLIB en aplicaciones comerciales pueden comprar una licencia comercial sin requisito de copyleft.

La librería ALGLIB se está mejorando constantemente, se implementan regularmente nuevas funciones y mejoras de acuerdo con los comentarios de los usuarios. La última versión es 4.0.

Además, la librería contiene una gran colección de casos de prueba que cubre la mayor parte de la funcionalidad de los métodos propuestos. Eso le permitirá llevar las pruebas y los informes de los errores detectados a los autores del proyecto.


Las funciones estáticas de la clase CAlglib deben utilizarse para trabajar con la librería - todas las funciones de la librería se trasladaron a la clase del sistema CAlglib como funciones estáticas.

Los scripts de prueba testclasses.mq5 y testinterfaces.mq5 se adjuntan junto con un simple script de demostración usealglib. Los archivos incluidos del mismo nombre (testclasses.mqh y testinterfaces.mqh) se utilizan para poner en marcha los casos de prueba. Deben ser colocados en \MQL5\Scripts\Alglib\Testcases\.

Nota: la ejecución del script testclasses.mq5 toma un tiempo bastante largo (unos 8 minutos).

A continuación se muestra información más detallada sobre los paquetes de la libreria ALGLIB MQL5:

Paquetes
Descripción
alglib.mqh
El paquete principal de la biblioteca incluye funciones personalizadas. Estas funciones deben ser llamadas para trabajar con la librería.
alglibinternal.mqh
Clases adicionales para el funcionamiento de otros paquetes de la librería.
alglibmisc.mqh

El paquete contiene las siguientes clases:

  1. CHighQualityRand - generador de números aleatorios de alta calidad.
  2. CNearestNeighbor - KD-arboles y solución.
ap.mqh El paquete también contiene clases adicionales necesarias para otros paquetes.
bitconvert.mqh Clases y funciones С++ que están ausentes como integradas en MQL5:
  1. BitConverter - clase para transformar figuras del tipo int y double en una matriz de bits y viceversa.
  2. CInfOrNaN - NaNs and plus/minus clase de verificación infinita y generación.
  3. ArrayReverse - elementos de la matriz de la función inversa.
  4. GetSelectionString - función para recibir la cadena generada a partir de elementos del array tipo char.
  5. MathSign - función de cálculo del signo del número.
  6. MathSinh - función de cálculo del seno hiperbólico.
  7. MathCosh - función de cálculo del seno hiperbólico.
  8. MathTanh - función de cálculo de la tangente hiperbólica
dataanalysis.mqh Clases de análisis de datos:
  1. CBdSS - cálculo de funciones de error.
  2. CDForest - trabajar con los bosques de árboles de soluciones.
  3. CKMeans - agrupación utilizando el algoritmo k-means++.
  4. CLDA - análisis lineal discriminante.
  5. CLinReg - regresión lineal.
  6. CMLPBase - perceptrón multicapa (redes neuronales).
  7. CLogit - regresión logit multinomial.
  8. CMarkovCPD - Cadenas de Markov para los datos de población.
  9. CMLPTrain - formación del perceptrón multicapa.
  10. CMLPE - conjuntos de redes neuronales.
  11. CPCAnalysis - método de componentes principales.
delegatefunctions.mqh El paquete contiene las clases creadas en sustitución de los delegados. Los objetos de estas clases son las funciones optimizadas en varios métodos de la librería.
diffequations.mqh Clase para la resolución de ecuaciones diferenciales ordinarias:
  1. CODESolver - resolución de ecuaciones diferenciales ordinarias.
fasttransforms.mqh Clases de transformación rápida:
  1. CFastFourierTransform - transformada rápida de Fourier.
  2. CConv - convolución.
  3. CCorr - correlación cruzada.
  4. CFastHartleyTransform - tranformada rápida Hartley.
integration.mqh Clases para integración numérica:
  1. CGaussQ - Cuadratura de Gauss.
  2. CGaussKronrodQ - Fórmulas de cuadratura de Gauss-Kronrod.
  3. CAutoGK - integrador adaptativo.
interpolation.mqh Clases de interpolación, aproximación y diferenciación numérica:
  1. CIDWInt - interpolación y aproximación por la distancia media ponderada inversa.
  2. CRatInt - interpolación racional.
  3. CPolInt - interpolación polinómica.
  4. CSpline1D - spline de interpolación unidimensional.
  5. CLSFit - aproximación utilizando el método de mínimos cuadrados lineal, no lineal .
  6. CPSpline - interpolación spline paramétrico.
  7. CSpline2D - interpolación spline de dos dimensiones.
linalg.mqh Clases para el cálculo de algunas operaciones de álgebra lineal:
  1. COrtFac - Descomposiciones QR / LQ, descomposiciones de Hessenberg, así como de las matrices bi-y tridiagonales.
  2. CEigenVDetect - búsqueda de los valores y vectores propios.
  3. CMatGen - generación de matrices aleatorias.
  4. CTrFac - Descomposiciones LU y Cholesky.
  5. CRCond - estimación de un valor de la dependencia de la matriz.
  6. CMatInv - inversión de la matriz.
  7. CBdSingValueDecompose - singular descomposición de una matriz bidiagonal.
  8. CSingValueDecompose - matriz singular de descomposición.
  9. CFbls - soluciones lineales quick basic .
  10. CMatDet - cálculo de un factor determinante de la matriz.
  11. CSpdGEVD - búsqueda de los valores y vectores propios de matrices simétricas generalizadas.
  12. CInverseUpdate - matrices de inversión y actualización.
  13. CSchur - descomposición Issai Schur.
matrix.mqh Clases de matrices: enteras, continuas y complejas.
optimization.mqh Clases de optimización de dimensiones y multidimensionales:
  1. CMinCG - optimización mediante el método del gradiente conjugado.
  2. CMinBLEIC - optimización con restricciones lineales en la forma de las ecuaciones y inecuaciones.
  3. CMinLBFGS - optimización mediante generación sucesiva y clasificación del modelo cuadrático de la función.
  4. CMinQP - programación cuadrática con restricciones lineales en forma de ecuaciones e inecuaciones.
  5. CMinLM - optimización utilizando el algoritmo de Levenberg-Marquardt.
  6. CMinComp - funciones de compatibilidad con versiones anteriores.
solvers.mqh Clases para la resolución de sistemas de ecuaciones lineales y no lineales:
  1. CDenseSolver - resolución de sistemas de ecuaciones lineales.
  2. CNlEq - resolución de sistemas de ecuaciones no lineales.
specialfunctions.mqh Clases de funciones de distribución, integrales y polinomios:
  1. CGammaFunc - Función gamma.
  2. CIncGammaF - función gamma incompleta.
  3. CBetaF - función beta.
  4. CIncBetaF - función beta incompleta.
  5. CPsiF - función-psi.
  6. CAiryF - función Airy.
  7. CBessel - Funciones de Bessel de orden integral.
  8. CJacobianElliptic - Funciones elípticas de Jacobi.
  9. CDawson - integral Dawson.
  10. CTrigIntegrals - integrales trigonométricas.
  11. CElliptic - integrales elípticas de la primera y segunda especie.
  12. CExpIntegrals - integrales exponenciales.
  13. CFresnel - integrales Fresnel.
  14. CHermite - polinomios de Hermite.
  15. CChebyshev - polinomios de Chebyshev.
  16. CLaguerre - polinomios de Laguerre.
  17. CLegendre - polinomios de Legendre.
  18. CChiSquareDistr - distribución chi-square.
  19. CBinomialDistr - distribución binomial.
  20. CNormalDistr - distribución normal.
  21. CPoissonDistr - distribución Poisson.
  22. CStudenttDistr - distribución t de Student..
  23. CFDistr - distribución - F.
statistics.mqh Clases de análisis de datos estadísticos:
  1. CBaseStat - métodos estadísticos básicos.
  2. CCorrTests - prueba para importancia de proporción de la correlación.
  3. CJarqueBera - JarqueBera croterion.
  4. CMannWhitneyU - Mann-Whitney U-criterion.
  5. CSignTest - Prueba de señal.
  6. CStudentTests - Pruebas Student t.
  7. CVarianceTests - prueba F-test y chi-square.
  8. CWilcoxonSignedRank - Wilcoxon W-criterion.


Code:

Funciones de la librería con comentarios detallados sobre su uso.

//+------------------------------------------------------------------+
//| Cálculo de los momentos de distribución: mean, variance,         |
//| skewness, kurtosis.                                              |
//| PARAMETROS DE ENTRADA:                                           |
//|     X       -   sample                                           |
//|     N       -   N>=0, sample size:                               |
//|                 * si se da, sólo se procesan los elementos       |
//|                   principales de N de X                          |
//|                 * si no se da, se determina automáticamente      |
//|                   a partir del tamaño de X                       |
//| PARAMETROS DE SALIDA:                                            |
//|     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)
  {
//--- comprueba
   if(!CAp::Assert(n>=0,__FUNCTION__+": variable de error"))
      return(false);
//--- comprueba
   if(!CAp::Assert(CAp::Len(cx)>=n,__FUNCTION__+": length(x)<n"))
      return(false);
//--- comprueba
   if(!CAp::Assert(CApServ::IsFiniteVector(cx,n),__FUNCTION__+": x no es un vector finito"))
      return(false);
//--- crear 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;
//--- comprueba
   if(n<=0)
      return(true);
//--- Mean
   for(int i=0;i<n;i++)
      mean+=cx[i];
   mean/=n;
//--- Variación (utilizando el algoritmo de dos pasos corregido)
   if(n!=1)
     {
      //--- cálculo
      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);
      //--- cálculo
      stddev=MathSqrt(variance);
     }
   else
      variance=EMPTY_VALUE;
//--- Skewness y kurtosis
   if(stddev!=0)
     {
      //--- cálculo
      for(int i=0;i<n;i++)
        {
         v=(cx[i]-mean)/stddev;
         v2=CMath::Sqr(v);
         skewness+=v2*v;
         kurtosis+=CMath::Sqr(v2);
        }
      //--- cambia los valores
      skewness=skewness/n;
      kurtosis=kurtosis/n-3;
     }
//--- ejecución exitosa
   return(true);
  }

Deben utilizarse las funciones estáticas de la clase CAlglib para trabajar con la librería. A continuación se muestra el código fuente del script de funciones usealglib.mq5 para el cálculo de algunos parámetros estadísticos de comercio:

//+------------------------------------------------------------------+
//|                                                    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"
//+------------------------------------------------------------------+
//| Conexión de las librerias                                        |
//+------------------------------------------------------------------+
#include <Math\Alglib\alglib.mqh>
#include <Trade\DealInfo.mqh>
#include <Arrays\ArrayDouble.mqh>
//+------------------------------------------------------------------+
//| Función de inicio del programa de secuencias de comandos         |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- object to access data on deals
   CDealInfo     deal;
//--- objeto para el almacenamiento de beneficio / pérdida de cada transacción 
   CArrayDouble *profit=new CArrayDouble;
//--- objetos para almacenar el balance
   CArrayDouble *balance_total=new CArrayDouble;
//--- balance inicial
   double        balance=0;
//--- recibe el historial
   HistorySelect(0,TimeCurrent());
//--- importe total de las transacciones
   int deals_total=HistoryDealsTotal();
//--- recibe datos sobre las ganancias y el balance de las transacciones
   for(int i=0;i<deals_total;i++)
     {
      //--- mover la transacción con el índice i
      deal.SelectByIndex(i);
      //--- recibe el saldo inicial
      if(deal.DealType()==DEAL_TYPE_BALANCE)
        {
         if(NormalizeDouble(deal.Profit()+deal.Swap(),2)>=0.0)
            if(balance==0.0)
               balance=deal.Profit();
        }
      //--- recibe el beneficio y el 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));
//--- copia los datos del balance al array del tipo de 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);
//--- copia los datos en beneficio al array tipo double
   double arr_profit[];
   ArrayResize(arr_profit,profit.Total());
   for(int i=0;i<profit.Total();i++)
      arr_profit[i]=profit.At(i);
//--- regresión lineal
//--- número de variables independientes
   int nvars=1;
//--- volumen de la muestra
   int npoints=balance_total.Total();
//--- crea el array de parámetros para la regresión lineal
   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 para detectar los resultados de los cálculos (éxito, sin éxito)
   int info;
//--- objetos de la clase necesarios para almacenar los datos en cálculos
   CLinearModelShell lm;
   CLRReportShell    ar;
//--- arrays para almacenar los resultados de la regresión
   double lr_coeff[];
   double lr_values[];
   ArrayResize(lr_values,npoints);
//--- calcular los coeficientes de la regresión lineal
   CAlglib::LRBuild(xy,npoints,nvars,info,lm,ar);
//--- recibe los coeficientes de la regresión lineal
   CAlglib::LRUnpack(lm,lr_coeff,nvars);
//--- recibe los valores recuperados de la regresión lineal
   for(int i=0;i<npoints;i++)
      lr_values[i]=lr_coeff[0]*i+lr_coeff[1];
//--- calcula el Payoff esperado
   double exp_payoff,tmp1,tmp2,tmp3;
   CAlglib::SampleMoments(arr_profit,exp_payoff,tmp1,tmp2,tmp3);
//--- calcula el array 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);
//--- calcula la desviación estándar y la expectativa matemática de HPR
   double AHPR,SD;
   CAlglib::SampleMoments(HPR,AHPR,SD,tmp2,tmp3);
   SD=MathSqrt(SD);
//--- calcula la LR Correlation
   double lr_corr=CAlglib::PearsonCorr2(arr_balance,lr_values);
//--- recibe el error LR Standard
   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));
//--- calcula el ratio Sharpe
   double sharpe_ratio=(AHPR-1)/SD;
//--- imprime
   PrintFormat("-----------------------------------------------");
   PrintFormat("Correlation function: y = %.2fx + %.2f",lr_coeff[0],lr_coeff[1]);
//--- parámetros
   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("-----------------------------------------------");
//--- elimina los objetos
   delete profit;
   delete balance_total;
  }
//+------------------------------------------------------------------+

Recibimos el siguiente resultado:


Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/1146

Ejemplo de uso del IndicatorParameters() Ejemplo de uso del IndicatorParameters()

Este Asesor Experto ilustra el uso de la función IndicatorParameters() para obtener la información sobre el número de parámetros de entrada, su tipo y los valores.

Visualización de optimización de resultados en tiempo real Visualización de optimización de resultados en tiempo real

Presentación del ejemplo de visualización de los resultados de optimización en tiempo real (dinámica de curva del balance de los parámetros estadísticos del Asesor Experto).

AMkA AMkA

Media móvil adaptativa de Perry Kaufman con puntos de señal indicativos.

Aroon Aroon

El indicador Aroon creado por Tushar Chande indica si una tendencia a largo plazo esta llegando a su fin o simplemente está haciendo una pausa un poco antes de un nuevo movimiento.