//+------------------------------------------------------------------+ //| Demo_IndicatorSetDouble.mq5 | //| Copyright 2012, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" #property indicator_separate_window //--- set the maximum and minimum values for the indicator window #property indicator_minimum 0 #property indicator_maximum 100 //--- display three horizontal levels in a separate indicator window #property indicator_level1 25 #property indicator_level2 50 #property indicator_level3 75 //--- set thickness of horizontal levels #property indicator_levelwidth 1 //--- 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,"IndicatorSetDouble() Demo"); //--- set color for each level IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,clrBlue); IndicatorSetInteger(INDICATOR_LEVELCOLOR,1,clrGreen); IndicatorSetInteger(INDICATOR_LEVELCOLOR,2,clrRed); //--- 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; static double level1=25,level2=50,level3=75; static double max=100,min=0, shift=100; //--- calculate ticks tick_counter++; //--- turn levels upside down on every 10th tick if(tick_counter%10==0) { //--- invert sign for the level values level1=-level1; level2=-level2; level3=-level3; //--- invert sign for the maximum and minimum values max-=shift; min-=shift; //--- invert the shift value shift=-shift; //--- set new level values IndicatorSetDouble(INDICATOR_LEVELVALUE,0,level1); IndicatorSetDouble(INDICATOR_LEVELVALUE,1,level2); IndicatorSetDouble(INDICATOR_LEVELVALUE,2,level3); //--- set new values of maximum and minimum in the indicator window Print("Set up max = ",max,", min = ",min); IndicatorSetDouble(INDICATOR_MAXIMUM,max); IndicatorSetDouble(INDICATOR_MINIMUM,min); } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+