DRAW_LINE

DRAW_LINE stili, gösterge tamponunun değerlerine göre, belirtilen renkte bir çizgi çizer. Çizgilerin genişlikleri, stilleri ve renkleri, derleyici direktifleri ile veya dinamik olarak PlotIndexSetInteger() fonksiyonunu kullanarak ayarlanabilir. Çizim özelliklerinin dinamik olarak değiştirilmesi, göstergelerin "canlılaştırılmasını" sağlar, bu şekilde göstergelerin görünümleri mevcut duruma göre değişir.

DRAW_LINE stilinin çizimi için gereken tampon sayısı 1'dir.

Çubukların Close (kapanış) fiyatlarını kullanarak çizgi çizen bir gösterge örneği. Çizgi rengi, kalınlığı ve stili her N=5 tikte bir rassal olarak değişir.

DRAW_LINE stiline bir örnek

DRAW_LINE stiline sahip plot1 için, özelliklerin başlangıçta #property derleyici direktifi kullanılarak belirlendiğini; sonrasında ise üç özelliğin, OnCalculate() fonksiyonu içinde önceden hazırlanmış bir listeden rassal olarak ayarlandığını lütfen not ediniz. N parametresi, el ile yapılandırma olasılığı göz önüne alınarak, göstergenin dışsal parametreleri içinde ayarlanır (göstergenin özellikler penceresindeki Veriler sekmesi).

//+------------------------------------------------------------------+
//|                                                    DRAW_LINE.mq5 |
//|                         Copyright 2000-2024, MetaQuotes Ltd. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#property description "DRAW_LINE stilini betimleyen bir gösterge"
#property description "Close (kapanış) değerleri üzerinde, belirtilen renkte bir çizgi çizer"
#property description "Çizgilerin renk, genişlik ve stilleri, her N tikten sonra"
#property description "rassal olarak değiştirilir"
 
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- Çizgi özellikleri, derleyici direktifleri ile ayarlandı
#property indicator_label1  "Line"      // Veri Penceresi için gösterge ismi
#property indicator_type1   DRAW_LINE   // Çizim stili çizgi olarak belirlendi
#property indicator_color1  clrRed      // Çizgi rengi
#property indicator_style1  STYLE_SOLID // Çizgi stili
#property indicator_width1  1           // Çizgi genişliği
//--- giriş parametreleri
input int      N=5;         // Değiştirilecek tik sayısı 
//--- Grafik için bir gösterge tamponu
double         LineBuffer[];
//--- Renkleri depolayacak bir dizi
color colors[]={clrRed,clrBlue,clrGreen};
//--- Çizgi stillerinin depolanması için bir dizi
ENUM_LINE_STYLE styles[]={STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Gösterge tamponunun dizi ile bağlanması
   SetIndexBuffer(0,LineBuffer,INDICATOR_DATA);
//--- Pseudo-rassal sayı oluşturucusunun başlatılması
   MathSrand(GetTickCount());
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   static int ticks=0;
//--- Çizginin stilini,rengini ve genişliğini değiştirmek için tikleri hesapla
   ticks++;
//--- Tikler önemli bir sayıda biriktirilmişse
   if(ticks>=N)
     {
      //--- Çizgi özelliklerini değiştir
      ChangeLineAppearance();
      //--- Tik sayacını sıfırla
      ticks=0;
     }
 
//--- Gösterge değerlerinin hesaplanması için bir blok
   for(int i=0;i<rates_total;i++)
     {
      LineBuffer[i]=close[i];
     }
 
//--- Fonksiyonun sonraki çağrıları için prev_calculated değerine dönüş yap
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Çizilen gösterge çizgisinin görünümünü değiştirir                |
//+------------------------------------------------------------------+
void ChangeLineAppearance()
  {
//--- Çizgi özelliklerine dair bilginin biçimlendirilmesi için bir dizgi
   string comm="";
//--- Çizgi rengini değiştirmek için bir blok
//--- Rassal bir değer al
   int number=MathRand();
//--- Bölen, colors[] dizisinin boyutuna eşit
   int size=ArraySize(colors);
//--- Bölümden kalan tam-sayı değeri şeklinde yeni bir renk seçmek için, indis değerini al
   int color_index=number%size;
//--- Rengi PLOT_LINE_COLOR özelliği şeklinde ayarla
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,colors[color_index]);
//--- Çizgi rengini ayarla
   comm=comm+(string)colors[color_index];
 
//--- Çizgi kalınlığını değiştirmek için bir blok
   number=MathRand();
//--- Tam-sayı bölümden kalan genişliği al
   int width=number%5; // Genişlik 0'dan 4'e ayarlanır
//--- Rengi PLOT_LINE_WIDTH özelliği şeklinde ayarla
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,width);
//--- Çizgi kalınlığını yaz
   comm=comm+", Width="+IntegerToString(width);
 
//--- Çizgi stilini değiştirmek için bir blok
   number=MathRand();
//--- Bölen, syles dizisinin büyüklüğüne eşit
   size=ArraySize(styles);
//--- Yeni bir stil seçmek için, indis değerini, bölümden kalan tam-sayı değeri şeklinde al
   int style_index=number%size;
//--- Rengi PLOT_LINE_COLOR özelliği şeklinde ayarla
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,styles[style_index]);
//--- Çizgi stilini yaz
   comm=EnumToString(styles[style_index])+", "+comm;
//--- Bir yorum kullanarak, çizelge üzerinde bilgi göster
   Comment(comm);
  }