#property strict #property indicator_chart_window #define VERSION "201.003" #property version VERSION #property copyright "Ovo © 2009-2016, ver. " VERSION #property link "http://ovo.cz/" #property description "Indicator plots a 2-colour dynamic grid at round number levels." //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ enum LineType { None = 0, // None Two = 2, // 500 Four = 4, // 250 500 750 Five = 5, // 200 400 600 800 Eight = 8, // 125 250 .. 750 875 Ten=10 // 100 200 .. 800 900 }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ enum YesNoType { TYPE_YES =1, // Yes TYPE_NO = 0 // No }; YesNoType SHOW_FINE_GRID=TYPE_YES; // Secondary lines count //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ enum DistanceEnum { D_5=5,// 05 - 050 pixels D_10 = 10, // 10 - 100 pixels D_20 = 20, // 20 - 200 pixels D_30 = 30, // 30 - 300 pixels D_40 = 40, // 40 - 400 pixels D_50 = 50 // 50 - 500 pixels }; input DistanceEnum minDistance=D_20; // Lines density input LineType SEC_LEVELS=Five; // Secondary lines definition input YesNoType reverseColour=TYPE_NO; // Reverse line colours input YesNoType DISPLAY_IN_BACKGROUND=TYPE_YES; // Hide price labels color MAIN_LINE_COLOR; color FINE_COLOR; int LINE_STYLE=STYLE_DOT; #define INDI_PREFIX "SHG_" double high= 0.0; double low = 0.0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { if(SEC_LEVELS0; linePoint+=pointStep) { if(linePointlow) { maxlines--; double linePrice= linePoint; string lineName = INDI_PREFIX+DoubleToStr(linePrice,Digits); if(ObjectCreate(lineName,OBJ_HLINE,0,0,linePrice)) { ObjectSet(lineName,OBJPROP_COLOR,FINE_COLOR); ObjectSet(lineName,OBJPROP_STYLE,LINE_STYLE); ObjectSet(lineName,OBJPROP_BACK,TYPE_YES); ObjectSetString(0,lineName,OBJPROP_TOOLTIP,DoubleToStr(linePrice,pricePrecision)); ObjectSetInteger(0,lineName,OBJPROP_SELECTABLE,false); ObjectSetInteger(0,lineName,OBJPROP_HIDDEN,true); } } } } pointStep=factor; maxlines=1000; // protecting the thread resources for(double linePoint=lowGridPoint; linePoint<=highGridPoint && maxlines>0; linePoint+=pointStep) { if(linePointlow) { maxlines--; double linePrice= linePoint; string lineName = INDI_PREFIX+DoubleToStr(linePrice,Digits); ObjectCreate(lineName,OBJ_HLINE,0,0,linePrice); ObjectSet(lineName,OBJPROP_COLOR,MAIN_LINE_COLOR); ObjectSet(lineName,OBJPROP_STYLE,LINE_STYLE); ObjectSet(lineName,OBJPROP_BACK,DISPLAY_IN_BACKGROUND); ObjectSetString(0,lineName,OBJPROP_TOOLTIP,DoubleToStr(linePrice,pricePrecision)); ObjectSetText(lineName,DoubleToStr(linePrice,pricePrecision)); ObjectSetInteger(0,lineName,OBJPROP_SELECTABLE,false); } } ChartRedraw(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void deleteLines() { int counter=ObjectsTotal()-1; for(int i=counter; i>=0; i --) { if(StringFind(ObjectName(i),INDI_PREFIX)>=0) ObjectDelete(ObjectName(i)); } } //+------------------------------------------------------------------+