Fan sayfamıza katılın
Öyleyse bir link gönderin -
başkalarının da faydalanmasını sağlayın
- Görüntülemeler:
- 144
- Derecelendirme:
- Yayınlandı:
-
Bu koda dayalı bir robota veya göstergeye mi ihtiyacınız var? Freelance üzerinden sipariş edin Freelance'e git
Her programcının kendi logger'ı vardır. Python loglama modülünden esinlenerek MQL5 için kendiminkini yazdım.
Bu sınıf en basit olanıdır. Hiyerarşi, döndürücü veya biçimlendirici yok. Her proje için basit ve kullanışlıdır.
Kurulum
- CDKLogger.mqh dosyasını MQL\Include\DKStdLib\Logger klasörüne kopyalayın.
- CDKLogger sınıfını içe aktarın.
#include <DKStdLib\Logger\CDKLogger.mqh Kullanım
CDKLogger logger; // ADIM 1. Logger'ı "MyLoggerName" adı ve INFO seviyesi ile başlatın logger.Init("MyLoggerName", INFO); // Varsayılan logger formatını "%name%:[%level%] %message%" kendi formatınızla değiştirebilirsiniz // Herhangi bir desen kombinasyonu kullanın logger.Format = "%YYYY%-%MM%-%DD% %hh%:%mm%-%ss% - %name%:[%level%] %message%"; // ADIM 2. İletiyi yalnızca alt dizinlerle filtrelemek isterseniz, // FilterInList'i doldurun // 2.1. FilterIntList'e bir substings ekleyin logger.FilterInList.Add("Including-Substring-#1"); logger.FilterInList.Add("Including-Substring-#2"); // 2.2. Tüm alt dizeleri tek satırda FilterInList'e eklemek için dizeyi ";" ayırıcısıyla bölün logger.FilterInFromStringWithSep("Including-Substring-#3;Including-Substring-#4", ";"); // ADIM 3. OUT mesajını alt dizelerle filtrelemek, ancak diğerlerini bırakmak isterseniz, // FilterOutList'i doldurun // 3.1. FilterOutList'e bir alt dize ekleyin logger.FilterOutList.Add("Excluding-Substring-#1"); logger.FilterOutList.Add("Excluding-Substring-#2"); // 3.2. Tüm alt dizeleri tek satırda FilterOutList'e eklemek için dizeyi ";" ayırıcısıyla bölün logger.FilterOutFromStringWithSep("Excluding-Substring-#3;Excluding-Substring-#4", ";"); // use Filter In filtre str'nizi sep by ; ile buraya koyun // ADIM 4. Günlük kaydı logger.Debug("Debug: Including-Substring-#1", false); // Uyarı olmadan hata ayıklama logger.Info("Info: Including-Substring-#1", true); // Uyarı iletişim kutusu ile bilgi logger.Warn("Warn: Including-Substring-#1"); logger.Error("Error: Including-Substring-#1: Excluding-Substring-#1"); // FilterOutList nedeniyle atlandı logger.Critical("Critical: Including-Substring-#1"); logger.Assert(true, "Log msg if true", INFO, // tamam ise "Log msg if false", ERROR, // eğer başarısız olursa true); // Uyarıyı da Göster logger.Assert(true, "Same msg for true & false", INFO, // Tamamsa günlük seviyesi ERROR, // Başarısız olursa günlük seviyesi false); // Uyarı Yok
Yürütme sonucunda aşağıdaki mesajlar günlüğe çıktılanacaktır:
Açık sorunlar
Class'ı genellikle bu şekilde kullanıyorum:
logger.Debug(StringFormat("%s/%d: My message: PARAM1=%f", __FUNCTION__, __LINE__, my_param));
Ancak burada bir sorunumuz var. StringFormat fonksiyonu, loglama seviyesi mesajın çıktılanmasını gerektirmese bile her seferinde dizeyi ayrıştırır.
Eğer hata ayıklama mesajlarının çıktısını çok fazla almanız gerekiyorsa, çıktıyı bir koşula bağlamanız gerekecektir:
if(DEBUG >= logger.Level) logger.Debug(StringFormat("%s/%d: My message: PARAM1=%f", __FUNCTION__, __LINE__, my_param));
Bunu yapmanın en iyi yolu StringFormat'ı tembel bir şekilde kullanmaktır, ancak ne yazık ki MQL5 Hata Ayıklama, Bilgi, Hata ve benzeri işlevlere dinamik sayıda işlev parametresi aktarmayı desteklemez.
Bunun nasıl yapılabileceğine dair fikirleriniz varsa duymak isterim.
MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
Orijinal kod: https://www.mql5.com/en/code/52741
Waddah Attar Patlaması
Gösterge, piyasanın ne zaman daha hızlı hareket etmeye başladığını gösterir. Ek olarak, tüccara bir ticareti ne zaman alacağını, satacağını ve çıkacağını söyler.
Düzeltilmiş ADX
Birçok yumuşatma algoritması vardır, bu gösterge standart ADX göstergesinin yumuşatılmasıdır.
TimeServerDaylightSavings
Teklif geçmişinden sunucu saat dilimi ve yaz saati uygulamasının (DST) ampirik tespiti için zamanla ilgili işlevler
StepMA_Line
StepMA göstergesi, hareketli ortalama olarak tasarlanmıştır.
