Alım-satım robotlarını ücretsiz olarak nasıl indirebileceğinizi izleyin
Bizi Telegram ü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
Göstergeler

Buffers for each hour (binary) and an hour buffer from 0-23 - for data collection purposes - MetaTrader 5 için gösterge

Görüntülemeler:
48
Derecelendirme:
(5)
Yayınlandı:
MQL5 Freelance Bu koda dayalı bir robota veya göstergeye mi ihtiyacınız var? Freelance üzerinden sipariş edin Freelance'e git

Amaç

Kullanıcılar modelleme için veri toplayabilir. Zaman kuklaları ekonomik modellemede sıklıkla kullanılır. Kolayca genişletilebilen aşağıdaki basit gösterge, her saati ikili bir tampon dizi vektörü olarak sağlar. Son bir tampon dizi vektörü saatin kendisini depolar.

Diğer göstergelerden gelen veriler, örneğin bir CopyBuffer işlevi kullanılarak bir CSV'ye toplanıyorsa, bu gösterge ek veri olarak toplanan saat için kukla sütunlara izin verir.

  • Bu, ML gibi amaçlarla veri toplayanlar için basit bir koddur, böylece modellemede kullanmak için hazır bir kukla değişkene (tamponlar 0 ila 23) veya saat değişkenine (tampon 24) sahip olabilirsiniz.

Kodun içinden geçmek

  • Tampon numarası ve çizim numarası 25 olarak bildirilerek başlatıldı:

#property indicator_chart_window
#property indicator_buffers 25
#property indicator_plots 25

Tampon Etiketleme

  • Veri penceresi için tampon etiketlerini tanımlar:

#property indicator_label1  "Hour 00"
#property indicator_label2  "Hour 01"
#property indicator_label3  "Hour 02"
#property indicator_label4  "Hour 03"
#property indicator_label5  "Hour 04"
#property indicator_label6  "Hour 05"
#property indicator_label7  "Hour 06"
#property indicator_label8  "Hour 07"
#property indicator_label9  "Hour 08"
#property indicator_label10 "Hour 09"
#property indicator_label11 "Hour 10"
#property indicator_label12 "Hour 11"
#property indicator_label13 "Hour 12"
#property indicator_label14 "Hour 13"
#property indicator_label15 "Hour 14"
#property indicator_label16 "Hour 15"
#property  indicator_label17 "Hour 16"
#property  indicator_label18 "Hour 17"
#property  indicator_label19 "Hour 18"
#property  indicator_label20 "Hour 19"
#property  indicator_label21 "Hour 20"
#property  indicator_label22 "Hour 21"
#property  indicator_label23 "Hour 22"
#property  indicator_label24 "Hour 23"
#property  indicator_label25 "Hour"

Tampon Bildirimleri

  • Tamponları ve ayrıca daha sonra hesaplanacak olan günün saati için bir tamsayı değişkenini bildirmek için ilerlendi.

double hourBuffer0[];
double hourBuffer1[];
double hourBuffer2[];
double hourBuffer3[];
double hourBuffer4[];
double hourBuffer5[];
double hourBuffer6[];
double hourBuffer7[];
double hourBuffer8[];
double hourBuffer9[];
double hourBuffer10[];
double hourBuffer11[];
double hourBuffer12[];
double hourBuffer13[];
double hourBuffer14[];
double hourBuffer15[];
double hourBuffer16[];
double hourBuffer17[];
double hourBuffer18[];
double hourBuffer19[];
double hourBuffer20[];
double hourBuffer21[];
double hourBuffer22[];
double hourBuffer23[];
double hourBuffer[];

int bar_hour;

İndeksleme ve Çizim

Tüm tamponlar için indeksi veri olarak ayarlayın ve bir döngü kullanarak çizimi kapatın (indekslemeyi bir döngü ile yapmaya çalışmak, örneğin hourBuffer[q]'yu SetIndexBuffer'dan geçiremeyeceğinize dair bir hata verdi, bu nedenle bunu tek tek yaptım; ancak döngü PlotIndexSetInteger için işe yarıyor gibi görünüyor, yardımcı oluyor).

   // Tamponları dizine atayın, grafikten gizleyin, Veri Penceresinde gösterin
   SetIndexBuffer(0,  hourBuffer0,  INDICATOR_DATA); 
   SetIndexBuffer(1,  hourBuffer1,  INDICATOR_DATA); 
   SetIndexBuffer(2,  hourBuffer2,  INDICATOR_DATA); 
   SetIndexBuffer(3,  hourBuffer3,  INDICATOR_DATA); 
   SetIndexBuffer(4,  hourBuffer4,  INDICATOR_DATA); 
   SetIndexBuffer(5,  hourBuffer5,  INDICATOR_DATA); 
   SetIndexBuffer(6,  hourBuffer6,  INDICATOR_DATA); 
   SetIndexBuffer(7,  hourBuffer7,  INDICATOR_DATA); 
   SetIndexBuffer(8,  hourBuffer8,  INDICATOR_DATA); 
   SetIndexBuffer(9,  hourBuffer9,  INDICATOR_DATA); 
   SetIndexBuffer(10, hourBuffer10, INDICATOR_DATA); 
   SetIndexBuffer(11, hourBuffer11, INDICATOR_DATA); 
   SetIndexBuffer(12, hourBuffer12, INDICATOR_DATA); 
   SetIndexBuffer(13, hourBuffer13, INDICATOR_DATA); 
   SetIndexBuffer(14, hourBuffer14, INDICATOR_DATA); 
   SetIndexBuffer(15, hourBuffer15, INDICATOR_DATA); 
   SetIndexBuffer(16, hourBuffer16, INDICATOR_DATA); 
   SetIndexBuffer(17, hourBuffer17, INDICATOR_DATA); 
   SetIndexBuffer(18, hourBuffer18, INDICATOR_DATA); 
   SetIndexBuffer(19, hourBuffer19, INDICATOR_DATA); 
   SetIndexBuffer(20, hourBuffer20, INDICATOR_DATA); 
   SetIndexBuffer(21, hourBuffer21, INDICATOR_DATA); 
   SetIndexBuffer(22, hourBuffer22, INDICATOR_DATA); 
   SetIndexBuffer(23, hourBuffer23, INDICATOR_DATA);
   SetIndexBuffer(24, hourBuffer, INDICATOR_DATA);

   for(int i = 0; i < 24; i++)
   {
      PlotIndexSetInteger(i, PLOT_DRAW_TYPE, DRAW_NONE);
      PlotIndexSetInteger(i, PLOT_SHOW_DATA, true);
   }

   return(INIT_SUCCEEDED);
}

OnCalculate Fonksiyon Döngüleri ve Programı

  • Sonra OnCalculate fonksiyonuna geçiyoruz:
  • Burada tüm tamponları sıfıra geri ayarlıyoruz ve yalnızca geçerli saate karşılık geleni bire yükseltiyoruz. Burada muhtemelen bir verimlilik kazancı elde edilebilir, ancak daha sonrası için.

    if(rates_total <= 0)
        return(0);

    // İlk işlenmemiş çubuktan itibaren yeniden hesaplayacağız
    int start = (prev_calculated > 0 ? prev_calculated - 1 : 0);

    for(int i = start; i < rates_total; i++)
    {
       // i çubuğu için saati (0..23) hesapla
       bar_hour = (int)((time[i] % 86400) / 3600);
      

       // 1) i çubuğu için TÜM 24 tamponu 0 olarak ayarlayın
       hourBuffer0[i]  = 0.0;
       hourBuffer1[i]  = 0.0;
       hourBuffer2[i]  = 0.0;
       hourBuffer3[i]  = 0.0;
       hourBuffer4[i]  = 0.0;
       hourBuffer5[i]  = 0.0;
       hourBuffer6[i]  = 0.0;
       hourBuffer7[i]  = 0.0;
       hourBuffer8[i]  = 0.0;
       hourBuffer9[i]  = 0.0;
       hourBuffer10[i] = 0.0;
       hourBuffer11[i] = 0.0;
       hourBuffer12[i] = 0.0;
       hourBuffer13[i] = 0.0;
       hourBuffer14[i] = 0.0;
       hourBuffer15[i] = 0.0;
       hourBuffer16[i] = 0.0;
       hourBuffer17[i] = 0.0;
       hourBuffer18[i] = 0.0;
       hourBuffer19[i] = 0.0;
       hourBuffer20[i] = 0.0;
       hourBuffer21[i] = 0.0;
       hourBuffer22[i] = 0.0;
       hourBuffer23[i] = 0.0;
       hourBuffer[i] = EMPTY_VALUE;

       // 2) Şimdi SADECE eşleşen tamponu 1 olarak ayarlayın
       switch (bar_hour)
       {
         case 0:  hourBuffer0[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 1:  hourBuffer1[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 2:  hourBuffer2[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 3:  hourBuffer3[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 4:  hourBuffer4[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 5:  hourBuffer5[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 6:  hourBuffer6[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 7:  hourBuffer7[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 8:  hourBuffer8[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 9:  hourBuffer9[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 10: hourBuffer10[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 11: hourBuffer11[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 12: hourBuffer12[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 13: hourBuffer13[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 14: hourBuffer14[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 15: hourBuffer15[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 16: hourBuffer16[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 17: hourBuffer17[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 18: hourBuffer18[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 19: hourBuffer19[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 20: hourBuffer20[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 21: hourBuffer21[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 22: hourBuffer22[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 23: hourBuffer23[i] = 1.0; hourBuffer[i] = bar_hour; break;
       }
       
      string localHourText = HourToText(bar_hour);
      Comment("The hour is: ", localHourText);
    }

    // İşlenen çubuk sayısını döndür
    return(rates_total);

Yoruma tat katmak için fonksiyon

  • Ve son olarak, bir yorum için bir program:
  • Bu aslında bir hata ayıklama kontrolüdür, ancak yorumlamayı içeride bıraktım.

string HourToText(int bh) {
string TextHour;

switch(bh)
{
   case 0:
      TextHour = "12 am"; // 12 saat biçiminde gece yarısı saati
      break;

   case 1:
      TextHour = "1 am";
      break;

   case 2:
      TextHour = "2 am";
      break;

   case 3:
      TextHour = "3 am";
      break;

   case 4:
      TextHour = "4 am";
      break;

   case 5:
      TextHour = "5 am";
      break;

   case 6:
      TextHour = "6 am";
      break;

   case 7:
      TextHour = "7 am";
      break;

   case 8:
      TextHour = "8 am";
      break;

   case 9:
      TextHour = "9 am";
      break;

   case 10:
      TextHour = "10 am";
      break;

   case 11:
      TextHour = "11 am";
      break;

   case 12:
      TextHour = "12 pm"; // 12 saat formatında öğlen saati
      break;

   case 13:
      TextHour = "1 pm";
      break;

   case 14:
      TextHour = "2 pm";
      break;

   case 15:
      TextHour = "3 pm";
      break;

   case 16:
      TextHour = "4 pm";
      break;

   case 17:
      TextHour = "5 pm";
      break;

   case 18:
      TextHour = "6 pm";
      break;

   case 19:
      TextHour = "7 pm";
      break;

   case 20:
      TextHour = "8 pm";
      break;

   case 21:
      TextHour = "9 pm";
      break;

   case 22:
      TextHour = "10 pm";
      break;

   case 23:
      TextHour = "11 pm";
      break;

   default:
      // Sadece 'bh'nin aralık dışında olması durumunda (0..23)
      TextHour = "Unknown";
      break;
}

return TextHour;

Bunun şu anda yalnızca veri penceresi aracılığıyla görüntülendiğini unutmayın.


Herkese Mutlu Noeller ve 2025 Mutlu Yıllar.

MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
Orijinal kod: https://www.mql5.com/en/code/54446

2 Moving Averages with Bollinger Bands 2 Moving Averages with Bollinger Bands

"Bollinger Bantları ile 2 Hareketli Ortalama", iki yapılandırılabilir hareketli ortalamayı ve isteğe bağlı Bollinger Bantlarını birleştiren özel bir MT5 göstergesidir. İsteğe bağlı uyarılar, ses ve e-posta bildirimleri ile geçişler meydana geldiğinde gerçek zamanlı Alış ve Satış okları oluşturur. Tüm zaman dilimleri ve semboller için uygundur

Camarilla Denklemi Camarilla Denklemi

Mevcut çubuk için Camarilla Denklem seviyesi sistemi.

Camarilla_Full Camarilla_Full

Tüm barlar için Camarilla Denklem seviye sistemi.

JFatlSpeed JFatlSpeed

Minimum gecikmeli trend değişim oranı göstergesi.