Unisciti alla nostra fan page

RegularExpressions in MQL4 per lavorare con le espressioni regolari - libreria per MetaTrader 4
- Pubblicati da::
- MetaQuotes
- Visualizzazioni:
- 706
- Valutazioni:
- Pubblicato:
- 2021.11.15 16:28
-
Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance
Autore:
Microsoft Corporation. Il codice sorgente è stato preso da .Net Framework 4.6.1.
Nota: La libreria lavora su MetaTrader 4 build 1384 e superiore.
Scompatta l'archivio in terminal_data_folder.
I codici della libreria sono posizionati in: <terminal_data_folder>\MQL4\Include\RegularExpressions\
Gli script d'esempio possono essere trovati in <terminal_data_folder>\MQL4\Scripts\RegularExpressionsExamples\
Qui c'è una traduzione della RegularExpressions da .Net Framework 4.6.1.
Per lavorare con la libreria, includere il file Regex.mqh dalla directory "\MQL4\Include\RegularExpressions\" nel tuo codice.
Con la libreria sono forniti diversi esempi illustrativi, che allo stesso tempo fungono da casi test. Tutti gli esempi sono stati presi dal sito ufficiale di Microsoft Corporation, dimostrano chiaramente le principali differenze dalle espressioni regolari in C# e le caratteristiche del loro utilizzo in MQL4.
Di seguito informazioni più dettagliate circa i pacchetti della libreria RegularExpressions portata a MQL4:
Pacchetti | Descrizione |
---|---|
CharUnicodeInfo.mqh | File txt archiviato per determinare le categorie Unicode per tutti i simboli (compresi i caratteri non latini). |
RegexCapture.mqh | Rappresenta i risultati di acquisizione di una singola sottoespressione avvenuta con successo. |
RegexCaptureCollection.mqh | Rappresenta l'insieme di acquisizioni effettuate da un singolo gruppo di acquisizioni. |
RegexGroup.mqh | Rappresenta i risultati di un singolo gruppo di acquisizione. |
RegexGroupCollections.mqh | Rappresenta una raccolta di oggetti Group. |
RegexMatch.mqh | Rappresenta i risultati di una singola corrispondenza di espressione regolare. |
RegexMatchCollection.mqh | Rappresenta una raccolta di corrispondenze riuscite trovate applicando in modo iterativo il modello di espressione regolare alla stringa di input. |
Regex.mqh | Rappresenta un'espressione regolare immutabile |
RegexOptions.mqh | Fornisce valori enumerati da utilizzare per impostare le opzioni delle espressioni regolari. |
I parametri delle espressioni regolari dal file RegexOptions.mqh:
Parametri | Descrizione |
---|---|
None | Specifica che nessuna delle opzioni sono impostate. |
IgnoreCase | Specifica corrispondenze nei case-insensitive. |
Multiline | Specifica la modalità multilinea. |
ExplicitCapture | Non acquisisce gruppi senza nome. Specifica che le uniche acquisizioni valide sono i gruppi esplicitamente denominati o numerati nella forma (?<nome> sottoespressione). |
Singleline | Specifica la modalità linea singola: |
IgnorePatternWhitespace | Elimina gli spazi bianchi senza caratteri di escape dal modello e abilita i commenti contrassegnati con #. |
RightToLeft | Specifica che la ricerca sarà da destra a sinistra anzichè da sinistra a destra. |
Debug | Specifica che il programma lavora in modalità debug. |
ECMAScript | Abilita il comportamento conforme a ECMA Script per l'espressione. Questo valore può essere utilizzato solo insieme ai valori IgnoreCase e Multiline. |
Lavorando con RegularExpressions per MQL4:
- Come con la versione per .Net, questa libreria implementa una memorizzazione (cache statica) di espressioni regolari. Tutte le espressioni regolari create implicitamente (istanze della classe Regex) vengono scritte in quella memoria. Questo approccio velocizza il funzionamento degli script, in quanto elimina la necessità di ricostruire l'espressione regolare se il suo pattern corrisponde a uno di quelli esistenti. La dimensione predefinita della memoria è 15. Il metodo Regex::CacheSize() restituisce o imposta il numero massimo di voci nell'attuale cache statica delle espressioni regolari rispettate.
- La seconda caratteristica di lavorare con le espressioni regolari in MQL4 segue direttamente dalla prima. E sta nel fatto che la memoria di cui sopra deve essere cancellata. Per fare questo, chiamare la funzione statica Regex::ClearCache(). E' raccomandato chiamare questa funzione solo dopo che il lavoro con l'espressione regolare è stato completato, altrimenti c'è il rischio di cancellare i puntatori necessari.
- A differenza di .Net, MQL4 non implementa il ciclo foreach e quindi la gestione dell'enumerazione sarà diversa. Esempio:
//--- 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) { //--- handling } //--- 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(); //--- handling } delete rx; delete matches; delete en; Regex::ClearCache();
- Come si può notare dall'esempio sopra, la sintassi del C# consente di inserire il simbolo "@" davanti alle stringhe per ignorare tutti i segni di formattazzione in esso. In MQL4, questo approccio non è fornito, quindi tutti i caratteri di controllo in un modello di espressione regolare dovrebbero essere definiti in modo esplicito.
Per ulteriori informazioni su RegularExpressions per MQL4 e sulle sue funzionalità, utilizza l'esperto Tests.mqh fornito. Implementa numerosi esempi di utilizzo delle espressioni regolari, che coprono tutte le principali funzionalità della libreria.
Tr
Tradotto dal russo da MetaQuotes Ltd.
Codice originale https://www.mql5.com/ru/code/16566

La libreria FuzzyNet per lo sviluppo di modelli fuzzy è stata scritta in C#. Durante la conversione a MQL4, sono state aggiunte alla libreria 8 funzioni di appartenenza e 4 metodi di defuzzificazione per i sistemi di tipo Mamdani.

L'Expert Advisor mostra i valori correnti degli Indici Azionari Mondiali di Google Finance utilizzando la funzione WebRequest.

Directional Movement using Hann windowing - metatrader 4 version

ATR based limit channels - metatrader 4 version