MetaTrader 5 build 1455: Biblioteca de funciones matemáticas en MQL5

¿Qué novedades tiene MetaTrader 5?

14 octubre 2016

Terminal

  1. Añadidas descripciones emergentes para los botones Buy, Sell y Close en los cuadros de diálogo comerciales. Las descripciones aclararán qué activos precisamente se comprarán o venderán al realizar esta o aquella operación, ayudando así a los tráders principiantes a comprender la esencia del proceso comercial.




  2. Añadidos pictogramas de órdenes, operaciones y posiciones en las pestañas "Comercio" e "Historia".




  3. Se ha optimizado y acelerado considerablemente (hasta 4-5 veces) la representación de la profundidad de mercado, del gráfico de ticks de la profundidad de mercado y de la banda de operaciones.
  4. Corregido el error de sincronización de la historia de ticks en el tiempo no comercial. En ciertos casos, el error provocaba un consumo excesivo de tráfico de red.

MQL5

  1. Asimismo, se ha incluido en la biblioteca una versión MQL5 de la biblioteca de análisis numérico ALGLIB.

    Posibilidades de la biblioteca

    • Álgebra lineal
    • Resolución de sistemas de ecuaciones: lineales y no lineales
    • Interpolación
    • Optimización
    • Transformada rápida de Fourier
    • Integración numérica
    • Aproximación lineal y no lineal con el método de los mínimos cuadrados
    • Resolución de ecuaciones diferenciales ordinarias
    • Cálculo de funciones especiales
    • Estadística descriptiva y prueba de hipótesis
    • Análisis de datos: clasificación, regresión
    • Implementación de algoritmos de álgebra lineal, interpolación, etc. en aritmética de alta precisión (con uso de MPFR)

    Cómo usarlo

    los archivos de la biblioteca ALGLIB se ubican en el catálogo \MQL5\Include\Math\Alglib. Para usar las funciones, incluya el archivo principal de la biblioteca en su programa:

    #include <Math\Alglib\alglib.mqh>

  2. En la biblioteca estándar se han incluido funciones para trabajar con estadística matemática. Ahora en MQL5 están disponibles las posibilidades del lenguaje R, uno de las mejores herramientas de procesamiento y análisis estadístico de datos.

    Posibilidades de la biblioteca

    La biblioteca estadística contiene funciones para el cálculo de las características estadísticas de los datos, así como funciones para trabajar con distribuciones estadísticas:

    • Funciones para el cálculo de las características estadísticas de los elementos de la matriz
    • Funciones para trabajar con distribuciones estadísticas: distribución normal, distribución log-normal, distribución beta, etc.

    Cómo usarlo

    los archivos de la biblioteca estadística se ubican en el catálogo \MQL5\Include\Math\Stat. Para usarla, incluya el archivo con las funciones necesarias en su programa, por ejemplo:

    #include <Math\Stat\Binomal.mqh>
    #include <Math\Stat\Cauchy.mqh>
    

    Puede leer una descripción detallada de las funciones de la biblioteca en el artículo Distribuciones Estadísticas en MQL5: tomando lo mejor de R.


  3. Se ha incluido en la biblioteca estándar una versión MQL5 de la biblioteca Fuzzy, en la que se han implementado los sistemas de inferencia de lógica difusa Mamdani y Sugeno.

    Posibilidades de la biblioteca

    • 13 funciones de pertenencia.
    • Forma flexible de escritura de normas para los sistemas difusos.
    • Sistema de inferencia de lógica difusa Mamdani
    • Sistema de inferencia de lógica difusa Sugeno
    • 5 métodos de defusificación para los sistemas del tipo Mamdani
    • Cantidad ilimitada de variables de entrada y salida

    Cómo usarlo

    Los archivos de la biblioteca Fuzzy se encuentran en el catálogo \MQL5\Include\Math\Fuzzy. Para usarla, incluya el archivo con las funciones necesarias en su programa, por ejemplo:

    #include <Math\Fuzzy\mamdanifuzzysystem.mqh>
    #include <Math\Fuzzy\sugenofuzzysystem.mqh>
    

    Podrá encontrar una descripción detallada de la biblioteca en Code Base: Fuzzy - biblioteca para trabajar con lógica difusa


  4. Añadida la propiedad CHART_QUICK_NAVIGATION para activar/desactivar las barras de navegación rápida en el gráfico. Para cambiar y obtener el estado de una propiedad, use las funciones ChartSetInteger y ChartGetInteger.




    La barra se llama pulsando las teclas Enter o Space. Con la ayuda de estas, es posible desplazarse rápidamente hasta la fecha establecida en el gráfico, alternar el símbolo y el marco temporal. Si su programa MQL5 procesa la pulsación de las teclas Enter o Space, desactive la propiedad CHART_QUICK_NAVIGATION, para que el terminal no intercepte estos eventos. En este sentido, seguirá existiendo la posibilidad de llamar la barra de navegación con un doble click del ratón.

  5. Añadidas las funciones FileLoad y FileSave para facilitar la lectura y guardado de matrices en los archivos. A diferencia de FileRead* y FileWrite*, estas funciones no necesitan manejador de archivo. FileLoad y FileSave trabajan con matrices de tipos numéricos, así como con estructuras sencillas que no tengan líneas de caracteres, matrices dinámicas u objetos de clase.
    long  FileLoad(
       const string filename,      // [in] nombre del archivo
       void         &buffer[],     // [out] matriz para la lectura
       uint         common_flag=0  // [in] 0 - búsqueda de un archivo en la carpeta Files del terminal, FILE_COMMON - en la carpeta común de los terminales
       );
    
    bool  FileSave(
       const string filename,      // [in] nombre del archivo
       const void   &buffer[],     // [in] matriz para el almacenamiento
       uint         common_flag=0  // [in] 0 - creación de un archivo en la carpeta Files del terminal, FILE_COMMON - en la carpeta común de los terminales
       );
    Ejemplo de cómo grabar una matriz de ticks y leerla enseguida:
    //--- parámetros de entrada
    input int      ticks_to_save=1000; // número de ticks
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       string  filename=_Symbol+"_ticks.bin";
       MqlTick ticks[];
    //---
       int copied=CopyTicks(_Symbol,ticks,COPY_TICKS_ALL,0,ticks_to_save);
       if(copied!=-1)
         {
          PrintFormat(" CopyTicks(%s) copied %d ticks",_Symbol,copied);
          //--- si la historia de ticks está sicronizada, el código de error será igual a cero
          if(!GetLastError()==0)
             PrintFormat("%s: Ticks are not synchronized. Error=",_Symbol,copied,_LastError);
          //---  escribimos los ticks en el archivo
          if(!FileSave(filename,ticks,FILE_COMMON))
             PrintFormat("FileSave() failed, error=%d",GetLastError());
         }
       else
          PrintFormat("Failed CopyTicks(%s), Error=",_Symbol,GetLastError());
    //--- ahora leemos estos ticks de vuelta desde el archivo
       ArrayFree(ticks);
       long count=FileLoad(filename,ticks,FILE_COMMON);
       if(count!=-1)
         {
          Print("Time\tBid\tAsk\tLast\tVolume\tms\tflags");
          for(int i=0;i<count;i++)
            {
             PrintFormat("%s.%03I64u:\t%G\t%G\t%G\t%I64u\t0x%04x",
             TimeToString(ticks[i].time,TIME_DATE|TIME_SECONDS),ticks[i].time_msc%1000,
             ticks[i].bid,ticks[i].ask,ticks[i].last,ticks[i].volume,ticks[i].flags);
            }
         }
      }

  6. Modificada la representación del indicador de usuario con el modo de dibujado DRAW_CANDLES. Ahora para este estilo es posible indicar de uno a tres colores, dependiendo de ello, cambiará el aspecto exterior de las velas.

    Si se indica solo un color, todas las velas del gráfico se colorearán por entero de ese color.
    //--- velas iguales, pintadas de un mismo color 
    #property indicator_label1  "One color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- solo se indica un color, por eso todas las velas serán solo de un color
    #property indicator_color1  clrGreen  
    Si indicamos dos colores, los contornos se dibujarán con el primer color, y el cuerpo con el segundo.
    //--- el color de las velas se diferencia del color de las sombras
    #property indicator_label1  "Two color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- las sombras y el contorno de las velas en color verde, el cuerpo, en color blanco
    #property indicator_color1  clrGreen,clrWhite 
    Si se indican tres colores, el contorno de la vela se dibujará con el primer color, y el color de la vela alcista y bajista se establecerá con el segundo y el tercer color.
    //--- el color de las velas se diferencia del color de las sombras
    #property indicator_label1  "One color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- las sombras y el contorno de las velas en color verde, el cuerpo de la vela alcista, en color blanco, el cuerpo de la vela bajista, de color rojo
    #property indicator_color1  clrGreen,clrWhite,clrRed
    De esta forma, con la ayuda del estilo DRAW_CANDLES se pueden crear variantes personalizadas propias del color de las velas. Asimismo, todos los colores pueden cambiarse de forma dinámica durante el proceso del trabajo con la ayuda de la función PlotIndexSetInteger(índice_de_la_construcción_DRAW_CANDLES, PLOT_LINE_COLOR, número_del_modificador, color) , donde el número_del_modificador puede tener los valores siguientes:
    • 0 – color del contorno y las sombras
    • 1– color del cuerpo de la vela alcista
    • 2 - color del cuerpo de vela bajista
    //--- establecemos el color del contorno y las sombras
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrBlue);
    //--- establecemos el color del cuerpo para la vela alcista
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrGreen);
    //--- establecemos el color del cuerpo para la vela bajista
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrRed);
  7. Se ha corregido una serie de errores y se ha acelerado el trabajo con la historia de ticks con la ayuda de las funciones CopyTicks.
  8. Permitido el uso de operadores en las interfaces.

Market

  1. Corregido el error que provocaba en ciertos casos la petición reiterada de autorización en MQL5.community al realizar compras en el Mercado.

Tester

  1. Añadida la traducción de la interfaz de usuario al griego, el malayo y el hebreo.

Se ha actualizado la documentación.