Guarda come scaricare robot di trading gratuitamente
Ci trovi su Twitter!
Unisciti alla nostra fan page
Script interessante?
Pubblica il link!
lasciare che altri lo valutino
Ti è piaciuto lo script? Provalo nel Terminale MetaTrader 5
Librerie

RegularExpressions in MQL5 per lavorare con le espressioni regolari - libreria per MetaTrader 5

Pubblicati da::
MetaQuotes
Visualizzazioni:
503
Valutazioni:
(40)
Pubblicato:
2021.11.15 16:28
Aggiornato:
2022.11.15 09:56
\MQL5\Experts\RegExpressions Demo\
Tests.mq5 (139.55 KB) visualizza
\MQL5\Include\Internal\
Array.mqh (22.32 KB) visualizza
\MQL5\Include\Internal\Generic\
List.mqh (38.62 KB) visualizza
\MQL5\Include\Internal\TimeSpan\ \MQL5\Include\RegularExpressions\
Regex.mqh (58.05 KB) visualizza
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 5 build 1285 e superiore.

Scompatta l'archivio in terminal_data_folder.
I codici della libreria sono posizionati in: <terminal_data_folder>\MQL5\Include\RegularExpressions\
Gli script d'esempio possono essere trovati in <terminal_data_folder>\MQL5\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 "\MQL5\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 MQL5.

Di seguito informazioni più dettagliate circa i pacchetti della libreria RegularExpressions portata a MQL5:

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.mqhRappresenta una raccolta di oggetti Group.
RegexMatch.mqhRappresenta i risultati di una singola corrispondenza di espressione regolare.
RegexMatchCollection.mqhRappresenta una raccolta di corrispondenze riuscite trovate applicando in modo iterativo il modello di espressione regolare alla stringa di input.
Regex.mqhRappresenta 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.
MultilineSpecifica la modalità multilinea.
ExplicitCaptureNon acquisisce gruppi senza nome. Specifica che le uniche acquisizioni valide sono i gruppi esplicitamente denominati o numerati nella forma (?<nome> sottoespressione).
SinglelineSpecifica la modalità linea singola:
IgnorePatternWhitespaceElimina gli spazi bianchi senza caratteri di escape dal modello e abilita i commenti contrassegnati con #.
RightToLeftSpecifica che la ricerca sarà da destra a sinistra anzichè da sinistra a destra.
DebugSpecifica che il programma lavora in modalità debug.
ECMAScriptAbilita 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 MQL5:

  1. 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.
  2. La seconda caratteristica di lavorare con le espressioni regolari in MQL5 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.
  3. A differenza di .Net, MQL5 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 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();
       //--- handling
      }
    delete rx;
    delete matches;
    delete en;
    Regex::ClearCache();
    
  4. 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 MQL5, questo approccio non è fornito, quindi tutti i caratteri di controllo in un modello di espressione regolare dovrebbero essere definiti in modo esplicito.


Esempio di lavoro con RegularExpressions per MQL5:

Come esempio di espressioni regolari, considera la loro applicazione per analizzare la cronologia di trading scaricata dal terminale sotto forma di file html.

Per fare ciò, crea un expert con un singolo parametro di input di tipo 'stringa', che sarà il nome del file sandbox:


Questo documento contiene due tabelle principali "Orders" e "Deals". 

Crea un'espressione regolare per analizzare il file:

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

Considera questa espressione regolare:

(>)
Cerca il carattere ">"
(^[<>]*)
Qualsiasi simbolo tranne '>' e '<', ripetuto zero o più volte
(<)
Cerca il simbolo '<'

Quindi, leggi il file riga per riga e ottieni tutte le corrispondenze che corrispondono a questa espressione regolare:

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

Le stringhe del file html, che sono voci (tuple) per le tabelle "Orders" e "Deals", avranno la maggior parte di tali corrispondenze, rispettivamente 23 e 27 corrispondenze. Pertanto, l'unica cosa che resta da fare è estrarre tutte le informazioni necessarie da queste stringhe.

Per la tabella "Orders":

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

È stato confermato che il numero di corrispondenze è 23 e, pertanto, la voce gestita proviene dalla tabella "Orders". Crea un array di stringhe come rappresentazione iniziale della nostra voce. Crea l'iterazione su tutte le corrispondenze dispari, ottieni i valori di tali corrispondenze utilizzando il metodo matches[j][.Value(), taglia il primo e l'ultimo carattere di ciascuna corrispondenza, che corrispondono ai caratteri '>' e '<'. Ogni corrispondenza formattata viene scritta in un array in precedentemente dichiarato. Successivamente creare un'istanza della classe OrderRecord(in), che rappresenta una singola voce della tabella "Orders", e aggiungerla all'elenco m_list1. Questo elenco interpreterà la tabella "Orders".

La tabella "Deals" sarà processata in modo simile:

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

Qui m_list2 è una lista di puntatori alla classe DealRecord. Rappresenta la tabella "Deals".

Entrambe queste liste sono membri della classe TradeHistory. Questa classe è la rappresentazione dell'intero file html originale. Inoltre, permette di applicare semplici filtri alle tabelle "Orders" e "Deals" utilizzando i metodi: FindAllOrders(const int columnIndex,const T value) e FindAllDeals(const int columnIndex, valore T costante).

Crea una semplice interfaccia grafica nell'EA per dimostrare queste capacità:


Quando si lavora con questo modulo, selezionare la tabella desiderata, selezionare una colonna e il relativo valore per filtrare la tabella. Premi il pulsante Trova e la tabella filtrata verrà visualizzata di seguito, insieme ad alcune statistiche su di essa. Il pulsante Salva salva la tabella attualmente visualizzata in un file csv. Anche il file salvato si troverà nella sandbox e avrà il nome Result.csv.

Per ulteriori informazioni su RegularExpressions per MQL5 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.

Tradotto dal russo da MetaQuotes Ltd.
Codice originale https://www.mql5.com/ru/code/15242

Fuzzy - libreria per lo sviluppo di modelli fuzzy Fuzzy - libreria per lo sviluppo di modelli fuzzy

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

Pubblicazione automatica con WebRequest() Pubblicazione automatica con WebRequest()

Un esempio della pubblicazione di un messaggio contenente un'immagine sul sito web MQL5.com utilizzando la funzione WebRequest(). Questo è un esempio di come autorizzare utilizzando login e password, e inserire un'immagine in un messaggio di testo

Grafico Navigazione Demo Grafico Navigazione Demo

Script semplice con dimostrazione dell'utilizzo della funzione ChartNavigate().

Procedura guidata MQL5 - Segnali di trading basati su Dark Cloud Cover/Piercing Line + Stochastic Procedura guidata MQL5 - Segnali di trading basati su Dark Cloud Cover/Piercing Line + Stochastic

Vengono considerati i segnali di trading basati sul pattern di candele "Dark Cloud Cover/Piercing Line", confermato dall'indicatore stocastico. Il codice dell'Expert Advisor basato su questa strategia può essere generato automaticamente utilizzando il Wizard MQL5.