//+------------------------------------------------------------------+ //| ATR_Chart_Daily.mq4 | //| Copyright © 2008, Robert Hill | //| | //| Display the Average True Range on a separate window for | //| the past 2 periods | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, Robert Hill" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 DodgerBlue //---- input parameters extern int AtrPeriod=14; extern string to="---Text Object Settings---"; extern int Text_X_Offset = 20; extern int CommentTxtSize = 10; extern color CommentColor = White; //---- buffers double AtrBuffer[]; double TempBuffer[]; int Comment1Y, Comment2Y; string Comment1Label, Comment2Label; string Object_ID = "ATRS_"; string short_name; int IndWindow = -1; double myPoint; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- 1 additional buffer used for counting. IndicatorBuffers(2); //---- indicator line SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,AtrBuffer); SetIndexBuffer(1,TempBuffer); //---- name for DataWindow and indicator subwindow label short_name="ATR("+AtrPeriod+")"; IndicatorShortName(short_name); SetIndexLabel(0,short_name); //---- SetIndexDrawBegin(0,AtrPeriod); DeleteBadLabels(); DeleteExistingLabels(); SetupLabels(); myPoint = SetPoint(Symbol()); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- ClearLabels(); DeleteExistingLabels(); //---- return(0); } //+------------------------------------------------------------------+ //| Average True Range | //+------------------------------------------------------------------+ int start() { int i,counted_bars=IndicatorCounted(); //---- if(Bars<=AtrPeriod) return(0); if (IndWindow < 0) IndWindow = WindowFind(short_name); if (Comment1Y < 10) { SetupLabels(); ClearLabels(); DeleteExistingLabels(); SetupLabels();// Make sure label settings are OK } else { ClearLabels(); } //---- initial zero if(counted_bars<1) for(i=1;i<=AtrPeriod;i++) AtrBuffer[Bars-i]=0.0; //---- i=Bars-counted_bars-1; while(i>=0) { double high=High[i]; double low =Low[i]; if(i==Bars-1) TempBuffer[i]=high-low; else { double prevclose=Close[i+1]; TempBuffer[i]=MathMax(high,prevclose)-MathMin(low,prevclose); } i--; } //---- if(counted_bars>0) counted_bars--; int limit=Bars-counted_bars; for(i=0; i 0) { for (int i = objLabels; i >= 0;i--) { objName = ObjectName(i); if (StringFind(objName,Object_ID, 0) >= 0) { // Found 2 Play object, now check for wrong Symbol if (StringFind(objName,Symbol(), 0) < 0) { ObjectDelete(objName); } } } } } void DeleteExistingLabels() { int objLabels = ObjectsTotal(OBJ_LABEL); string objName; if (objLabels > 0) { for (int i = objLabels; i >= 0;i--) { objName = ObjectName(i); if (StringFind(objName,Object_ID, 0) >= 0) { // Found 2 Play object, now check for Symbol if (StringFind(objName,Symbol(), 0) >= 0) { ObjectDelete(objName); } } } } } void SetupLabels() { Comment1Y = 12; Comment2Y = Comment1Y + CommentTxtSize + 4; Comment1Label = Object_ID + Symbol() + "_Comment1"; Comment2Label = Object_ID + Symbol() + "_Comment2"; } void OutputLabelToChart(string LabelName, int LabelY, int LabelTxtSize, color LabelColor, string LabelStr) { if(ObjectFind(LabelName) != 0) { ObjectCreate(LabelName, OBJ_LABEL, IndWindow, 0, 0); ObjectSet(LabelName, OBJPROP_CORNER, 0); ObjectSet(LabelName, OBJPROP_XDISTANCE, Text_X_Offset); ObjectSet(LabelName, OBJPROP_YDISTANCE, LabelY); } ObjectSetText(LabelName, LabelStr, LabelTxtSize, "Arial Bold", LabelColor); } void OutputComment1ToChart(string mComment) { OutputLabelToChart(Comment1Label, Comment1Y, CommentTxtSize, CommentColor, mComment); } void OutputComment2ToChart(string mComment) { OutputLabelToChart(Comment2Label, Comment2Y, CommentTxtSize, CommentColor, mComment); } //+------------------------------------------------------------------+