Alım-satım 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

Konsol tipi grafik metin çıktısı için optimize edilmiş ekran - MetaTrader 5 için kütüphane

Görüntülemeler:
53
Derecelendirme:
(17)
Yayınlandı:
2025.04.04 10:53
\MQL5\Experts\canvas-vs-labels\demo\cyberdev\ \MQL5\Experts\canvas-vs-labels\demo\ \MQL5\Experts\canvas-vs-labels\measurement\cyberdev\ \MQL5\Experts\canvas-vs-labels\measurement\
MQL5 Freelance 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.

Grafikteki çizim hızı ölçümleri

Grafiğe giriş yöntemi

//+------------------------------------------------------------------+
//|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.

    1. Tuval
    2. Etiketler
    3. Optimize edilmiş metinçıktısına sahip etiketler
    4. Tuval arka planlı etiketler
    5. 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

    MultiTester MultiTester

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

    Pan PrizMA No kaldıraç 72 Pan PrizMA No kaldıraç 72

    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.

    Manuel Pozisyon İzleme Paneli Manuel Pozisyon İzleme Paneli

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

    iCHO Trend CCIDualOnMA Filtresi iCHO Trend CCIDualOnMA Filtresi

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