Doji_Reader_1.0

Author: Copyright � 2009, MQL PROGRAMMING
Doji_Reader_1.0
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
Doji_Reader_1.0
//+------------------------------------------------------------------+
//|                                             Doji Reader d 01.mq4 |
//|                               Copyright © 2009,  MQL PROGRAMMING |
//|                                  mailto:mqlprogramming@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009,  MQL PROGRAMMING"
#property link      "mailto:mqlprogramming@gmail.com"

#property indicator_chart_window

extern bool      AnAlert=true;

//---- input parameters for regular doji
extern bool      FindRegularDoji=true;
extern int       MinLengthOfUpTail=3;
extern int       MinLengthOfLoTail=3;

//---- input parameters for dragonfly doji
extern bool      FindDragonflyDoji=true;
extern int       MaxLengthOfUpTail1=0;
extern int       MinLengthOfLoTail1=3;

//---- input parameters for gravestone doji
extern bool      FindGravestoneDoji=true;
extern int       MinLengthOfUpTail2=3;
extern int       MaxLengthOfLoTail2=0;

//---- initialization for variables
int counter1=1, counter2=1, counter3=1, counterA=0, counterB=0, counterC=0, counterX=0,
    counterY=0, counterZ=0, counterH=0, counterI=0, counterJ=0;
string name1="Regular Doji", name2="Dragonfly Doji", name3="Gravestone Doji";
bool sound1=false, sound2=false, sound3=false;
double H=0.0, L=0.0, C=0.0, O=0.0;
datetime T=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- set texts for regular doji's notes 
   ObjectCreate(name1, OBJ_LABEL, 0, 0, 0);
   ObjectSet(name1, OBJPROP_XDISTANCE, 15);
   ObjectSet(name1, OBJPROP_YDISTANCE, 21);
   ObjectSetText(name1, "Candle with red tail is Regular Doji", 9, "Tahoma", Red);
//---- set texts for dragonfly doji's notes 
   ObjectCreate(name2, OBJ_LABEL, 0, 0, 0);
   ObjectSet(name2, OBJPROP_XDISTANCE, 15);
   ObjectSet(name2, OBJPROP_YDISTANCE, 42);
   ObjectSetText(name2, "Candle with blue tail is Dragonfly Doji", 9, "Tahoma", Blue);
//---- set texts for gravestone doji's notes 
   ObjectCreate(name3, OBJ_LABEL, 0, 0, 0);
   ObjectSet(name3, OBJPROP_XDISTANCE, 15);
   ObjectSet(name3, OBJPROP_YDISTANCE, 63);
   ObjectSetText(name3, "Candle with gold tail is Gravestone Doji", 9, "Tahoma", Gold);
 //---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- delete all object 
   ObjectsDeleteAll(0, OBJ_LABEL);
   ObjectsDeleteAll(0, OBJ_TREND);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int i, counted_bars=IndicatorCounted();
//---- check for error
   if(counted_bars<0) return(-1);
//---- scan all bars except current bar for doji
   for(i=Bars-1; i>0; i--)
      {
//---- save bar price into variables
       H=High[i]; L=Low[i]; C=Close[i]; O=Open[i];
//---- save bar open time into variable
       T=Time[i];
//---- find regular doji if desired by user
       if(FindRegularDoji)
         {
//---- if high price minus close price is higher or equal with MinLengthOfUpTail and
//---- close price minus low price is higher or equal with MinLengthOfLoTail and
//---- close price is equal with open price, it is a regular doji  
          if(H-C>=MinLengthOfUpTail*Point && C-L>=MinLengthOfLoTail*Point && C==O) 
            {
//---- than we have to color its tail 
             if(ObjectFind(name1+counter1)==-1) //if tail is not colored yet 
               {
                if(ObjectCreate(name1+counter1, OBJ_TREND, 0, T, H, T, L))
                  {
                   ObjectSet(name1+counter1, OBJPROP_COLOR, Red);
                   ObjectSet(name1+counter1, OBJPROP_WIDTH, 1);
                   ObjectSet(name1+counter1, OBJPROP_RAY, false);
                   counter1++;
                   sound1=true;
                  }
               }
            }
         } 
//---- find dragonfly doji if desired by user
       if(FindDragonflyDoji)
         {
//---- if high price minus close price lower or equal with MaxLengthOfUpTail1 and 
//---- close price minus low price is higher or equal with MinLengthOfLoTail1 and
//---- close price is equal with open price , it is dragonfly doji
          if(H-C<=MaxLengthOfUpTail1*Point && C-L>=MinLengthOfLoTail1*Point && C==O)
            {
//---- than we have to color its tail
             if(ObjectFind(name2+counter2)==-1) //if tail is not colored yet
               {
                if(ObjectCreate(name2+counter2, OBJ_TREND, 0, T, H, T, L))
                  {
                   ObjectSet(name2+counter2, OBJPROP_COLOR, Blue);
                   ObjectSet(name2+counter2, OBJPROP_WIDTH, 1);
                   ObjectSet(name2+counter2, OBJPROP_RAY, false);
                   counter2++;
                   sound2=true;
                  }
               }
            }
         } 
//---- find gravestone doji if desired by user
       if(FindGravestoneDoji)
         {
//---- if high price minus close price higher or equal with MinLengthOfUpTail2 and 
//---- close price minus low price is lower or equal with MaxLengthOfLoTail2 and
//---- close price is equal with open price, it is gravestone doji 
          if(H-C>=MinLengthOfUpTail2*Point && C-L<=MaxLengthOfLoTail2*Point && C==O)
            {
             if(ObjectFind(name3+counter3)==-1) //if tail is not colored yet
               {
                if(ObjectCreate(name3+counter3, OBJ_TREND, 0, T, H, T, L)) 
                  {
                   ObjectSet(name3+counter3, OBJPROP_COLOR, Gold);
                   ObjectSet(name3+counter3, OBJPROP_WIDTH, 1);
                   ObjectSet(name3+counter3, OBJPROP_RAY, false);
                   counter3++;
                   sound3=true;
                  }
               }
            }
         } 
      } 
//---- if  an alert is false, than we discontinued the program
   if(!AnAlert) return(0);
//---- working once per bar 
   if(Volume[0]>1) return(0);
//---- save latest completed bar price into variables 
   H=High[1]; L=Low[1]; C=Close[1]; O=Open[1];
//---- we looking for latest doji and give an alert if we found it 
//---- if find regular doji is true, than we looking for it 
   if(FindRegularDoji)
     {
//---- if high price minus close price is higher or equal with MinLengthOfUpTail and
//---- close price minus low price is higher or equal with MinLengthOfLoTail and
//---- close price is equal with open price, it is a regular doji  
      if(H-C>=MinLengthOfUpTail*Point && C-L>=MinLengthOfLoTail*Point && C==O) 
        { 
//---- than we have to give an alert to user   
         Alert("new regular doji at ",Symbol()," M",Period());
        }
     }
//---- if find deagonfly doji is true, than we looking for it 
   if(FindDragonflyDoji)
     {
//---- if high price minus close price lower or equal with MaxLengthOfUpTail1 and 
//---- close price minus low price is higher or equal with MinLengthOfLoTail1 and
//---- close price is equal with open price , it is dragonfly doji
      if(H-C<=MaxLengthOfUpTail1*Point && C-L>=MinLengthOfLoTail1*Point && C==O)
        {
//---- than we have to give an alert to user 
         Alert("new dragonfly doji at ",Symbol()," M",Period()); 
        }
     }
//---- if find gravestone doji is true, than we looking for it 
   if(FindGravestoneDoji)
     {
//---- if high price minus close price higher or equal with MinLengthOfUpTail2 and 
//---- close price minus low price is lower or equal with MaxLengthOfLoTail2 and
//---- close price is equal with open price, it is gravestone doji 
      if(H-C>=MinLengthOfUpTail2*Point && C-L<=MaxLengthOfLoTail2*Point && C==O)
        {  
//---- than we have to give an alert to user
         Alert("new gravestone doji at ",Symbol()," M",Period());
        }
     }             
   return(0);
  } //end of file 
//+------------------------------------------------------------------+

Comments