//------------------------------------------------------------------
#property copyright "www.forex-tsd.com"
#property link "www.forex-tsd.com"
// original idea fr this indicator by Dan Valcu
//------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 DimGray
#property indicator_color2 PaleVioletRed
#property indicator_width1 1
#property indicator_width2 2
#property indicator_level1 0
//
//
//
//
//
extern bool BetterFormula = false;
extern int SmoothPeriod = 3;
extern int SmoothMethod = MODE_SMA;
extern int SignalPeriod = 3;
extern int SignalMethod = MODE_SMA;
double bhaOpn[];
double bhaClo[];
double haDelta[];
double haSmooth[];
double haSignal[];
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
int init()
{
IndicatorBuffers(5);
SetIndexBuffer(0, haSmooth);
SetIndexBuffer(1, haSignal);
SetIndexBuffer(2, haDelta);
SetIndexBuffer(3, bhaOpn);
SetIndexBuffer(4, bhaClo);
return(0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit = MathMin(Bars-counted_bars,Bars-1);
//
//
//
//
//
for (int i=limit; i >= 0; i--)
{
double prOpen = Open[i];
double prClose = Close[i];
double prLow = Low[i];
double prHigh = High[i];
if (BetterFormula) {
if (prHigh!=prLow)
double haClose = (prOpen+prClose)/2.0+(((prClose-prOpen)/(prHigh-prLow))*MathAbs((prClose-prOpen)/2.0));
else haClose = (prOpen+prClose)/2.0; }
else haClose = (prOpen+prHigh+prLow+prClose)/4;
double haOpen = (bhaOpn[i+1]+bhaClo[i+1])/2.0;
//
//
//
//
//
bhaOpn[i] = haOpen;
bhaClo[i] = haClose;
haDelta[i] = haClose-haOpen;
}
for (i=limit; i >= 0; i--) haSmooth[i] = iMAOnArray(haDelta ,0,SmoothPeriod,0,SmoothMethod,i);
for (i=limit; i >= 0; i--) haSignal[i] = iMAOnArray(haSmooth,0,SignalPeriod,0,SignalMethod,i);
return(0);
}