#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
//--- ayrı bir gösterge penceresinde üç yatay seviye görüntüle
#property indicator_level1 20
#property indicator_level2 50
#property indicator_level3 80
//--- yatay seviyelerin kalınlığını ayarla
#property indicator_levelwidth 5
//--- yatay seviyelerin rengini ayarla
#property indicator_levelcolor clrAliceBlue
//--- yatay seviyelerin stilini ayarla
#property indicator_levelstyle STYLE_DOT
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- yatay seviyelerin açıklamalarını ayarla
IndicatorSetString(INDICATOR_LEVELTEXT,0,"İlk seviye (0 indisli)");
IndicatorSetString(INDICATOR_LEVELTEXT,1,"İkinci seviye (1 indisli)");
IndicatorSetString(INDICATOR_LEVELTEXT,2,"Üçüncü seviye (2 indisli)");
//--- gösterge için kısa isim ayarla
IndicatorSetString(INDICATOR_SHORTNAME,"IndicatorSetInteger() Demo");
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 tick_counter=0;
//--- tikleri hesapla
tick_counter++;
//--- ve tik sayacına göre yatay seviyeleri ayarla
ChangeLevelColor(0,tick_counter,3,6,10); // Son üç renk parametresi açılır
ChangeLevelColor(1,tick_counter,3,6,8);
ChangeLevelColor(2,tick_counter,4,7,9);
//--- yatay seviyelerin stilini değiştir
ChangeLevelStyle(0,tick_counter);
ChangeLevelStyle(1,tick_counter+5);
ChangeLevelStyle(2,tick_counter+15);
//--- kalınlığı, tik sayısının 5'e bölümünden kalan şeklinde al
int width=tick_counter%5;
//--- tüm yatay seviyelerde tekrarla ve kalınlığı ayarla
for(int l=0;l<3;l++)
IndicatorSetInteger(INDICATOR_LEVELWIDTH,l,width+1);
//--- bir sonraki çağrı için prev_calculated değerine dönüş yap
return(rates_total);
}
//+------------------------------------------------------------------+
//| Ayrı gösterge penceresindeki yatay çizginin rengini ayarla |
//+------------------------------------------------------------------+
void ChangeLevelColor(int level, // yatay çizginin numarası
int tick_number,// bölüm, bölmenin kalanını alacak değer
int f_trigger, // renk değişimi için ilk bölen
int s_trigger, // renk değişimi için ikinci bölen
int t_trigger) // renk değişimi için üçüncü bölen
{
static color colors[3]={clrRed,clrBlue,clrGreen};
//--- colors[] dizisinden renk indisi
int index=-1;
//--- yatay çizginin boyanması için colors[] dizisindeki renk numarasını hesapla
if(tick_number%f_trigger==0)
index=0; // eğer tick_number, f_trigger ile kalansız bölünüyorsa
if(tick_number%s_trigger==0)
index=1; // eğer tick_number, s_trigger ile kalansız bölünüyorsa
if(tick_number%t_trigger==0)
index=2; // eğer tick_number, t_trigger ile kalansız bölünüyorsa
//--- renk tanımlanmışsa ayarla
if(index!=-1)
IndicatorSetInteger(INDICATOR_LEVELCOLOR,level,colors[index]);
//---
}
//+------------------------------------------------------------------+
//| Ayrı gösterge penceresindeki yatay çizginin stilini ayarla |
//+------------------------------------------------------------------+
void ChangeLevelStyle(int level, // yatay çizginin numarası
int tick_number// bölümün kalanını almak için sayı
)
{
//--- stillerin yükleneceği dizi
static ENUM_LINE_STYLE styles[5]=
{STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//--- styles[] dizisinden, stil indisi
int index=-1;
//--- yatay çizginin stilini ayarlamak için, styles[] dizisinden sayıyı hesapla
if(tick_number%50==0)
index=5; // tick_number, 50 ile kalansız bölünüyorsa, stil STYLE_DASHDOTDOT olur
if(tick_number%40==0)
index=4; // ... stil STYLE_DASHDOT olur
if(tick_number%30==0)
index=3; // ... STYLE_DOT
if(tick_number%20==0)
index=2; // ... STYLE_DASH
if(tick_number%10==0)
index=1; // ... STYLE_SOLID
//--- eğer stil tanımlanmışsa ayarla
if(index!=-1)
IndicatorSetInteger(INDICATOR_LEVELSTYLE,level,styles[index]);
}
|