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:
- 53
- Derecelendirme:
- Yayınlandı:
- 2025.04.04 10:53
-
Bu koda dayalı bir robota veya göstergeye mi ihtiyacınız var? Freelance üzerinden sipariş edin Freelance'e git
Kütüphane iki tür ekran içerir. Bunlardan ilki olan LabelsDisplay, CChartObjectLabel 'ı temel alır. İkincisi , CanvasDisplay, CCanvas tabanlıdır. Ekranlar oluşturma sıklığı için optimize edilmiştir. Demo.mq5 ekranlarının çalışmasını gösteren ana Uzman Danışmanın yanı sıra, yalnızca test cihazında, keneler üzerinde ölçümler yapmak için CanvasVsLabelsTester.mq5 olmak üzere iki varyant daha vardır. Ve hem test cihazında hem de grafikte ölçümler gerçekleştiren evrensel CanvasVsLabels.mq5. Bu ölçümler birbirleriyle karşılaştırılabilir. Ekranların hızını karşılaştırma hakkında daha fazla ayrıntı için lütfen Canvas vs Labels bağlantısına bakın.
//+------------------------------------------------------------------+ //|ChartDisplayDemo.mq5 | //|Telif Hakkı 2021, © Cyberdev | //| https://www.mql5.com/en/users/cyberdev/seller | //+------------------------------------------------------------------+ #property copyright "Telif Hakkı 2021, © Cyberdev." #property link "https://www.mql5.com/en/users/cyberdev/seller" #property version "1.00" //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ #include "cyberdev\ChartDisplay.mqh" //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ enum OutType { otCanvas, // Tuval otLabels // Etiketler }; //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ input OutType outType = otLabels; // outType - görüntüleme türü input int nLines = 50; // nLines - ekrandaki satır sayısı input bool optimizeUpdate = false; // optimiseUpdate - Etiketler için optimizasyon input int bWidth = 406; // bWidth - ekran genişliği input int lY_Dist = 14; // lY_Dist - çizgiler arasındaki mesafe input bool back = false; // arka - Etiketler için arka plan //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ Strings * display; CChart Chart; //+------------------------------------------------------------------+ //| Uzman başlatma işlevi| //+------------------------------------------------------------------+ int OnInit() { Chart.Attach(ChartID()); Chart.ShowGrid(false); Chart.ColorBackground(C'194,231,197'); Chart.ColorBarUp(clrDodgerBlue); Chart.ColorBarDown(clrBlueViolet); Chart.ColorCandleBull(clrDodgerBlue); Chart.ColorCandleBear(clrBlueViolet); Chart.ColorForeground(clrBlack); switch (outType) { case otCanvas: display = new CanvasDisplay(); break; case otLabels: display = new LabelsDisplay(); break; default: return INIT_FAILED; } if ((outType == otLabels && back && !dynamic_cast<LabelsDisplay *>(display).createExt(nLines, 10, 10, bWidth, lY_Dist)) || !display.create(nLines, 10, 15, bWidth, lY_Dist)) return INIT_FAILED; return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Uzman başlangıçtan kaldırma işlevi| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { if (CheckPointer(display) == POINTER_DYNAMIC) delete display; Chart.Detach(); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ #define concatenate(_rate) \ ("Open: " + DoubleToString(rates[_rate].open, digits) + \ "; High: " + DoubleToString(rates[_rate].high, digits) + \ "; Low: " + DoubleToString(rates[_rate].low, digits) + \ "; Close: " + DoubleToString(rates[_rate].close, digits) + ".") //+------------------------------------------------------------------+ //| Uzman tik fonksiyonu| //+------------------------------------------------------------------+ void OnTick() { MqlRates rates[]; int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS); static datetime time = 0; datetime cTime; static bool firstRun = true; bool triggered = false; if (CopyRates(NULL, PERIOD_CURRENT, 0, 2, rates) != 2) return; display.setText(concatenate(1)); cTime = rates[0].time; if (cTime != time) { if (!firstRun) { display.push(); display.setText(concatenate(0)); } time = cTime; firstRun = false; triggered = true; } if(outType == otLabels && optimizeUpdate) { if (triggered) display.update(); else dynamic_cast<LabelsDisplay *>(display).updateOne(); } else display.update(); } //+------------------------------------------------------------------+
Üst satırı güncellemek için, kullandığınız sınıfın setText yöntemini çağırmanız gerekir. Metni aşağıdaki satıra kaydırmak için, kullanılan sınıfın push yöntemi çağrılır. Ve eklenen/güncellenen metni ekranda görüntülemek için sınıflardan herhangi birinin update metodunu kullanın. Bu yönteme ek olarak, LabelsDisplay sınıfının ekranı 2 kattan fazla hızlandırabilen ek bir updateOne yöntemi vardır . Yalnızca üst satırın güncellenmesi gerektiğinde çağrılır. Push yöntemi çağrıldıysa, bundan sonra updateOne yerine update yöntemini çağırmalısınız .
Girdi parametreleri
- outType - görüntüleme türü
- nLines - ekrandaki satır sayısı
- optimiseUpdate - Etiketler içinoptimize edin
- bWidth - ekranın genişliği
- lY_Dist - çizgiler arasındaki mesafe
- back - Etiketler için arka plan
outType ile Canvas veya Labels değerleri arasından görüntüleme türünü seçebilirsiniz. nLines değişikliği, push yöntemi tarafından kaydırıldıktan sonra kaydedilecek satır sayısını ayarlar. optimiseUpdate parametresi, push yöntemi çağrılmamışsa ve bu nedenle satırların geri kalanının güncellenmesi gerekmiyorsa, yalnızca bir satırın ekonomik olarak güncellenmesini sağlar (yukarıya bakın). bWidth ile ekranın genişliğini ayarlayabilirsiniz (arka plan kullanan Canvas ve Etiketler için geçerlidir). lY_Dist parametresiyle istediğiniz yazı tipi boyutunu elde edebilirsiniz. Yazı tipi boyutu, fDec katsayısı tarafından ayarlanan kısmın çıkarıldığı lY_Dist 'ten alınır, bu da satırlar arasındaki mesafeyi hesaba katmadan yazı tipi boyutunu değil gerçek satır yüksekliğini değiştirmeye izin verir. Arka parametresi Etiketler modunda arka planı etkinleştirir.
Böylece grafikteki bilgileri 5 farklı modda görüntülemek mümkündür.
- Tuval
- Etiketler
- Optimize edilmiş metinçıktısına sahip etiketler
- Tuval arka planlı etiketler
- Arka plan, artı, optimizasyonile etiketler
outType: Labels modunda bir arka plan kullanmak, diğer ek grafik nesnelerini kullanmakla yaklaşık aynı yükü verir. Yani, ekrana metin çıktısı vermek için gereken süreyi biraz artırır.
MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal kod: https://www.mql5.com/ru/code/33898

Tester'da çoklu çalıştırma/optimizasyon.

Polinomu 4 derece olan hareketli bir doğru inşa eder. Sinüzoidal ve eksenelini ekstrapole eder. Oluşturulan çizgiler her çubukta bir değeri kaldırır ve yeniden çizilmeyen ekstrapole edilmiş değerlerin kayan bir çizgisi oluşturulur.

CDialog sınıfına dayalı panel. Mevcut sembol üzerinde çalışın. Bir grup pozisyon üzerinde silme, Kar Al ayarı, Başabaş ayarı

Standart gösterge iCHO (Chaikin Osilatörü, CHO) ve özel gösterge 'CCIDualOnMA'ya dayalı strateji