PinI4Bbar AHA 0[1].1

Author: Copyright ?2006, Hua Ai (aha)
Price Data Components
Series array that contains open time of each bar
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
PinI4Bbar AHA 0[1].1
//+------------------------------------------------------------------+
//|                                               Pinbar AHA 0.1.mq4 |
//|                                    Copyright ?2006, Hua Ai (aha) |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright ?2006, Hua Ai (aha)"
#property link      ""

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Yellow
#property indicator_color2 Yellow
#property indicator_color3 Magenta
#property indicator_color4 Magenta
#property indicator_width1 0.5
#property indicator_width2 0.5
#property indicator_width3 1.0
#property indicator_width4 1.0
//---- input parameters
extern bool      CheckPinBars=true;
extern bool      CheckI4Bars=true;
extern int       Min_Nose_Ratio=60;
extern int       Max_Body_Ratio=40;
//---- buffers
double PPB[]; //Positive Pin Bar
double NPB[]; //Negative Pin Bar
double I4BTop[];
double I4BBottom[];

bool startup;
bool upalert,downalert;
bool timetocheck;
bool timetoverify;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,74);
   SetIndexBuffer(0,NPB);
   SetIndexEmptyValue(0,0.0);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,74);
   SetIndexBuffer(1,PPB);
   SetIndexEmptyValue(1,0.0);
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexArrow(2,249);
   SetIndexBuffer(2,I4BTop);
   SetIndexEmptyValue(2,0.0);
   SetIndexStyle(3,DRAW_ARROW);
   SetIndexArrow(3,249);
   SetIndexBuffer(3,I4BBottom);
   SetIndexEmptyValue(3,0.0);
//----
   startup=true;
   clearmarks(PPB, NPB);

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   startup=false;
   clearmarks(PPB, NPB);
   
//----
   return(0);
  }

// Determine the check time based on the chart period
void CheckTime(bool& check, bool& verify)
{
   switch (Period())
   {
      case PERIOD_M1:
      case PERIOD_M5:
      case PERIOD_M15:
         break;
      case PERIOD_M30:
         if ((Minute()>28 && Seconds()>50) || startup) check=true;
         if ((Minute()<5  && Seconds()<10) || startup) verify=true;
         break;
      case PERIOD_H1:
         //Print("I am in H1!");
         if ((Minute()>58 && Seconds()>50) || startup) check=true;
         if ((Minute()<10 && Seconds()<10) || startup) verify=true;
         //Print("check=", check);
         break;
      case PERIOD_H4:
         if ((MathMod(Hour(),4)==3 && Minute()>58 && Seconds()>50) || startup) check=true;
         if ((MathMod(Hour(),4)==0 && Minute()<10 && Seconds()<10) || startup) verify=true;
         break;
      case PERIOD_D1:
         if ((Hour()==23 && Minute()>58 && Seconds()>50) || startup) check=true;
         if ((Hour()==0  && Minute()<10 && Seconds()<10) || startup) verify=true;
         break;
      case PERIOD_W1:
         if ((DayOfWeek()==5 && Hour()==19 && Minute()>58 && Seconds()>50) || startup) check=true;
         if ((DayOfWeek()==0 && Hour()==20 && Minute()<10 && Seconds()<10) || startup) verify=true;
         break;
      case PERIOD_MN1:
         if ((Day()>=28 && Hour()==23 && Minute()>58 && Seconds()>50) || startup) check=true;
         if ((Day()==0  && Hour()==0  && Minute()<10 && Seconds()<10) || startup) verify=true;
         break;
      default:
         //Print("I am in default!");
         check=false;
         verify=false;
         break;
   }
   
   //Print("check=", check);
   return;
}

double CalRange(int bar_num, bool verify=false)
{
   int counter, n=0;
   double Range, AvgRange; 
   if (verify) n=1;
   AvgRange=0;
   for (counter=bar_num-n; counter<=bar_num+1;counter++)
   {
      AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
   }
   Range=AvgRange/2;
   return(Range);
}

void clearmarks(double& PPB[], double& NPB[])
{
   for (int i=0; i<= Bars-1; i++)
   {
      PPB[i]=0;
      NPB[i]=0;
      I4BTop[i]=0;
      I4BBottom[i]=0;
   }
   return;
}

void CheckNPB(int bar_num, double& NPB[], bool verify=false)
{
   double bar_length, nose_length, body_length, eye_pos;
   bar_length = High[bar_num]-Low[bar_num];
   nose_length = High[bar_num]-MathMax(Open[bar_num], Close[bar_num]);
   body_length = MathAbs(Open[bar_num]-Close[bar_num]);
   //Print("nose_length/bar_length=", nose_length/bar_length);
   //Print("Min_Nose_Ratio/100=", Min_Nose_Ratio/100.0);
   if( nose_length/bar_length > Min_Nose_Ratio/100.0 &&
       body_length/bar_length < Max_Body_Ratio/100.0 )
   {
      NPB[bar_num]=High[bar_num]+0.1*CalRange(bar_num, verify);
      //Print("Got a negative pin!");
   }
   return;
}

void CheckPPB(int bar_num, double& PPB[], bool verify=false)
{
   double bar_length, nose_length, body_length, eye_pos;
   bar_length = High[bar_num]-Low[bar_num];
   nose_length = MathMin(Open[bar_num], Close[bar_num])-Low[bar_num];
   body_length = MathAbs(Open[bar_num]-Close[bar_num]);
   if( nose_length/bar_length > Min_Nose_Ratio/100.0 &&
       body_length/bar_length < Max_Body_Ratio/100.0 )
   {
      PPB[bar_num]=Low[bar_num]-0.1*CalRange(bar_num, verify);
      //Print("Got a positive pin!");
   }
   return;
}

void CheckI4B(int bar_num, double& I4BTop[], double& I4BBottom[], bool verify=false)
{
   int dayintheweek=TimeDayOfWeek(iTime(NULL, 0, bar_num));
   int bar_0, bar_1, bar_2, bar_3;
   double bar_length_0, bar_length_1, bar_length_2, bar_length_3;
   if (Period()==PERIOD_D1)
   {
      switch(dayintheweek)
      {
         case 4:
         case 5:
            bar_0 = bar_num;
            bar_1 = bar_num+1;
            bar_2 = bar_num+2;
            bar_3 = bar_num+3;
            break;
         case 3:
            bar_0 = bar_num;
            bar_1 = bar_num+1;
            bar_2 = bar_num+2;
            bar_3 = bar_num+4;
            break;
         case 2:
            bar_0 = bar_num;
            bar_1 = bar_num+1;
            bar_2 = bar_num+3;
            bar_3 = bar_num+4;
            break;
         case 1:
            bar_0 = bar_num;
            bar_1 = bar_num+2;
            bar_2 = bar_num+3;
            bar_3 = bar_num+4;
            break;
         default:
            bar_0 = bar_num;
            bar_1 = bar_num;
            bar_2 = bar_num;
            bar_3 = bar_num;
            break;
      }
   }
   else
   {
      bar_0 = bar_num;
      bar_1 = bar_num+1;
      bar_2 = bar_num+2;
      bar_3 = bar_num+3;
   }
   bar_length_0 = High[bar_0]-Low[bar_0];
   bar_length_1 = High[bar_1]-Low[bar_1];
   bar_length_2 = High[bar_2]-Low[bar_2];
   bar_length_3 = High[bar_3]-Low[bar_3];
   //Print("nose_length/bar_length=", nose_length/bar_length);
   //Print("Min_Nose_Ratio/100=", Min_Nose_Ratio/100.0);
   if( bar_length_0<bar_length_1 && bar_length_0<bar_length_2 && 
       bar_length_0<bar_length_3 && High[bar_0]<High[bar_1] &&
       Low[bar_0]>Low[bar_1])
   {
      I4BTop[bar_num]=High[bar_num]+0.1*CalRange(bar_num, verify);
      I4BBottom[bar_num]=Low[bar_num]-0.1*CalRange(bar_num, verify);
      //Print("Got a I4B bar!");
      //Print("dayintheweek=", dayintheweek);
   }
   return;
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
//----
   int i;
   bool timetocheck=false;
   bool timetoverify=false;
   
   //Print("dayintheweek=", DayOfWeek());
   CheckTime(timetocheck, timetoverify);
   
   if (startup)
   {
      //Print("I am in startup!");
      for(i=Bars-1; i>=1; i--) 
      {
         if(CheckPinBars)
         {
            CheckPPB(i, PPB, true);
            CheckNPB(i, NPB, true);
         }
         if(CheckI4Bars)
            CheckI4B(i, I4BTop, I4BBottom, true);
      }
   }
   
   if (timetocheck)
   {
      //Print("I am checking!");
      if(CheckPinBars)
      {
         CheckPPB(0, PPB);
         CheckNPB(0, NPB);
      }
      if(CheckI4Bars) 
         CheckI4B(0, I4BTop, I4BBottom);
   }

   if (timetoverify)
   {
      //Print("I am verifying!");
      if(CheckPinBars)
      {
         CheckPPB(1, PPB, true);
         CheckNPB(1, NPB, true);
      }
      if(CheckI4Bars) 
         CheckI4B(1, I4BTop, I4BBottom, true);
   }

   startup=false;

//----
   return(0);
}
//+------------------------------------------------------------------+

Comments