Voir comment télécharger gratuitement des robots de trading
Retrouvez-nous sur Telegram !
Rejoignez notre page de fans
Un script intéressant ?
Poster un lien vers celui-ci -
laisser les autres l'évaluer
Vous avez aimé le script ? Essayez-le dans le terminal MetaTrader 5
Bibliothèque

RegularExpressions dans MQL5 pour travailler avec des expressions régulières - bibliothèque pour MetaTrader 5

Publié par:
MetaQuotes
Vues:
566
Note:
(40)
Publié:
2022.01.31 10:19
Mise à jour:
2022.11.15 09:56
\MQL5\Experts\RegExpressions Demo\
Tests.mq5 (139.55 KB) afficher
\MQL5\Include\Internal\
Array.mqh (22.32 KB) afficher
Wrappers.mqh (16.99 KB) afficher
\MQL5\Include\Internal\Generic\
IList.mqh (5.7 KB) afficher
List.mqh (38.62 KB) afficher
\MQL5\Include\Internal\TimeSpan\ \MQL5\Include\RegularExpressions\
Regex.mqh (58.05 KB) afficher
RegexCode.mqh (22.25 KB) afficher
RegexFCD.mqh (31.22 KB) afficher
RegexNode.mqh (32.45 KB) afficher
Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance

Véritable auteur :

Microsoft Corporation. Code source extrait de .Net Framework 4.6.1

Remarque : la bibliothèque fonctionne sur MetaTrader 5 build 1285 et supérieur.

Décompressez l'archive dans le terminal_data_folder.
Les codes de bibliothèque se trouvent dans : <terminal_data_folder>\MQL5\Include\RegularExpressions\
Des exemples de scripts de test sont disponibles dans <terminal_data_folder>\MQL5\Scripts\RegularExpressionsExamples\

Voici une traduction des RegularExpressions de .Net Framework 4.6.1.

Pour travailler avec la bibliothèque, incluez le fichier Regex.mqh du répertoire "\MQL5\Include\RegularExpressions\" dans votre code.

Plusieurs exemples illustratifs sont fournis avec la bibliothèque, qui servent en même temps de cas de test. Tous les échantillons sont tirés du site officiel de Microsoft Corporation, ils démontrent de manière frappante les principales différences par rapport aux expressions régulières en C# et les fonctionnalités de leur utilisation dans le MQL5.

Vous trouverez ci-dessous des informations plus détaillées sur les packages de bibliothèques portés par RegularExpressions MQL5 :

Paquets
Description
CharUnicodeInfo.mqh
Fichier txt archivé pour déterminer les catégories Unicode pour tous les symboles (y compris les caractères non latins).
RegexCapture.mqh
Représente les résultats d'une seule capture de sous-expression réussie.
RegexCaptureCollection.mqh
Représente l'ensemble des captures effectuées par un seul groupe de capture.
RegexGroup.mqh
Représente les résultats d'un seul groupe de capture.
RegexGroupCollections.mqhReprésente une collection d'objets Group.
RegexMatch.mqhReprésente les résultats d'une seule correspondance d'expression régulière.
RegexMatchCollection.mqhReprésente une collection de correspondances réussies trouvées en appliquant de manière itérative le modèle d'expression régulière à la chaîne d'entrée.
Regex.mqhReprésente une expression régulière immuable
RegexOptions.mqh Fournit des valeurs énumérées à utiliser pour définir des options d'expression régulière.

Les paramètres d'expression régulière du fichier RegexOptions.mqh :

Paramètre
Description
None
Spécifie qu'aucune options n'est définie.
IgnoreCase
Spécifie une correspondance insensible à la casse.
MultilineSpécifie le mode multiligne.
ExplicitCaptureNe pas capturer de groupes sans nom. Spécifie que les seules captures valides sont des groupes explicitement nommés ou numérotés de la forme (?<nom> sous-expression).
SinglelineSpécifie le mode ligne simple.
IgnorePatternWhitespaceÉlimine les espaces blancs non échappés du motif et active les commentaires marqués d'un #.
RightToLeftSpécifie que la recherche se fera de droite à gauche au lieu de gauche à droite.
DebugIndique que le programme fonctionne en mode débogage.
ECMAScriptActive le comportement conforme à ECMAScript pour l'expression. Cette valeur ne peut être utilisée qu'avec les valeurs IgnoreCase et Multiline.


Travailler avec RegularExpressions pour MQL5 :

  1. Comme pour la version pour .Net, cette bibliothèque implémente un stockage (cache statique) d'expressions régulières. Toutes les expressions régulières créées implicitement (instances de la classe Regex) sont écrites dans ce stockage. Cette approche accélère le fonctionnement des scripts, car elle élimine le besoin de reconstruire l'expression régulière si son modèle correspond à l'un des modèles existants. La taille par défaut du stockage est de 15. La méthode Regex::CacheSize() renvoie ou définit le nombre maximal d'entrées dans le cache statique actuel des expressions régulières conformes.
  2. La deuxième fonctionnalité du travail avec les expressions régulières dans MQL5 découle directement de la première. Et cela réside dans le fait que le stockage ci-dessus doit être effacé. Pour ce faire, appelez la fonction statique Regex::ClearCache(). Il est recommandé de n'appeler cette fonction qu'une fois le travail avec les expressions régulières terminé, sinon il y a un risque de supprimer les pointeurs nécessaires.
  3. Contrairement au .Net, le MQL5 n'implémente pas la boucle foreach, et donc la gestion de l'énumération sera différente. Exemple :
    //--- Code 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) 
      {
       //--- traitement
      }
    
    //--- Code 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();
       //--- gestion
      }
    delete rx;
    delete matches;
    delete en;
    Regex::ClearCache();
    
  4. Comme le montre l'exemple ci-dessus, la syntaxe C# permet de mettre le symbole '@' devant les chaînes pour ignorer toutes les marques de formatage qu'elle contient. Dans MQL5, cette approche n'est pas fournie, donc tous les caractères de contrôle dans un modèle d'expression régulière doivent être explicitement définis.


Exemple de travail avec RegularExpressions pour MQL5 :

Comme exemple d'expressions régulières, considérons leur application pour analyser l'historique des transactions téléchargé depuis le terminal sous la forme d'un fichier html.

Pour cela, créez un expert avec un seul paramètre d'entrée de type 'string', qui sera le nom du fichier sandbox :


Ce document contient deux tableaux principaux : "Ordres" et "Transactions". 

Créez une expression régulière pour analyser le fichier :

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

Considérez cette expression régulière :

(>)
Trouvez le caractère '>'
(^[<>]*)
Tout symbole sauf '>' et '<', répété zéro ou plusieurs fois
(<)
Trouvez le symbole '<'

Ensuite, lisez le fichier ligne par ligne et obtenez toutes les correspondances qui correspondent à cette expression régulière :

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

Les chaînes du fichier html, qui sont des entrées (tuples) pour les tableaux "Ordres" et "Transactions", auront le plus de telles correspondances, à savoir 23 et 27 correspondances respectivement. Par conséquent, la seule chose qui reste à faire est d'extraire toutes les informations nécessaires de ces chaînes.

Pour le tableau "Ordres" :

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));
  }

Il a été confirmé que le nombre de correspondances est de 23, et par conséquent, l'entrée traitée provient du tableau "Ordres". Créez un tableau de chaînes comme représentation initiale de notre entrée. Créez une itération sur toutes les correspondances impaires, obtenez les valeurs de ces correspondances à l'aide de la méthode matches[j][.Value(), coupez le premier et le dernier caractère de chaque correspondance, qui correspondent aux caractères '>' et '<'. Chaque correspondance formatée est écrite dans un tableau in précédemment déclaré. Après cela, créez une instance de la classe OrderRecord(in), qui représente une seule entrée du tableau "Ordres", et ajoutez-la à la liste m_list1. Cette liste interprétera le tableau "Ordres".

Le tableau "Transactions" sera traité de la même manière :

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));
  }

Ici m_list2 est une liste de pointeurs vers la classe DealRecord. Il représente le tableau "Transactions".

Ces deux listes sont membres de la classe TradeHistory. Cette classe est la représentation de l'intégralité du fichier html d'origine. De plus, il permet d'appliquer des filtres simples aux tableaux "Ordres" et "Transactions" en utilisant les méthodes : FindAllOrders(const int columnIndex,const T value) et FindAllDeals(const int columnIndex, valeur const T).

Créez une interface graphique simple dans l'EA pour démontrer ces capacités :


Lorsque vous travaillez avec cette forme, sélectionnez le tableau souhaité, sélectionnez une colonne et sa valeur pour filtrer le tableau. Appuyez sur le bouton Rechercher et le tableau filtré s'affichera ci-dessous, accompagné de quelques statistiques. Le bouton Enregistrer stocke le tableau actuellement affiché dans un fichier csv. Le fichier enregistré sera également situé dans le bac à sable et portera le nom Résultat.csv.

Pour en savoir plus sur les RegularExpressions pour MQL5 et ses fonctionnalités, utilisez l'expert Tests.mqh fourni. Il implémente de nombreux exemples d'utilisation d'expressions régulières, qui couvrent toutes les fonctionnalités principales de la bibliothèque.

Traduit du russe par MetaQuotes Ltd.
Code original : https://www.mql5.com/ru/code/15242

Fuzzy - bibliothèque pour développer des modèles flous Fuzzy - bibliothèque pour développer des modèles flous

La bibliothèque FuzzyNet pour le développement de modèles flous a été écrite en C#. Lors de la conversion en MQL5, 8 fonctions d'appartenance et 4 méthodes de défuzzification pour les systèmes de type Mamdani ont été ajoutées à la bibliothèque.

Publication automatique avec WebRequest() Publication automatique avec WebRequest()

Exemple de publication d'un message contenant une image sur le site Web MQL5.com à l'aide de la fonction WebRequest(). Voici un exemple d'autorisation à l'aide d'un login et d'un mot de passe, et d'insertion d'une image dans un SMS.

RatesCompressor RatesCompressor

Rates Version of a script https://www.mql5.com/en/code/30791

SMA(no loop) SMA(no loop)

Fast way to calculate Simple moving average.