Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Facebook!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Bibliotheken

RegularExpressions in MQL4 für die Arbeit mit regulären Ausdrücken - Bibliothek für den MetaTrader 4

Veröffentlicht:
MetaQuotes
Ansichten:
1151
Rating:
(30)
Veröffentlicht:
2017.10.04 13:02
Aktualisiert:
2018.09.12 10:01
\MQL4\Experts\RegExpressions Demo\
Tests.mq4 (139.5 KB) ansehen
\MQL4\Include\Internal\
Array.mqh (22.36 KB) ansehen
Wrappers.mqh (17.96 KB) ansehen
\MQL4\Include\Internal\Generic\
Collection.mqh (12.54 KB) ansehen
Dictionary.mqh (42.58 KB) ansehen
IList.mqh (5.7 KB) ansehen
LinkedList.mqh (28.29 KB) ansehen
List.mqh (38.77 KB) ansehen
\MQL4\Include\Internal\TimeSpan\
TimeSpan.mqh (31.7 KB) ansehen
\MQL4\Include\RegularExpressions\
Regex.mqh (57.05 KB) ansehen
RegexCode.mqh (22.25 KB) ansehen
RegexFCD.mqh (31.25 KB) ansehen
RegexMatch.mqh (22.94 KB) ansehen
RegexNode.mqh (32.45 KB) ansehen
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Autor des Artikels:

Microsoft Corporation. Quellcodes aus .Net Framework 4.6.1

Hinweis: die Bibliothek funktioniert im MetaTrader 4 build 1384 und höher.

Entpacken Sie die Zip-Datei in den Dateiordner.
Die Codes der Bibliothek sind im folgenden Ordner zu finden: <Dateiordner>\MQL4\Include\RegularExpressions\
Beispiele von Test-Scripts finden Sie im Ordner: <Dateiordner>\MQL4\Scripts\RegularExpressionsExamples\

Hier ist eine Übersetzung von RegularExpressions aus .Net Framework 4.6.1.

Für die Arbeit mit der Bibliothek fügen Sie Ihrem Code die Datei Regex.mqh aus dem Verzeichnis \MQL4\Include\RegularExpressions\ hinzu.

Die Bibliothek wird durch einige Beispiele ergänzt, die zur Veranschaulichung und gleichzeitig als Testfälle dienen. Alle Beispiele sind der offiziellen Webseite von Microsoft Corporation entnommen. Sie veranschaulichen grundlegende Unterschiede von regulären Ausdrücken in C# sowie die Besonderheiten der Verwendung regulärer Ausdrücke in MQL4.

Nachfolgend finden Sie detaillierte Informationen über die Pakete der portierte Bibliothek RegularExpressions MQL4:

Pakete
Beschreibung
CharUnicodeInfo.mqh
Eine archivierte txt-Datei zum Bestimmen von Unicode-Kategorien für alle Zeichen (nicht-lateinische Zeichen eingeschlossen).
RegexCapture.mqh
Stellt Ergebnisse einer erfolgreichen Erfassung des Teilausdrucks dar.
RegexCaptureCollection.mqh
Stellt einen Set der Erfassungen dar, die durch eine Erfassungsruppe getan wurden.
RegexGroup.mqh
Stellt Ergebnisse einer separaten Erfassungsgruppe dar.
RegexGroupCollections.mqhGibt einen Set von Gruppenobjekten.
RegexMatch.mqhStellt Ergebnisse aus einem separaten Treffer eines regulären Ausdrucks dar.
RegexMatchCollection.mqhStellt einen Set erfolgreicher Treffer dar, die durch eine iterative Anwendung des Musters eines regulären Ausdrucks zur Eingabezeile gefunden wurden dar.
Regex.mqhStellt einen unveränderlichen regulären Ausdruck dar.
RegexOptions.mqh Stellt alle aufgezählten Werte bereit, um Parameter regulärer Ausdrücke zu setzen.

Parameter regulärer Ausdrücke aus der Datei RegexOptions.mqh:

Parameter
Beschreibung
None
Keine Parameter gesetzt.
IgnoreCase
Klein-bzw. Großschreibung wird nicht berücksichtigt.
MultilineZeigt einen mehrzeiligen Modus an.
ExplicitCaptureUnbenannte Gruppen nicht erfassen. Die einzig zulässigen Erfassungen sind die explizit benannten oder nummerierten im Format (?<Name> Teilausdruck).
SinglelineZeigt einen einzeiligen Modus an.
IgnorePatternWhitespaceBeseitigt Trennzeichen ohne Escape-Sequenz aus dem Muster und aktiviert die mit dem '#' Zeichen markierten Kommentare.
RightToLeftZeigt, dass die Suche von rechts nach links erfolgt und nicht von links nach rechts.
DebugZeigt, dass das Programm im Debug-Modus läuft.
ECMAScriptAktiviert ein ECMAScript-konformes Verhalten für den Ausdruck. Dieser Wert kann nur zusammen mit IgnoreCase und Multiline verwendet werden.


Umgang mit RegularExpressions für MQL4:

  1. Ähnlich wie in der .Net Version wurde in dieser Bibliothek ein Speicher (statischer Cache-Speicher) regulärer Ausdrücke umgesetzt. Alle implizit erstellen regulären Ausdrücke (Instanzen der Regex Klasse) werden in diesem Speicher abgelegt. Solche Herangehensweise beschleunigt die Arbeit von Skripts, denn es besteht keine Notwendigkeit, einen regulären Ausdruck zu erstellten, wenn sein Muster mit einem der vorhandenen übereinstimmt. Die Standardgröße des Speichers beträgt 15. Die Regex::CacheSize() Methode gibt zurück oder setzt eine maximale Anzahl an Einträgen im aktuellen statischen Cache-Speicher der kompilierten regulären Ausdrücken.
  2. Die zweite Besonderheit der Arbeit mit regulären Ausdrücken in MQL4 ist unmittelbar mit der ersten verbunden. Sie besteht darin, dass der oben beschriebene Speicher aufgeräumt werden muss. Dafür muss die statische Funktion Regex::ClearCache() aufgerufen werden. Es ist empfehlenswert, diese Funktion nur dann aufzurufen, wenn die Arbeit mit regulären Ausdrücken beendet wurde, sonst ist das Risiko sehr noch, notwendige Pointer zu löschen.
  3. Im Gegensatz zu .Net ist in MQL4 die foreach Schleife nicht umgesetzt, und daher unterscheidet sich die Arbeit mit Aufzählungen. Beispiel:
    //--- Code in 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) 
      {
       //--- Bearbeitung
      }
    
    //--- Code in MQL4
    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();
       //--- Bearbeitung
      }
    delete rx;
    delete matches;
    delete en;
    Regex::ClearCache();
    
  4. Aus dem Beispiel oben folgt, dass die Syntax der Programmiersprache C# erlaubt, das '@' Zeichen vor Zeilen zu setzen, um alle Formatierungszeichen in jeweiligen Zeile zu ignorieren. MQL4 bietet eine solche Herangehensweise nicht, aus diesem Grund müssen alle Kontrollzeichen im Muster regulärer Ausdrücke explizit definiert werden.

Bei der Arbeit mit dieser Form wählen wir die gewünschte Tabelle, Spalte und den Wert, nach dem die Tabelle gefiltert wird. Klicken Sie auf Find und die gefilterte Tabelle wird unten mit einigen statistischen Daten angezeigt. Der Save Button speichert die aktuell angezeigte Tabelle in einer CSV-Datei. Die gespeicherte Datei wird auch in der Sandbox unter dem Namen Result.csv abgelegt.

Um mehr über die Bibliothek RegularExpressions für MQL4 und ihre Möglichkeiten zu erfahren, nutzen Sie den Expert Advisor Tests.mqh. Der EA setzt viele Beispiele für reguläre Ausdrücke um, die die ganze Funktionsvielfalt der Bibliothek umfassen.

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/16566

Engulfing with RSI Engulfing with RSI

Not really profitable but the code fits on one page.

Previous Candle Hi-Lo Previous Candle Hi-Lo

Previous Candle Hi-Lo is used to check the last candle multi-timeframe position relative to the current price.

Symbol Movement Symbol Movement

This custom indicator will show you 28 pair's daily candle range, High-Low range, candle bullishness or bearishness from real tick market. So you can understand the overall market situation very short time. You can change the default timeframe from Daily to any period and default candle (bar) number from 0 to any previous number. Also you can open the required symbol by clicking the symbol button.

BarNumbers BarNumbers

Displays the number of each bar - both, relative to the most current bar and in absolute terms from the beginning of the chart.