Tickwatcher





//+------------------------------------------------------------------+
//|                                                  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);
           }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:


Indicators Used:

Movement directional index
Parabolic Stop and Reverse system
Bill Williams Awesome oscillator


Custom Indicators Used:

Order Management characteristics:

Other Features: