#property indicator_separate_window #property indicator_minimum 0 #property indicator_maximum 100 //--- display three horizontal levels in a separate indicator window #property indicator_level1 20 #property indicator_level2 50 #property indicator_level3 80 //--- set thickness of horizontal levels #property indicator_levelwidth 5 //--- set color of horizontal levels #property indicator_levelcolor clrAliceBlue //--- set style of horizontal levels #property indicator_levelstyle STYLE_DOT //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- set descriptions of horizontal levels IndicatorSetString(INDICATOR_LEVELTEXT,0,"First Level (index 0)"); IndicatorSetString(INDICATOR_LEVELTEXT,1,"Second Level (index 1)"); IndicatorSetString(INDICATOR_LEVELTEXT,2,"Third Level (index 2)"); //--- set the short name for indicator 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; //--- calculate ticks tick_counter++; //--- and calculate colors of horizontal levels depending on the tick counter ChangeLevelColor(0,tick_counter,3,6,10); // three last parameters are switching the color ChangeLevelColor(1,tick_counter,3,6,8); ChangeLevelColor(2,tick_counter,4,7,9); //--- modify style of horizontal levels ChangeLevelStyle(0,tick_counter); ChangeLevelStyle(1,tick_counter+5); ChangeLevelStyle(2,tick_counter+15); //--- get width as the remainder of integer division of the ticks number by 5 int width=tick_counter%5; //--- iterate over all horizontal levels and set thickness for(int l=0;l<3;l++) IndicatorSetInteger(INDICATOR_LEVELWIDTH,l,width+1); //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //| Set color of horizontal line in the separate indicator window | //+------------------------------------------------------------------+ void ChangeLevelColor(int level, // number of horizontal line int tick_number,// dividend, number to get the remainder of division int f_trigger, // first divisor of color switching int s_trigger, // second divisor of color switching int t_trigger) // third divisor of color switching { static color colors[3]={clrRed,clrBlue,clrGreen}; //--- index of color from the colors[] array int index=-1; //--- calculate the number of color from the colors[] array to paint horizontal line if(tick_number%f_trigger==0) index=0; // if tick_number is divided by f_trigger without the remainder if(tick_number%s_trigger==0) index=1; // if tick_number is divided by s_trigger without the remainder if(tick_number%t_trigger==0) index=2; // if tick_number is divided by t_trigger without the remainder //--- if color is defined, set it if(index!=-1) IndicatorSetInteger(INDICATOR_LEVELCOLOR,level,colors[index]); //--- } //+------------------------------------------------------------------+ //| Set style of horizontal line in the separate indicator window | //+------------------------------------------------------------------+ void ChangeLevelStyle(int level, // number of horizontal line int tick_number// number to get the remainder of division ) { //--- array to store styles static ENUM_LINE_STYLE styles[5]= {STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT}; //--- index of style from the styles[] array int index=-1; //--- calculate the number from the styles[] array to set style of horizontal line if(tick_number%50==0) index=5; // if tick_number is divided by 50 without the remainder, then style is STYLE_DASHDOTDOT if(tick_number%40==0) index=4; // ... style is STYLE_DASHDOT 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 //--- if style is defined, set it if(index!=-1) IndicatorSetInteger(INDICATOR_LEVELSTYLE,level,styles[index]); } |