HeikenAshiCount

Author: Daniel Frieling
HeikenAshiCount
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
HeikenAshiCount
//+------------------------------------------------------------------+
//|                                                  Daniel Frieling |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Daniel Frieling"
#property link      "http://meinMetatrader.de"

#property indicator_separate_window
#property indicator_buffers 3

#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_color3 White
#property indicator_width1 4
#property indicator_width2 4
#property indicator_width3 4

#property indicator_levelcolor White
#property indicator_level1 9
#property indicator_level2 -9
#property indicator_levelwidth 1

/*#property indicator_maximum 30
#property indicator_minimum -1*/

extern string HaIndicatorName = "Heiken_Ashi";

double GreenHAs[], RedHAs[];
bool StopNow = false;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   IndicatorBuffers(2);
  //---- 2 allocated indicator buffers
   SetIndexBuffer(0, GreenHAs);
   SetIndexBuffer(1, RedHAs);
  //---- drawing parameters setting
   SetIndexStyle(0, DRAW_HISTOGRAM);
   SetIndexStyle(1, DRAW_HISTOGRAM);
   /*SetIndexStyle(0, DRAW_LINE);
   SetIndexStyle(1, DRAW_LINE);*/
  //---- 0 value will not be displayed
   SetIndexEmptyValue(0, 0.0);
   SetIndexEmptyValue(1, 0.0);
  //---- displaying in DataWindow
   SetIndexLabel(0, "Green HeikenAshi Candles");
   SetIndexLabel(1, "Red HeikenAshi Candles");
   
   double haOpen = iCustom(Symbol(), Period(), HaIndicatorName, 2, 0);
   
   if(haOpen <= 0)
   {
      Alert("Please install the Heiken Ashi Indicator and set the fileName in inputs.");
      StopNow = true;
   }
   else
      StopNow = false;
    
//---- initialization done
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{

   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   if(!IsNewBar() || StopNow)
      return;

   int limit;
   int counted_bars = IndicatorCounted();
   
 //check for possible errors
   if(counted_bars<0)
      return(-1);
   
 //the last counted bar will be recounted
   if(counted_bars>0)
      counted_bars--;
   
   limit = Bars - counted_bars;
   
  //---- main loop
   //for(int i=0; i < limit; i++)
   for(int i = limit-1; i >= 0; i--)
   //for(int i = 4; i >= 0; i--)
   {
      int prevDir = GetBarsHaDirForShift(i+1, Period());
      
      if(prevDir == OP_BUY)
      {
         GreenHAs[i] = GreenHAs[i+1]+1;
         
         RedHAs[i] = 0;
      }
      else if(prevDir == OP_SELL)
      {
         RedHAs[i] = RedHAs[i+1]-1;
         GreenHAs[i] = 0;
      }
   }
   
   return(0);
}

bool IsNewBar()
{
   static datetime lastBar = 0;
   datetime curBar = Time[0];
   
   if(lastBar != curBar)
   {
      lastBar = curBar;
      
      return(true);
   }
   else
   {
      return(false);
   }
}  

int GetBarsHaDirForShift(int shift, int period)
{
   if(period == -1)
      period = Period();
      
   int dir = -1;
   
   double haOpen = iCustom(Symbol(), period, HaIndicatorName, 2, shift);
   double haClose = iCustom(Symbol(), period, HaIndicatorName, 3, shift);
   
   if(haOpen < haClose)
      dir = OP_BUY;
   else if(haOpen > haClose)
      dir = OP_SELL;
      
   return(dir);
}

//+------------------------------------------------------------------+

Comments