//+------------------------------------------------------------------+ //| Tickwatcher.mq4 | //| mladen | //+------------------------------------------------------------------+ #property copyright "mladen" #property link "mladenrakic@msn.com" #property indicator_separate_window #property indicator_buffers 0 #property indicator_minimum 0 #property indicator_maximum 1 //-------------------------------- // // // // extern string _ = "pairs and timeframes"; extern string pairs = "EURUSD;EURJPY;GBPUSD;GBPJPY;USDCHF;USDCAD;USDJPY"; extern string timeFrames = "M1;M5;M15;M30;H1;H4;D1;W1;MN"; extern string __ = "levels"; extern double AdxLevel1 = 20.00; extern double AdxLevel2 = 30.00; extern string ___ = "colors"; extern color ColorUp = ForestGreen; extern color ColorNeutral = Gray; extern color ColorDown = OrangeRed; extern color ColorPrice = LimeGreen; extern color ColorLabels = Gray; extern string ____ = "other"; extern bool ShowLegend = true; //--------------------------------- // // // // // int window; int totalPairs; int totalTimeFrames; int totalLabels; int aTimes[]; string aPairs[]; string sTimes[]; // // // // // color adx_color; color sar_color; color aos_color; string adx_arrow; string sar_arrow; string aos_arrow; string labelNames; string shortName; int corner; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { corner = 0; shortName = MakeUniqueName("TW ",""); labelNames = shortName; IndicatorShortName(shortName); // // // // // pairs = StringUpperCase(StringTrimLeft(StringTrimRight(pairs))); if (StringSubstr(pairs,StringLen(pairs),1) != ";") pairs = StringConcatenate(pairs,";"); // // // // // bool isMini = IsMini(); int s = 0; int i = StringFind(pairs,";",s); string current; while (i > 0) { current = StringSubstr(pairs,s,i-s); if (isMini) current = StringConcatenate(current,"m"); if (iClose(current,0,0) > 0) { ArrayResize(aPairs,ArraySize(aPairs)+1); aPairs[ArraySize(aPairs)-1] = current; } s = i + 1; i = StringFind(pairs,";",s); } // // // // // timeFrames = StringUpperCase(StringTrimLeft(StringTrimRight(timeFrames))); if (StringSubstr(timeFrames,StringLen(timeFrames),1) != ";") timeFrames = StringConcatenate(timeFrames,";"); // // // // // s = 0; i = StringFind(timeFrames,";",s); int time; while (i > 0) { current = StringSubstr(timeFrames,s,i-s); time = stringToTimeFrame(current); if (time > 0) { ArrayResize(sTimes,ArraySize(sTimes)+1); ArrayResize(aTimes,ArraySize(aTimes)+1); sTimes[ArraySize(sTimes)-1] = TimeFrameToString(time); aTimes[ArraySize(aTimes)-1] = time; } s = i + 1; i = StringFind(timeFrames,";",s); } // // // // // totalTimeFrames = ArraySize(aTimes); totalPairs = ArraySize(aPairs); totalLabels = 0; return(0); } int deinit() { while (totalLabels>0) { ObjectDelete(StringConcatenate(labelNames,totalLabels)); totalLabels--;} return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int m,n; int i,k; // // // // // window = WindowFind(shortName); totalLabels = 0; for (i=0,m=80; i < totalPairs; i++, m+=140) for (k=0,n=20; k < totalTimeFrames; k++, n+=13) showPair(aPairs[i],aTimes[k],sTimes[k],m,n); if (ShowLegend) DoShowLegend(); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // void DoShowLegend() { corner = 1; setObject(next(),"up" ,30,20,ColorLabels); setObject(next(),"l",11,21,ColorUp ,"Wingdings"); setObject(next(),"weak up" ,30,33,ColorLabels); setObject(next(),"¡",10,34,ColorUp ,"Wingdings"); setObject(next(),"neutral" ,30,46,ColorLabels); setObject(next(),"¡",10,47,ColorNeutral,"Wingdings"); setObject(next(),"weak down",30,59,ColorLabels); setObject(next(),"¡",10,60,ColorDown ,"Wingdings"); setObject(next(),"down" ,30,72,ColorLabels); setObject(next(),"l",11,74,ColorDown ,"Wingdings"); corner = 0; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // void showPair(string pair, int timeFrame, string label, int xdistance, int ydistance) { double price = iClose(pair,0,0); double adx = iADX(pair,timeFrame,14,PRICE_CLOSE,0,0); double dip = iADX(pair,timeFrame,14,PRICE_CLOSE,1,0); double dim = iADX(pair,timeFrame,14,PRICE_CLOSE,2,0); double sarv = iSAR(pair,timeFrame ,0.02,0.2,0); double aosv = iAO(pair,timeFrame,0); double aosp = iAO(pair,timeFrame,1); // // // // // if (ydistance==20) { setObject(next(),pair ,xdistance-1 ,20,ColorLabels,"Arial Bold",12,270); setObject(next(),DoubleToStr(price,MarketInfo(pair,MODE_DIGITS)),xdistance-16, 1,ColorPrice ,"Arial Bold",12); } // // // // // setAdxColorArrow(adx,dip,dim); setSarColorArrow(sarv,price); setAosColorArrow(aosv,aosp); setLabel(label,xdistance ,ydistance,adx,adx_color,adx_arrow); setLabel(" " ,xdistance+79,ydistance," ",sar_color,sar_arrow,false); setLabel(" " ,xdistance+91,ydistance," ",aos_color,aos_arrow,false); } //+------------------------------------------------------------------+ //| Custom functions and procedures | //+------------------------------------------------------------------+ string next() { totalLabels++; return(totalLabels); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // void setAosColorArrow(double first,double second) { if (first==second) { aos_color = ColorNeutral; aos_arrow = "¡"; } if (first > second) { aos_color = ColorUp; if (first < 0) aos_arrow = "¡"; else aos_arrow = "l"; } if (first < second) { aos_color = ColorDown; if (first > 0) aos_arrow = "¡"; else aos_arrow = "l"; } } void setSarColorArrow(double first,double second) { double diff = first-second; if (diff <0) { sar_color = ColorUp; sar_arrow = "l"; } if (diff >0) { sar_color = ColorDown; sar_arrow = "l"; } if (diff==0) { sar_color = ColorNeutral; sar_arrow = "¡"; } } void setAdxColorArrow(double first,double second,double third) { if((first < AdxLevel1) && (first != 0)) { adx_color = ColorNeutral; adx_arrow = "¡";} if (first >=AdxLevel1) if (second > third) { adx_color = ColorUp; if (first < AdxLevel2) adx_arrow = "¡"; else adx_arrow = "l"; } else { adx_color = ColorDown; if (first < AdxLevel2) adx_arrow = "¡"; else adx_arrow = "l"; } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // void setLabel(string text,int x,int y,string value, color theColor, string arrow, bool isADX=true) { int last = 0; if (isADX) {last=67;} if (isADX) setObject(next(),text ,x ,y,ColorLabels); if (isADX) setObject(next(),StringSubstr(value,0,5),x+30 ,y,theColor); setObject(next(),arrow ,x+last,y,theColor,"Wingdings",9); } // // // // // void setObject(string name,string text,int x,int y,color theColor, string font = "Arial",int size=10,int angle=0) { string labelName = StringConcatenate(labelNames,name); // // // // // if (ObjectFind(labelName) == -1) { ObjectCreate(labelName,OBJ_LABEL,window,0,0); ObjectSet(labelName,OBJPROP_CORNER,corner); if (angle != 0) ObjectSet(labelName,OBJPROP_ANGLE,angle); } ObjectSet(labelName,OBJPROP_XDISTANCE,x); ObjectSet(labelName,OBJPROP_YDISTANCE,y); ObjectSetText(labelName,text,size,font,theColor); } //+------------------------------------------------------------------+ //+ + //+------------------------------------------------------------------+ // // // // // int stringToTimeFrame(string tfs) { int tf=0; tfs = StringTrimLeft(StringTrimRight(StringUpperCase(tfs))); if (tfs=="M1" || tfs=="1") tf=PERIOD_M1; if (tfs=="M5" || tfs=="5") tf=PERIOD_M5; if (tfs=="M15"|| tfs=="15") tf=PERIOD_M15; if (tfs=="M30"|| tfs=="30") tf=PERIOD_M30; if (tfs=="H1" || tfs=="60") tf=PERIOD_H1; if (tfs=="H4" || tfs=="240") tf=PERIOD_H4; if (tfs=="D1" || tfs=="1440") tf=PERIOD_D1; if (tfs=="W1" || tfs=="10080") tf=PERIOD_W1; if (tfs=="MN" || tfs=="43200") tf=PERIOD_MN1; return(tf); } string TimeFrameToString(int tf) { string tfs; switch(tf) { case PERIOD_M1: tfs="M1" ; break; case PERIOD_M5: tfs="M5" ; break; case PERIOD_M15: tfs="M15" ; break; case PERIOD_M30: tfs="M30" ; break; case PERIOD_H1: tfs="H1" ; break; case PERIOD_H4: tfs="H4" ; break; case PERIOD_D1: tfs="D1" ; break; case PERIOD_W1: tfs="W1" ; break; case PERIOD_MN1: tfs="MN1"; } return(tfs); } // // // // // string StringUpperCase(string str) { string s = str; int lenght = StringLen(str) - 1; int char; while(lenght >= 0) { char = StringGetChar(s, lenght); // // // // // if((char > 96 && char < 123) || (char > 223 && char < 256)) s = StringSetChar(s, lenght, char - 32); else if(char > -33 && char < 0) s = StringSetChar(s, lenght, char + 224); lenght--; } // // // // // return(s); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // string MakeUniqueName(string first, string rest) { string result = first+(MathRand()%1001)+rest; while (WindowFind(result)> 0) result = first+(MathRand()%1001)+rest; return(result); } bool IsMini() { if (StringFind(Symbol(),"m") > -1) return(true); else return(false); }