Mira cómo descargar robots gratis
¡Búscanos en Facebook!
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

RegularExpressions en MQL5 para trabajar con expresiones frecuentes - librería para MetaTrader 5

Publicado por:
MetaQuotes
Visualizaciones:
1503
Ranking:
(40)
Publicado:
2016.05.20 13:44
Actualizado:
2022.11.15 09:54
\MQL5\Experts\RegExpressions Demo\
TableListView.mqh (60.38 KB) ver
Tests.mq5 (139.55 KB) ver
\MQL5\Include\Internal\
Array.mqh (22.32 KB) ver
IComparable.mqh (4.98 KB) ver
Wrappers.mqh (16.99 KB) ver
\MQL5\Include\Internal\Generic\
Collection.mqh (12.54 KB) ver
Dictionary.mqh (42.58 KB) ver
ICollection.mqh (6.15 KB) ver
IComparer.mqh (6.62 KB) ver
IDictionary.mqh (6.88 KB) ver
IEnumerable.mqh (5.31 KB) ver
IEnumerator.mqh (10.39 KB) ver
IList.mqh (5.7 KB) ver
KeyValuePair.mqh (6.34 KB) ver
LinkedList.mqh (28.3 KB) ver
List.mqh (38.62 KB) ver
\MQL5\Include\Internal\TimeSpan\
TimeSpan.mqh (31.7 KB) ver
TimeSpanFormat.mqh (30.31 KB) ver
\MQL5\Include\RegularExpressions\
Regex.mqh (58.05 KB) ver
RegexCapture.mqh (7.86 KB) ver
RegexCharClass.mqh (97.97 KB) ver
RegexCode.mqh (22.25 KB) ver
RegexFCD.mqh (31.22 KB) ver
RegexGroup.mqh (8.72 KB) ver
RegexMatch.mqh (22.94 KB) ver
RegexNode.mqh (32.45 KB) ver
RegexOptions.mqh (14.82 KB) ver
RegexParser.mqh (93.26 KB) ver
RegexRunner.mqh (31.31 KB) ver
RegexTree.mqh (8.47 KB) ver
RegexWriter.mqh (24.52 KB) ver
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

Autor real:

Microsoft Corporation. Los códigos fuente se han tomado de .Net Framework 4.6.1

Advertencia: la Biblioteca funciona en MetaTrader 5 build 1285 y superior.

Para que funcione, es necesario descomprimir el archivo en la carpeta catálogo_de_datos_del_terminal.
Los códigos de la biblioteca se ubican en la carpeta: <catálogo_de_datos_del_terminal>\MQL5\Include\RegularExpressions\
Podrá encontrar ejemplos de scripts de texto en la carpeta: <catálogo_de_datos_del_terminal>\MQL5\Scripts\RegularExpressionsExamples\

Aquí se presenta la traducción de RegularExpressions con .Net Framework 4.6.1.

Para trabajar con la biblioteca es necesario conectar a su código el archivo Regex.mqh del directorio \MQL5\Include\RegularExpressions\.

Además, junto con la biblioteca existen varios ejemplos demostrativos que a la vez cumplen el papel de casos ejemplares. Todos los jemplos han sido tomados de la página oficial de Microsoft Corporation, y muestran de forma muy clara las diferencias principales de las expresiones regulares en C#, así como las peculiaridades de su uso en MQL5.

Obtenga más información sobre los paquetes de la biblioteca portada RegularExpressions MQL5:

Paquetes
Descripción
CharUnicodeInfo.mqh
txt archivado para determinar las categorías Unicode para todos los caracteres (incluyendo los caracteres no latinos).
RegexCapture.mqh
Representa los resultados de un registro con éxito de parte de la expresión.
RegexCaptureCollection.mqh
Representa un conjunto de registros hechos de un grupo de registros.
RegexGroup.mqh
Representa los resultados de un grupo de registro aparte.
RegexGroupCollections.mqhRetorna un conjunto de grupos registrados en la misma yuxtaposición.
RegexMatch.mqhRepresenta los resultados de una correspondencia separada de una expresión regular.
RegexMatchCollection.mqhRepresenta un conjunto de coincidencias exitosas detectadas mediante la aplicación iterativa de un patrón de expresión regular para la secuencia de entrada.
Regex.mqhRepresenta una expresión regular inmutable.
RegexOptions.mqh Representa valores enumerados que luego se usarán al definir los parámetros de las expresiones regulares.

Parámetros de expresiones regulares a partir del archivo RegexOptions.mqh:

Parámetro
Descripción
None
Parámetros no establecidos.
IgnoreCase
El registro no se tiene en cuenta al buscar coincidencias.
MultilineRepresenta el modo multilínea.
ExplicitCaptureNo abarcar grupos sin nombre. Las únicas selecciones admitidas son grupos claramente denominados o numerados en el formato (?<nombre> parte de la expresión).
SinglelineIndica el modo de línea única.
IgnorePatternWhitespaceQuita del patrón los separadores sin la secuencia escape y activa los comentarios marcados con el símbolo "#".
RightToLeftIndica que la búsqueda se realizará de derecha a izquierda, y no izquierda a derecha.
DebugIndica que el programa funciona en el modo depuración.
ECMAScriptActiva el comportamiento compatible ECMAScript para la expresión. Este valor puede ser utilizado solo de forma conjunta con los valores IgnoreCase y Multiline.


Características del trabajo con RegularExpressions para MQL5:

  1. Como en la versión .Net, en esta biblioteca se ha implementado un repositorio (memoria cache estática) de las expresiones regulares. Todas las expresiones regulares creadas de forma implícita (ejemplares de la clase Regex) se insertan en este repositorio. Este enfoque acelera el funcionamiento de los scripts, con lo que desaparece la necesidad de construir de nuevo las expresiones regulares, si su patrón coincide con uno de los ya existentes. Por defecto, el tamaño del repositorio es igual a 15. El método Regex::CacheSize() retorna o establece la cantidad máxima de entradas en la actual memoria cache invariable de las expresiones regulares compiladas.
  2. La segunda característica a la hora de trabajar con expresiones regulares en MQL5 surge directamente de la primera. Y se trata de la necesidad de limpiar el repositorio mencionado más arriba. Para ello es imprescindible llamar a la función invariable Regex::ClearCache(). Es recomendable llamar a esta función solo cuando finalice el trabajo con las expresiones regulares, de lo contrario, la probabilidad de eliminar indicadores necesarios será muy elevada.
  3. A diferencia de .Net, en MQL5 no se ha implementado el ciclo foreach, y por consiguiente, el trabajo con las enumeraciones será diferente. Ejemplo:
    //--- Código en C#
    Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b", RegexOptions.IgnoreCase);   
    string text = "The the quick brown fox  fox jumped over the lazy dog dog.";
    MatchCollection matches = rx.Matches(text);
    foreach (Match match in matches) 
      {
       //--- procesamiento
      }
    
    //--- Código en MQL5
    Regex *rx = new Regex("\\b(?<word>\\w+)\\s+(\\k<word>)\\b", RegexOptions::IgnoreCase);        
    string text = "The the quick brown fox  fox jumped over the lazy dog dog.";
    MatchCollection *matches = rx.Matches(text);
    IEnumerator<Match*> *en = matches.GetEnumerator();
    while(en.MoveNext()) 
      {
       Match *match = en.Current();
       //--- procesamiento
      }
    delete rx;
    delete matches;
    delete en;
    Regex::ClearCache();
    
  4. Como se puede ver en el ejemplo de más arriba, el lenguaje C# permite introducir delante de las líneas el símbolo '@' para ignorar todas las señales de formateo en ella. En MQL5 este enfoque no está previsto, por eso todos los símbolos de сontrol en el patrón de expresiones regulares deben escribirse con claridad.


Ejemplo de trabajo con RegularExpressions para MQL5:

Como ejemplo de funcionamiento de las expresiones regulares, veremos su aplicación para analizar el historial comercial descargado desde el terminal en forma de archivo html.

Para ello, crearemos un experto con un parámetro de entrada del tipo string, que será el nombre de nuestro archivo en el área local:


Este documento contiene dos recuadros principales: "Órdenes" y "Operaciones". 

Creamos una experisón regular para analizar el archivo:

Regex *rgx=new Regex("(>)([^<>]*)(<)");

Analizamos la expresión regular:

(>)
Búsqueda del símbolo '>'
(^[<>]*)
Cualquier símbolo, excepto '>' y '<', que se repita cero o más veces
(<)
Búsqueda del símbolo '<'

A continuación, leemos el archivo y obtenemos todas las coincidencias que correspondan a esta expresión regular:

string str=FileReadString(m_handel);
MatchCollection *matches=rgx.Matches(str);

En las líneas del archivo html que sean registros (secuencias) para los recuadros "Órdenes" y "Operaciones", habrá más coincidencias de este tipo, 23 y 27 respectivamente. Por consiguiente, solo queda obtener la información que necesitamos de estas líneas.

Para el recuadro "Órdenes":

if(matches.Count()==23)
  {
   string in[11];
   for(int i=0,j=1; i<11; i++,j+=2)
     {
      in[i]=StringSubstr(matches[j].Value(),1,StringLen(matches[j].Value())-2);
     }
   m_list1.Add(new OrderRecord(in));
  }

Estamos seguros de que la cantidad de coincidencias es igual a 23, y, por lo tanto, nos encontramos ante una entrada del recuadro "Órdenes". Creamos una matriz de líneas como presentación inicial de nuestro registro. Organizamos una pasada por todas las coincidencias impares y obtenemos los valores de estas coincidencias, usando el método matches[j][.Value(), y cortamos a las coincidencias el primer símbolo y el último, que corresponden a los símbolos '>' y '<'. Cada coincidencia formateada la introducimos en la matriz declarada con anterioridad in. A continuación, creamos un ejemplar de la clase OrderRecord(in), que presenta una entrada del recuadro "Órdenes", y la añadimos a la lista m_list1. Esta lista interpretará el recuadro "Órdenes".

El recuadro "Operaciones" se procesará de forma análoga:

if(matches.Count()==27)
  {
   string in[13];
   for(int i=0,j=1; i<13; i++,j+=2)
     {
      in[i]=StringSubstr(matches[j].Value(),1,StringLen(matches[j].Value())-2);
     }
   m_list2.Add(new DealRecord(in));
  }

Aquí m_list2 corresponde a la lista de indicadores para la clase DealRecord, que representa a su vez el recuadro "Operaciones".

Ambas listas son miembros de la clase TradeHistory. Esta clase es una representación de todo nuestro archivo html inicial. Además, permite usar filtros sencillos en los recuadros "Órdenes" y  "Operaciones" con la ayuda de los métodos: FindAllOrders(const int columnIndex,const T value) y FindAllDeals(const int columnIndex,const T value).

Creamos en nuestro experto una sencilla interfaz gráfica para demostrar estas posibilidades:


Al trabajar con esta forma, elegimos el recuadro que nos interese, seleccionamos una columna y el valor de la misma conforme al que se filtrará el recuadro. Pulsamos el botón Find y el recuadro filtrado se representará más abajo, junto con algunas estadísticas sobre el mismo. El botón Save guarda el recuadro representado actual en un archivo csv. El archivo guardado se ubicará igualmente en el área local y tendrá el nombre Result.csv.

Para obtener más información sobre la biblioteca RegularExpressions para MQL5 y sus posibilidades, se ha creado el experto Tests.mqh. En él se ha implementado una mayor cantidad de ejemplos de uso de expresiones regulares que tocan la funcionalidad principal de la biblioteca al completo.

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

XEnvelopes XEnvelopes

Indicador Envelopes clásico con uso de algoritmos de promediación universal y función para dar un color determinado al fondo del canal.

Ilan 1.6 Dynamic HT Ilan 1.6 Dynamic HT

El legendario Ilan 1.6 Dynamic pertenece a la serie de los llamados "promediadores". Gracias a sus avanazadas fórmulas de gestión de capital, permite salir con beneficios incluso de una posición que a ciencia cierta tendría pérdidas. Ahora Ilan 1.6 Dynamic está disponible en los códigos fuente para MetaTrader 5.

Fisher_org_v1 Fisher_org_v1

Indicador Fisher Transform. Muestra los movimientos actuales, los niveles establecidos a menudo actúan como punto de inflexión.

Volume_Weighted_MA_StDev_HTF Volume_Weighted_MA_StDev_HTF

Indicador Volume_Weighted_MA_StDev con posibilidad de cambiar el marco temporal del indicador en los parámetros de entrada.