Ticaret robotlarını ücretsiz olarak nasıl indirebileceğinizi izleyin
Bizi Facebook üzerinde bulun!
Fan sayfamıza katılın
Komut dosyasını ilginç mi buldunuz?
Öyleyse bir link gönderin -
başkalarının da faydalanmasını sağlayın
Komut dosyasını beğendiniz mi? MetaTrader 5 terminalinde deneyin
Kütüphaneler

Düzenli İfadelerle Çalışmak İçin MQL5'te RegularExpressions - MetaTrader 5 için kütüphane

Yayınlayan:
MetaQuotes
Görüntülemeler:
405
Derecelendirme:
(40)
Yayınlandı:
2022.03.21 09:39
Güncellendi:
2022.11.15 09:57
\MQL5\Experts\RegExpressions Demo\
Tests.mq5 (139.55 KB) görüntüle
\MQL5\Include\Internal\
Array.mqh (22.32 KB) görüntüle
\MQL5\Include\Internal\Generic\
List.mqh (38.62 KB) görüntüle
\MQL5\Include\Internal\TimeSpan\ \MQL5\Include\RegularExpressions\
Regex.mqh (58.05 KB) görüntüle
Bu koda dayalı bir robota veya göstergeye mi ihtiyacınız var? Freelance üzerinden sipariş edin Freelance'e git

Gerçek yazar

Microsoft Corporation. Kaynak kodu .Net Framework 4.6.1'den alınmıştır. 

Not: Kütüphane, MetaTrader 5 yapı 1285 ve üzerinde çalışır.

Arşivi terminal_veri_klasörü klasörüne çıkarın.
Kütüphanenin kodları şu klasörde bulunur: terminal_veri_klasörü\MQL5\Include\RegularExpressions\
Test komut dosyaları örnekleriyse şu klasörde bulunur: terminal_veri_klasörü\MQL5\Scripts\RegularExpressionsExamples\

.Net Framework 4.6.1'ten RegularExpressions kütüphanesinin port edilmesi aşağıda gösterilmiştir.

Kütüphaneyle çalışmak için, \MQL5\Include\RegularExpressions\ klasöründeki Regex.mqh dosyasını kodunuza eklemeniz gerekir.

Kütüphaneyle birlikte, aynı zamanda test senaryoları olarak da hizmet eden birkaç açıklayıcı örnek de sağlanmıştır. Tüm örnekler Microsoft Corporation'ın resmi web sitesinden alınmıştır ve C#'daki düzenli ifadelerden temel farklarını ve MQL5'teki kullanım özelliklerini açıkça gösterirler.

RegularExpressions'ın MQL5'e port edilen kütüphane paketleri hakkında daha detaylı bilgiler aşağıdadır:

Paketler
Açıklama
CharUnicodeInfo.mqh
Tüm karakterler (Latin olmayan karakterler dahil) için Unicode kategorilerini tanımlamak adına arşivlenmiş txt dosyası.
RegexCapture.mqh
Tek bir başarılı alt ifade yakalamasının sonuçlarını temsil eder.
RegexCaptureCollection.mqh
Tek bir yakalama grubu tarafından yapılan yakalamaların kümesini temsil eder.
RegexGroup.mqh
Tek bir yakalama grubundan sonuçları temsil eder.
RegexGroupCollections.mqhGrup nesnelerinin kümesini temsil eder.
RegexMatch.mqhTek bir düzenli ifade eşleşmesinden elde edilen sonuçları temsil eder.
RegexMatchCollection.mqhDüzenli ifade kalıbını girdi dizgesine yinelemeli olarak uygulayarak bulunan başarılı eşleşmelerin kümesini temsil eder.
Regex.mqhBir değişmez düzenli ifadeyi temsil eder.
RegexOptions.mqh Düzenli ifade seçeneklerini ayarlamak için kullanılacak numaralandırılmış değerleri sağlar.

RegexOptions.mqh dosyasındaki düzenli ifade parametreleri:

Parametre
Açıklama
None
Hiçbir seçeneğin ayarlanmadığını belirtir.
IgnoreCase
Büyük/küçük harfe duyarsız eşleşmeyi belirtir.
MultilineÇok satırlı modu belirtir.
ExplicitCaptureAdsız grupları yakalamamayı belirtir; yalnızca kabul edilebilir yakalamaların format olarak açıkça adlandırılmış veya numaralandırılmış gruplar olduğunu belirtir (?<ad> alt ifade).
SinglelineTek satır modunu belirtir.
IgnorePatternWhitespaceKalıptan çıkmayan boşlukları kaldırır ve # ile işaretlenmiş yorumları dahil eder.
RightToLeftAramanın soldan sağa yerine sağdan sola olacağını belirtir.
DebugProgramın hata ayıklama modunda çalıştığını belirtir.
ECMAScriptİfade için ECMAScript uyumlu davranışı etkinleştirir. Bu değer yalnızca IgnoreCase ve Multiline değerleriyle birlikte kullanılabilir.


MQL5'e port edilmiş RegularExpressions ile çalışmanın özellikleri:

  1. .Net versiyonunda olduğu gibi, bu kütüphane düzenli ifadelerin saklanmasını (statik önbellek) uygular. Örtülü olarak oluşturulan tüm düzenli ifadeler (Regex sınıfının örnekleri) bu depoya yazılır. Bu yaklaşım, kalıbı mevcut olanlardan herhangi biriyle eşleşirse düzenli ifadeyi yeniden oluşturma ihtiyacını ortadan kaldırdığı için komut dosyalarının çalışmasını hızlandırır. Depolamanın varsayılan boyutu 15'tir. Regex::CacheSize() metodu, uyumlu düzenli ifadelerin geçerli statik önbelleğindeki maksimum girdi sayısını geri döndürür veya ayarlar.
  2. MQL5'te düzenli ifadelerle çalışmanın ikinci özelliği, doğrudan ilkinden sonra gelir. Ve yukarıdaki depolamanın temizlenmesi gerektiği gerçeğine dayanır. Bunu yapmak için, Regex::ClearCache() statik fonksiyonunun çağrılması gerekir. Bu fonksiyonun yalnızca düzenli ifadelerle çalışma tamamlandıktan sonra çağrılması önerilir, aksi takdirde gerekli işaretçileri silme riski vardır.
  3. .Net'in aksine, MQL5 foreach döngüsünü uygulamaz ve bu nedenle numaralandırma yönetimi farklı olacaktır. Örnek:
    //--- C#'ta kod
    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) 
      {
       //--- yönet
      }
    
    //--- MQL5'te kod
    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();
       //--- yönet
      }
    delete rx;
    delete matches;
    delete en;
    Regex::ClearCache();
    
  4. Yukarıdaki örnekten de görülebileceği gibi, C# söz dizimi, içindeki tüm biçimlendirme işaretlerini yok saymak için '@' karakterini dizgelerin önüne koymaya izin verir. MQL5'te bu yaklaşım sağlanmamıştır, bu nedenle düzenli ifade kalıbındaki tüm kontrol karakterleri açıkça tanımlanmalıdır.


MQL5'e port edilmiş RegularExpressions ile çalışma örneği:

Düzenli ifadelerin nasıl çalıştığına bir örnek olarak, terminalden html dosyası biçiminde indirilen bir işlem geçmişini ayrıştırmak adına düzenli ifadelerin kullanımlarını ele alalım.

Bunu yapmak için, sandboxtaki dosyanın adı olacak olan string türünde tek bir girdi parametresiyle bir Uzman Danışman oluşturalım:


Bu belge iki ana tablo içerir: "Emirler" ve "İşlemler". 

Dosyayı ayrıştırmak için bir düzenli ifade oluşturalım:

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

Şu düzenli ifadeyi ele alalım:

(>)
'>' karakterini bul
(^[<>]*)
Sıfır veya daha fazla kez tekrarlanan '>' ve '<' dışında herhangi bir karakter
(<)
'<' karakterini bul

Ardından, dosyayı satır satır okuruz ve bu düzenli ifadeye karşılık gelen tüm eşleşmeleri alırız:

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

"Emirler" ve "İşlemler" tabloları için girdiler (veri grupları) olan html dosyasının dizgeleri, bu tür eşleşmelerin çoğuna, yani sırasıyla 23 ve 27 eşleşmeye sahip olacaktır. Bu nedenle, geriye kalan tek şey bu dizgelerden gerekli tüm bilgileri çıkarmaktır.

"Emirler" tablosu için:

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

Eşleşme sayısının 23 olduğu ve böylece yönetilen girdinin "Emirler" tablosundan olduğu doğrulandı. Girdimizin başlangıç temsili olarak bir dizge dizisi oluşturalım. Tüm tek sayılı eşleşmeler üzerinde yineleme oluşturalım, matches[j][.Value() metodunu kullanarak bu eşleşmelerin değerlerini alalım ve '>' ve '<' karakterlerine karşılık gelen her eşleşmenin ilk ve son karakterlerini kırpalım. Her biçimlendirilmiş eşleşme, önceden bildirilen in dizisine yazılır. Ardından, "Emirler" tablosunun tek bir girdisini temsil eden OrderRecord(in) sınıfının yeni bir örneğini oluşturalım ve onu m_list1 listesine ekleyelim. Bu liste "Emirler" tablosunu yorumlayacak.

"İşlemler" tablosu da benzer şekilde işlenir:

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

Burada m_list2, DealRecord sınıfına yönelik işaretçilerin listesidir. "İşlemler" tablosunu temsil eder.

Bu listelerin her ikisi de TradeHistory sınıfının üyeleridir. Bu sınıf, tüm kaynak html dosyasının temsilidir. Ayrıca, FindAllOrders(const int columnIndex,const T value) ve FindAllDeals(const int columnIndex,const T value) metotlarını kullanarak "Emirler" ve "İşlemler" tablolarına basit filtreler uygulanmasına olanak tanır.

Bu özellikleri göstermek için Uzman Danışmanda basit bir grafik arayüzü oluşturalım:


Bu formla çalışırken, istediğimiz tabloyu seçiyoruz ve tabloyu filtrelemek için de sütunu ve değerini seçiyoruz. Find düğmesine basıyoruz ve filtrelenmiş tablo, bazı istatistiklerle birlikte aşağıda görüntülenecektir. Save düğmesi, o anda görüntülenen tabloyu bir csv dosyasına kaydeder. Kaydedilen dosya da sandboxta bulunur ve Result.csv olarak adlandırılır.

MQL5'e port edilmiş RegularExpressions ve özellikleri hakkında daha fazla bilgi edinmek için sağlanan Tests.mqh Uzman Danışmanını kullanın. Kütüphanenin tüm ana işlevselliklerini kapsayan çok sayıda düzenli ifade kullanımına ilişkin örnekler yer alır.

MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal kod: https://www.mql5.com/ru/code/15242

Fuzzy - Bulanık Modeller Geliştirmek İçin Kütüphane Fuzzy - Bulanık Modeller Geliştirmek İçin Kütüphane

Bulanık modeller geliştirmek için olan FuzzyNet kütüphanesi C# ile yazılmıştır. MQL5'e port edilirken, kütüphaneye Mamdani türü sistemler için 8 üyelik fonksiyonu ve 4 durulaştırma metodu eklenmiştir.

WebRequest() ile Otomatik Mesaj Yayınlama WebRequest() ile Otomatik Mesaj Yayınlama

WebRequest() fonksiyonunu kullanarak MQL5.com web sitesinde görüntü içeren bir mesaj yayınlama örneği. Bu, kullanıcı adı ve şifre kullanarak nasıl yetki verileceğine ve metin mesajına nasıl görüntü ekleneceğine dair bir örnektir.

Percentage of price movement per candle - Simple and Crucial Percentage of price movement per candle - Simple and Crucial

This indicator displays the percentage of price movement per candle, as an average of the latest candles.

Radix sort (The fastest numeric sort) Radix sort (The fastest numeric sort)

Sorts the values in the first dimension of a multidimensional numeric array in the ascending order.