Doji_Hunter

Author: Copyright � 2010, Investors Haven
0 Views
0 Downloads
0 Favorites
Doji_Hunter
//+------------------------------------------------------------------+
//|                                                      Doji Hunter |
//|                                Copyright © 2010, Investors Haven |
//|                                    http://www.InvestorsHaven.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Investors Haven"
#property link      "http://www.InvestorsHaven.com"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 NULL
#property indicator_width1 0

extern int       RangeOfBars = 3;
extern bool      ShowCandleBox=true; //false to hide the candle box
extern color     BoxColor=MistyRose; //add your fav color 
extern bool      UseECNExecution = true; // Whether or not to set SL when creating the order.


//---- input parameters for regular doji
extern bool         FindRegularDoji=true; //false to disable
extern double       MinLengthOfUpTail=0.1; //candle with upper tail equal or more than this will show up
extern double       MinLengthOfLoTail=0.1; //candle with lower tail equal or more than this will show up
extern double       MaxLengthOfBody=0.2; //candle with body less or equal with this will show up
     
//---- input parameters for dragonfly doji
extern bool         FindDragonflyDoji=true; //false to disable
extern double       MaxLengthOfUpTail1=0; //candle with upper tail equal or more than this will show up
extern double       MinLengthOfLoTail1=0.1; //candle with lower tail equal or more than this will show up
extern double       MaxLengthOfBody1=0.2; //candle with body less or equal with this will show up

//---- input parameters for gravestone doji
extern bool         FindGravestoneDoji=true; //false to disable
extern double       MinLengthOfUpTail2=0.1; //candle with upper tail equal or more than this will show up
extern double       MaxLengthOfLoTail2=0; //candle with lower tail equal or more than this will show up
extern double       MaxLengthOfBody2=0.2; //candle with body less or equal with this will show up

//---- initialization for variables
int counter1=1, counter2=1, counter3=1;
double                        PipPoints = 0.0;
double dis=0;

//---- buffers                               
double Doji[];                         

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
  
   if (Digits < 4)
   {
      PipPoints = 0.01;
   }
   else 
   {
      PipPoints = 0.0001;
   }  
   
   if(UseECNExecution) 
   {
      switch (Period())
      {
         case 1:
         {
            dis=10*PipPoints;
            break;
         }
         case 5:
         {
            dis=15*PipPoints;
            break;
         }
         case 15:
         {
            dis=25*PipPoints;
            break;
         }
         case 30:
         {
            dis=35*PipPoints;
            break;
         }
         case 60:
         {
            dis=45*PipPoints;
            break;
         }
         case 240:
         {
            dis=75*PipPoints;
            break;
         }
         case 1440:
         {
            dis=175*PipPoints;
            break;
         }
         case 10080:
         {
            dis=230*PipPoints;
            break;
         }
         case 43200:
         {
            dis=350*PipPoints;
            break;
         }
      }
   }
   else 
   {
      switch (Period())
      {
         case 1:
         {
            dis=20*PipPoints;
            break;
         }
         case 5:
         {
            dis=30*PipPoints;
            break;
         }
         case 15:
         {
            dis=50*PipPoints;
            break;
         }
         case 30:
         {
            dis=75*PipPoints;
            break;
         }
         case 60:
         {
            dis=90*PipPoints;
            break;
         }
         case 240:
         {
            dis=150*PipPoints;
            break;
         }
         case 1440:
         {
            dis=350*PipPoints;
            break;
         }
         case 10080:
         {
            dis=460*PipPoints;
            break;
         }
         case 43200:
         {
            dis=700*PipPoints;
            break;
         }
      }
  }
  
   SetIndexBuffer(0,Doji);  
  return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- delete all object 
   // ObjectsDeleteAll(0, OBJ_RECTANGLE);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int i, counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   
   if (counter1 > 1 || counter2 > 1 || counter3 > 1)
   {
      ObjectsDeleteAll(0, OBJ_RECTANGLE);
      counter1 = 0;
      counter2 = 0;
      counter3 = 0;
   }
   
      for(i=1;i<=RangeOfBars;i++)            
      {                                    
         Doji[RangeOfBars-i]=0;         
      }
        
      for(i=RangeOfBars; i>0; i--)
      {

       if(FindRegularDoji)
         {
          if(High[i]-Close[i]>=MinLengthOfUpTail*PipPoints && Close[i]-Low[i]>=MinLengthOfLoTail*PipPoints  && MathAbs(Close[i]-Open[i])<=MaxLengthOfBody*PipPoints) 
            {
               Doji[i] = 1;
             if(ShowCandleBox) 
               {
                if(ObjectFind("box 1"+counter1)==-1)
                  {
                   ObjectCreate("box 1"+counter1, OBJ_RECTANGLE, 0, Time[i+1], High[i]+(MathMin(Open[i], Close[i])-Low[i])/2, Time[i-1], Low[i]-(MathMin(Open[i], Close[i])-Low[i])/2);
                   ObjectSet("box 1"+counter1, OBJPROP_COLOR, BoxColor);
                  }
               } 

              counter1++;
            }
         } 
       if(FindDragonflyDoji)
         {
            Doji[i] = 1;
          if(High[i]-Close[i]<=MaxLengthOfUpTail1*PipPoints && Close[i]-Low[i]>=MinLengthOfLoTail1*PipPoints  && MathAbs(Close[i]-Open[i])<=MaxLengthOfBody1*PipPoints)
            {
             counter2++;
             if(ShowCandleBox) 
               {
                if(ObjectFind("box 2"+counter2)==-1)
                  {
                   ObjectCreate("box 2"+counter2, OBJ_RECTANGLE, 0, Time[i+1], High[i]+(MathMin(Open[i], Close[i])-Low[i])/2, Time[i-1], Low[i]-(MathMin(Open[i], Close[i])-Low[i])/2);
                   ObjectSet("box 2"+counter2, OBJPROP_COLOR, BoxColor);
                  }
               } 
             }
         } 
       if(FindGravestoneDoji)
         {
            Doji[i] = 1;
          if(High[i]-Close[i]>=MinLengthOfUpTail2*PipPoints && Close[i]-Low[i]<=MaxLengthOfLoTail2*PipPoints  && MathAbs(Close[i]-Open[i])<=MaxLengthOfBody2*PipPoints)
            {
             counter3++;
             if(ShowCandleBox) 
               {
                if(ObjectFind("box 3"+counter3)==-1)
                  {
                   ObjectCreate("box 3"+counter3, OBJ_RECTANGLE, 0, Time[i+1], High[i]+(MathMin(Open[i], Close[i])-Low[i])/2, Time[i-1], Low[i]-(High[i]-MathMax(Open[i], Close[i]))/2);
                   ObjectSet("box 3"+counter3, OBJPROP_COLOR, BoxColor);
                  }
               } 
            }
         } 
      } 
          
   return(0);
  } //end of file 
//+------------------------------------------------------------------+

Comments