#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]); } |