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 - Librería de Análisis Numérico - librería para MetaTrader 4

Visualizaciones:
3177
Ranking:
(53)
Publicado:
2016.06.29 16:39
Actualizado:
2023.09.12 10:14
\MQL4\Include\Math\Alglib\
alglib.mqh (1372.18 KB) ver
alglibinternal.mqh (325.33 KB) ver
alglibmisc.mqh (60.23 KB) ver
ap.mqh (75.68 KB) ver
arrayresize.mqh (6.59 KB) ver
bitconvert.mqh (17.24 KB) ver
complex.mqh (14.07 KB) ver
dataanalysis.mqh (574.08 KB) ver
diffequations.mqh (35.66 KB) ver
fasttransforms.mqh (85.21 KB) ver
integration.mqh (243.57 KB) ver
interpolation.mqh (522.71 KB) ver
linalg.mqh (712.14 KB) ver
matrix.mqh (23.83 KB) ver
optimization.mqh (501.04 KB) ver
solvers.mqh (149.25 KB) ver
statistics.mqh (398.3 KB) ver
\MQL4\Scripts\Alglib\
TestClasses.mq4 (14.31 KB) ver
TestClasses.mqh (1380.85 KB) ver
TestInterfaces.mqh (403.03 KB) ver
UseAlglib.mq4 (6.31 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/. La librería se remonta a 1999.

Nota: El Asesor Axperto trabaja con MetaTrader 4 build 555 y superior.

El archivo debe ser descomprimido en: terminal_data_folder.
El código de la librería se encuentran en terminal_data_folder\Math\Alglib\
Los ejemplos de scripts de prueba se encuentran en terminal_data_folder\MQL4\Scripts\Alglib\

ALGLIB es una de las librerias matemáticas más grandes y más completas

¿Necesita hacer una transformada rápida de Fourier o de resolver un sistema de ecuación diferencial? ¿Realizar un análisis de datos complejos tratando de reunir todos los métodos en un mismo lugar como un código fuente? ¡Entonces la librería de métodos numéricosALGLIB es para usted!

ALGLIB es actualmente una de las mejores librerías de algoritmos en varios lenguajes. A continuación se mencionan características de ALGLIB en la web oficial:

ALGLIB es una librería multiplataforma análisis numérico y la informática. Soporta varios lenguajes de programación (C++, C#, Pascal, VBA) y varios sistemas operativos (Windows, Linux, Solaris). ALGLIB incluye:

  • Álgebra lineal (algoritmos directos, EVD/SVD)
  • Problemas (lineales y no lineales)
  • Interpolación
  • Optimización
  • Transformaciones de Fourier
  • Integración numérica
  • Ajuste a mínimos cuadrados lineales y no lineales
  • Ecuaciones diferenciales ordinarias
  • Funciones especiales
  • Estadística (estadística descriptiva, pruebas de hipótesis)
  • Análisis de los datos (clasificación o regresión, incluyendo redes neuronales)
  • Varias versiones de precisión de álgebra lineal, optimización de interpolación y otros algoritmos (usando MPFR para cáculos de punto flotante)

¿Por qué elegir ALGLIB? El porque es:

  • portátil. Puede ser compilado en casi cualquier parte usando casi cualquier compilador (ver matriz de compatibilidad para obtener más información).
  • fácil de usar. Soporta muchos lenguajes de programación. Si utiliza un lenguaje, no necesita estudiar otro (FORTRAN, por ejemplo) para compilar y enlazar una librería externa.
  • de código abierto. Puede ser utilizado gratuitamente bajo licencia GPL 2 +.
  • adecuado también para los usuarios comerciales. Aquellos que quieran utilizar ALGLIB en aplicaciones comerciales pueden comprar licencia comercial sin el requisito de copyleft.

Las librerías ALGLIB están siendo constantemente mejoradas, se aplican regularmente nuevas funciones y mejoras según los comentarios de los usuarios. La versión más reciente es 3.6.0.

Además, la libreria contiene una colección grande de casos de prueba que cubren la mayor parte de la funcionalidad de los métodos propuestos. Permitirá realizar pruebas e Informe detectó errores a los autores del proyecto.


Funciones estáticas de la clase CAlglib puede usarse para trabajar con la librería - todas las funciones se mueven de la clase del sistema de CAlglib como funciones estáticas.

los scripts de casos de prueba TestClasses.MQ4 y testinterfaces.mq5 se unen junto con un script de demostración de usealglib.mq4 simple. Incluir archivos del mismo nombre (testclasses.mqh y testinterfaces.mqh) que se utilizan para ejecutar casos de prueba. Se colocarán en \MQL4\Scripts\Alglib\Testcases\.

Nota: la ejecución del script testclasses.mq4 lleva bastante tiempo (unos 30 minutos).

A continuación, información más detallada acerca de los paquetes portados de la librería de MQL4 ALGLIB:

Paquetes
Descripción
alglib.mqh
El paquete principal de la librería 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 - generación de árboles KD y solución.
ap.mqh El paquete también contiene clases adicionales necesarias para otros paquetes.
bitconvert.mqh clases básicas de С ++ y las funciones que están ausentes en MQL4 como Built-in:
  1. BitConverter - clase para transformar int y figuras tipo doble en una matriz de bits y viceversa.
  2. CInfOrNaN - NaNs y verificación más/menos infinito y generación de la clase.
  3. ArrayReverse - elementos de la matriz inversa de la función.
  4. GetSelectionString - función para recibir el string generado desde elementos de la matriz del tipo de gráfico.
  5. MathSign - signo del número de la función de cálculo.
  6. MathSinh - función del cálculo del seno hiperbólico.
  7. MathCosh - función del cálculo del seno hiperbólico.
  8. MathTanh - función de cálculo de tangente hiperbólica.
complex.mqh Definición de estructuras complejas para trabajar con números complejos.
dataanalysis.mqh Clases de análisis de datos:
  1. CBdSS - cálculo de funciones de error.
  2. CDForest - trabajando con los bosques de árboles de la solución.
  3. CKMeans - agrupamiento utilizando el algoritmo k-means++.
  4. LCED - 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 datos poblacionales.
  9. CMLPTrain - entrenamiento 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 para reemplazo para los delegados. Los objetos de estas clases son las funciones optimizadas en varios métodos de la librería.
diffequations.mqh La clase para la solución de ecuaciones diferenciales ordinarias:
  1. CODESolver - solución de ecuaciones diferenciales ordinarias.
fasttransforms.mqh Clases de rápida transformación:
  1. CFastFourierTransform - tranformada rápida de Fourier.
  2. CConv - circunvolución.
  3. CCorr - correlación cruzada.
  4. CFastHartleyTransform - transformación rápida de Hartley.
integration.mqh Clases de Integración numérica:
  1. CGaussQ - Cuadrada gaussiana.
  2. CGaussKronrodQ - fórmulas de cuadrados de Gauss-Kronrod.
  3. CAutoGK - integrador adaptativo.
interpolation.mqh Interpolación, aproximación y clases de diferenciación numérica:
  1. CIDWInt - interpolación y aproximación por el inverso de la distancia ponderado promedio.
  2. CRatInt - interpolación racional.
  3. CPolInt - Interpolación polinómica.
  4. CSpline1D - interpolación spline unidimensional.
  5. CLSFit - aproximación lineal o no lineal de métodos mínimos cuadrados.
  6. CPSpline - interpolación spline paramétrico.
  7. CSpline2D - interpolación spline bidimensional.
linalg.mqh Clases para cálculo de algunas operaciones de álgebra lineal:
  1. COrtFac - descomposiciones QR/LQ, descomposiciones de Hessenberg, así como de matrices bi - y tridiagonal.
  2. CEigenVDetect - encontrar los autovalores y autovectores.
  3. CMatGen - generación de matrices al azar.
  4. CTrFac - descomposiciones LU y Cholesky.
  5. CRCond - estimación de un valor de dependencia de la matriz.
  6. CMatInv - inversión de matriz.
  7. CBdSingValueDecompose - descomposición singular de una matriz bidiagonal.
  8. CSingValueDecompose - descomposición singular matriz.
  9. CFbls - soluciones lineales básicas rápidas.
  10. CMatDet - cálculo de un determinante de la matriz.
  11. CSpdGEVD - encontrar los autovalores y autovectores de matrices simétricas generalizadas.
  12. CInverseUpdate - actualización e inversión de matrices.
  13. CSchur - descomposición de Issai Schur.
matrix.mqh Clases de matrices: entera, continua y compleja.
optimization.mqh Clases de optimización dimensional y multidimensional:
  1. CMinCG - optimización utilizando el método de gradiente conjugado.
  2. CMinBLEIC - optimización con restricciones lineales en forma de ecuaciones y de inecuaciones.
  3. CMinLBFGS - optimización mediante generación sucesiva y la 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 de resolución de sistemas de ecuaciones lineales y no-lineales:
  1. CDenseSolver - solución de sistemas de ecuaciones lineales.
  2. CNlEq - solució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 Bessel de orden integral.
  8. CJacobianElliptic - funciones elípticas de Jacobian.
  9. CDawson - integral de Dawson.
  10. CTrigIntegrals - integrales trigonométricas.
  11. CElliptic - integrales elípticas de primera y segunda especie.
  12. CExpIntegrals - integrales exponenciales.
  13. CFresnel - integrales de 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-cuadrado.
  19. CBinomialDistr - distribución binomial.
  20. CNormalDistr - distribución normal.
  21. CPoissonDistr - distribución de Poisson.
  22. CStudenttDistr - estudiante t-distribución.
  23. CFDistr - F-distribución.
statistics.mqh Clases de análisis estadístico de datos:
  1. CBaseStat - métodos estadísticos básicos.
  2. CCorrTests - prueba para la significación del coeficiente de correlación.
  3. CJarqueBera - JarqueBera croterion.
  4. CMannWhitneyU - criterio de U de Mann-Whitney.
  5. CSignTest - prueba del signo.
  6. CStudentTests - pruebas de t de Student.
  7. CVarianceTests - F-test y prueba de Chi cuadrado.
  8. CWilcoxonSignedRank - W de Wilcoxon-criterio.


Código:

Las funciones de la libreria han detallados comentarios sobre su uso.

//+------------------------------------------------------------------+
//| Cálculo de los momentos de la distribución: media, varianza, |
//| asimetría, curtosis.                                             |
//| PARÁMETROS DE ENTRADA:                                           |
//|     X       -   muestra                                          |
//|     N       -   N>=0, tamaño de la muestra::                     |
//|                 * Si da, únicos N destacados elementos de X son  |
//|                   procesado                                      |
//|                 * Si no está dado, determinado automáticamente a partir de    |
//|                   tamaño de X                                    |
//| PARÁMETROS DE SALIDA                                             |
//|     Mean    -   promedio.                                        |
//|     Variance-   variancia.                                       |
//|     Skewness-   skewness (si variancia<>0; sino cero).           |
//|     Kurtosis-   kurtosis (i variancia<>0; sino cero).            |
//+------------------------------------------------------------------+
static bool CBaseStat::SampleMoments(const double &cx[],const int n,double &mean,
                                     double &variance,double &skewness,double &kurtosis)
  {
//--- comprobación
   if(!CAp::Assert(n>=0,__FUNCTION__+": variable erronea"))
      return(false);
//--- comprobación
   if(!CAp::Assert(CAp::Len(cx)>=n,__FUNCTION__+": length(x)<n"))
      return(false);
//--- comprobación
   if(!CAp::Assert(CApServ::IsFiniteVector(cx,n),__FUNCTION__+": x no es un vector finito"))
      return(false);
//--- crear las variables
   double v=0;
   double v1=0;
   double v2=0;
   double stddev=0;
//--- Inicio, caso especial n = 0'
   mean=0;
   variance=0;
   skewness=0;
   kurtosis=0;
//--- comprobación
   if(n<=0)
      return(true);
//--- Mean
   for(int i=0;i<n;i++)
      mean+=cx[i];
   mean/=n;
//--- Variance (usando algoritmo corregido de paso de dos)
   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;
//--- La asimetría 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);
        }
      //--- cambio de valores
      skewness=skewness/n;
      kurtosis=kurtosis/n-3;
     }
//--- ejecución exitosa
   return(true);
  }

Funciones estáticas de la clase CAlglib deben ser utilizadas para trabajar con la librería. A continuación es código fuente del script de la función usealglib.mq5 para el cálculo de algunos parámetros estadísticos del trading:

//+------------------------------------------------------------------+
//|                                                    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
//+------------------------------------------------------------------+
//| Incluyen librerías                                               |
//+------------------------------------------------------------------+
#include <Math\Alglib\alglib.mqh>
#include <Arrays\ArrayDouble.mqh>
//+------------------------------------------------------------------+
//| Script de la función de inicio de programa                       |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- objeto para el almacenamiento de datos de pérdidas y ganancias de cada orden de
   CArrayDouble *profit=new CArrayDouble;
//--- objeto para almacenar los datos del balance
   CArrayDouble *balance_total=new CArrayDouble;
//--- balance inicial
   double        balance=0;
//--- solicitud de datos históricos
//--- obtener cantidad total de órdenes
   int orders_total=OrdersHistoryTotal();
//--- datos de ganancias
   for(int i=0;i<orders_total;i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
        {
         Print("Error in OrderSelect (",GetLastError(),")");
         return;
        }
      int order_type=OrderType();
      //--- balance inicial
      if(order_type==6) // OP_BALANCE=6
        {
         if(NormalizeDouble(OrderProfit()+OrderSwap(),2)>=0.0)
            if(balance==0.0)
               balance=OrderProfit();
        }
      //--- add order profit
      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));
//--- copiar los datos del balance en la matriz de tipo 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);
//--- copiar datos del beneficio en lka matriz del 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;
//--- número de puntos
   int npoints=balance_total.Total();
//--- crear matriz de parámetros, utilizado 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 el resultado de los cálculos (exitosos, fracasados)
   int info;
//--- clase de objetos necesarios para almacenar los datos en los cálculos
   CLinearModelShell lm;
   CLRReportShell    ar;
//--- matrices para almacenar los resultados de la regresión
   double lr_coeff[];
   double lr_values[];
   ArrayResize(lr_values,npoints);
//--- calcular coeficientes de regresión lineal
   CAlglib::LRBuild(xy,npoints,nvars,info,lm,ar);
//--- obtener coeficientes de regresión lineal
   CAlglib::LRUnpack(lm,lr_coeff,nvars);
//--- obtener los valores de la regresión lineal recuperados
   for(int i=0;i<npoints;i++)
      lr_values[i]=lr_coeff[0]*i+lr_coeff[1];
//--- cálculo del pago esperado
   double exp_payoff,tmp1,tmp2,tmp3;
   CAlglib::SampleMoments(arr_profit,exp_payoff,tmp1,tmp2,tmp3);
//--- cálculo de la matriz 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);
//--- cálculo de la desviación estándar y media del HPR
   double AHPR,SD;
   CAlglib::SampleMoments(HPR,AHPR,SD,tmp2,tmp3);
   SD=MathSqrt(SD);
//--- cálculo de correlación LR
   double lr_corr=CAlglib::PearsonCorr2(arr_balance,lr_values);
//--- cálculo del Error estándar de 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));
//--- cálculo de Ratio de Sharpe
   double sharpe_ratio=(AHPR-1)/SD;
//--- print
   PrintFormat("-----------------------------------------------");
   PrintFormat("Linear regression: y = %.2fx + %.2f",lr_coeff[0],lr_coeff[1]);
//--- parametros
   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("-----------------------------------------------");
//--- eliminar objetos
   delete profit;
   delete balance_total;
  }
//+------------------------------------------------------------------+

Recibiremos el siguiente resultado (dependiendo de los resultados de sus operaciones):

Resultados de las pruebas con Alglib

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

OBJ_EDIT_Example OBJ_EDIT_Example

Ejemplo de trabajo con objetos gráficos OBJ_EDIT.

OBJ_Label_Example OBJ_Label_Example

Ejemplo de trabajo con objetos gráficos OBJ_LABEL.

a_informer a_informer

Es la colocación del Stop Loss y Take Profit a una distancia determinada. Muestra el estado actual de órdenes abiertas. Para el cierre de la orden es suficiente seleccionar y mover la etiqueta a la izquierda.

VR---Overturn VR---Overturn

El Asesor puede operar en dos modos: martingala y antimartingeyl...