The Boom Hunter indicator is an advanced tool designed to detect potential entry and exit points in the market using three customized oscillators (EOT). This indicator combines multiple filtering and smoothing techniques to provide precise signals based on price behavior.
Boom Hunter comprises several input parameters that allow users to adjust the indicator’s behavior according to their needs:
squared: Activates or deactivates the use of squared lines.showfib: Displays Fibonacci levels on the chart.lpperiod, k1, k2, esize, ey, trigno): Adjust the properties of each oscillator.The three oscillators (EOT 1, EOT 2, and EOT 3) have specific parameters controlling their calculation period, smoothing factors, and size.
Fibonacci levels are a crucial part of the indicator, providing visual references on the chart that can help identify potential support and resistance zones:
if showfib then
DRAWHLINE(84) coloured(33, 150, 243,50) style(dottedline)
DRAWHLINE(64) coloured(33, 150, 243,50) style(dottedline)
DRAWHLINE(50) coloured(33, 150, 243,50) style(dottedline)
DRAWHLINE(36) coloured(33, 150, 243,50) style(dottedline)
DRAWHLINE(18) coloured(33, 150, 243,50) style(dottedline)
endif
These levels are drawn on the chart if the showfib option is activated.
The indicator uses a highpass filter to remove cyclic components with periods shorter than 100 bars. It then applies a supersmoother filter to smooth the data:
alpha1 = (cos(0.707*2*pi/100)+sin(0.707*2*pi/100)-1)/cos(0.707*2*pi/100)
hp = (1-alpha1/2)*(1-alpha1/2)*(close-2*close[1]+close[2])+2*(1-alpha1)*hp[1]-(1-alpha1)*(1-alpha1)*hp[2]
a1 = exp(-1.414*3.1416/lpperiod)
b1 = 2*a1*cos(1.414*pi/lpperiod)
c2 = b1
c3 = -a1*a1
c1 = 1-c2-c3
filt = c1*(hp+hp[1])/2+c2*filt[1]+c3[filt2]
This algorithm is used to adjust the indicator to market peaks by normalizing the roofing filter:
peak = 0.991*peak[1]
if abs(filt) > peak then
peak = abs(filt)
endif
if peak <> 0 then
x = filt / peak
endif
Quotient1 = (x + k1) / (k1 * x + 1)
Quotient2 = (x + k2) / (k2 * x + 1)
EOT 1 is the most precise of the three oscillators. It uses a highpass filter and a supersmoother filter, then normalizes the data and applies a fast attack and slow decay algorithm to identify market peaks.
Highpass Filter Calculation: The highpass filter removes cyclic components with periods shorter than 100 bars. This is done using the formula:
Supersmoother Filter Calculation: The supersmoother filter smooths the data using the following formula:
a1 = exp(-1.414*3.1416/lpperiod)
b1 = 2*a1*cos(1.414*pi/lpperiod)
c2 = b1
c3 = -a1*a1
c1 = 1-c2-c3
The result of the supersmoother filter is:
filt = c1*(hp+hp[1])/2+c2*filt[1]+c3*filt[2]
Fast Attack and Slow Decay Algorithm:
peak = 0.991*peak[1]
if abs(filt)>peak then
peak=abs(filt)
else
peak=peak
endif
Roofing Filter Normalization:
if peak<>0 then
x=filt/peak
else
x=x
endif
Quotient Calculation:
Quotient1 = (x+k1)/(k1*x+1)
Quotient2 = (x+k2)/(k2*x+1)
EOT 2 is very interesting for analyzing the distance between its two lines. When the lines expand, it indicates a sideways market.
EOT 3 marks extremes, indicating overbought or oversold conditions.
Below is the complete code for the Boom Hunter indicator in ProBuilder language:
//----------------------------------------------------------//
//PRC_Boom Hunter Pro
//version = 0
//22.07.2024
//Iván González @ www.prorealcode.com
//Sharing ProRealTime knowledge
//----------------------------------------------------------//
//-----Inputs-----------------------------------------------//
squared = 1 //Square line
showfib = 1 //show fibonacci
//---EOT 1 Main Oscilator
lpperiod = 6 //Quotient
k1 = 0.00// K1
k2 = 0.3
esize = 60 // Size
ey = 50 //Y axis
trigno = 2 //trigger length
//---EOT 2
lpperiod2 = 27 //
k12 = 0.8
k22 = 0.3
esize2 = 60
ey2 = 50
//---EOT 3
lpperiod3 = 11 //
k13 = 0.99
k33 = k13*(-1)
esize3 = 60
ey3 = 50
if squared then
k13 = 0.9999
k33 = -0.9999
endif
//----------------------------------------------------------//
//-----Fibonacci Levels-------------------------------------//
if showfib then
DRAWHLINE(84) coloured(33, 150, 243,50)style(dottedline)
DRAWHLINE(64) coloured(33, 150, 243,50)style(dottedline)
DRAWHLINE(50) coloured(33, 150, 243,50)style(dottedline)
DRAWHLINE(36) coloured(33, 150, 243,50)style(dottedline)
DRAWHLINE(18) coloured(33, 150, 243,50)style(dottedline)
endif
//----------------------------------------------------------//
pi = 180
//-----EOT 1------------------------------------------------//
if barindex > 2 then
//highpass filter cyclic components
//whose periods are shorter than 100 bars
alpha1 = (cos(0.707*2*pi/100)+sin(0.707*2*pi/100)-1)/cos(0.707*2*pi/100)
hp = (1-alpha1/2)*(1-alpha1/2)*(close-2*close[1]+close[2])+2*(1-alpha1)*hp[1]-(1-alpha1)*(1-alpha1)*hp[2]
//supersmoother filter
a1 = exp(-1.414*3.1416/lpperiod)
b1 = 2*a1*cos(1.414*pi/lpperiod)
c2 = b1
c3 = -a1*a1
c1 = 1-c2-c3
filt = c1*(hp+hp[1])/2+c2*filt[1]+c3*filt[2]
//fast attack-slow decay algorithm
peak = 0.991*peak[1]
if abs(filt)>peak then
peak=abs(filt)
else
peak=peak
endif
//normalizad roffing filter
if peak<>0 then
x=filt/peak
else
x=x
endif
Quotient1 = (x+k1)/(k1*x+1)
Quotient2 = (x+k2)/(k2*x+1)
endif
//----------------------------------------------------------//
//-----EOT 2------------------------------------------------//
IF BARINDEX>2 THEN
alpha1222 = (cos(.707 * 2 * pi / 100) + sin(.707 * 2 * pi / 100) - 1) / cos(.707 * 2 * pi / 100)
HP2 = (1 - alpha1222 / 2) * (1 - alpha1222 / 2) * (close - 2 * close[1] + close[2]) + 2 * (1 - alpha1222) * HP2[1] - (1 - alpha1222) * (1 - alpha1222) * HP2[2]
//----------------------------------------------------------//
//SuperSmoother Filter
a12 = EXP(-1.414 * 3.1416 / LPPeriod2)
b12 = 2 * a12 * cos(1.414 * pi / LPPeriod2)
c22 = b12
c32 = -a12 * a12
c12 = 1 - c22 - c32
Filt2 = c12 * (HP2 + HP2[1]) / 2 + c22 * Filt2[1] + c32 * Filt2[2]
//Fast Attack - Slow Decay Algorithm
Peak2 = .991 * Peak2[1]
if abs(Filt2) > Peak2 then
Peak2 = abs(Filt2)
else
Peak2 = peak2
endif
//Normalized Roofing Filter
if Peak2 <> 0 then
X2 = Filt2 / Peak2
else
X2 = X2
endif
Quotient3 = (X2 + K12) / (K12 * X2 + 1)
Quotient4 = (X2 + K22) / (K22 * X2 + 1)
endif
//----------------------------------------------------------//
//-----EOT 3------------------------------------------------//
if barindex > 2 then
alpha1333 = (cos(.707 * 2 * pi / 100) + sin(.707 * 2 * pi / 100) - 1) / cos(.707 * 2 * pi / 100)
HP3 = (1 - alpha1333 / 3) * (1 - alpha1333 / 2) * (close - 2 * close[1] + close[2]) + 2 * (1 - alpha1333) * HP3[1] - (1 - alpha1333) * (1 - alpha1333) * HP3[2]
//SuperSmoother Filter
a13 = exp(-1.414 * 3.1416 / LPPeriod3)
b13 = 2 * a13 * cos(1.414 * pi / LPPeriod3)
c33 = b13
c333 = -a13 * a13
c13 = 1 - c33 - c333
Filt3 = c13 * (HP3 + HP3[1]) / 2 + c33 * Filt3[1] + c333 * Filt3[2]
//Fast Attack - Slow Decay Algorithm
Peak3 = .991 * Peak3[1]
if abs(Filt3) > Peak3 then
Peak3 = abs(Filt3)
else
Peak3 = peak3
endif
//Normalized Roofing Filter
if Peak3 <> 0 then
X3 = Filt3 / Peak3
else
X3 = peak3
endif
Quotient5 = (X3 + K13) / (K13 * X3 + 1)
Quotient6 = (X3 + K33) / (K33 * X3 + 1)
line1 = -0.9
endif
//----------------------------------------------------------//
//-----Plot EOTs--------------------------------------------//
//---EOT1
q1 = Quotient1 * esize + ey
q2 = Quotient2 * esize + ey
trigger = average[trigno](q1)
//---EOT2
q3 = Quotient3 * esize + ey
q4 = Quotient4 * esize + ey
colorbetween(q3,q4,255,178,105,200)
//---EOT3
q5 = Quotient5 * esize2 + ey2
q6 = Quotient6 * esize2 + ey2
//----------------------------------------------------------//
return q1 as "oscillator"coloured(102,255,255)style(line,2), trigger as "Trigger"coloured(224,224,224)style(line,2),q3 as "Q3"coloured("red",50), q4 as "Q4"coloured("red",50), Q5 as"q5" coloured("YELLOW") , Q6 as "q6" coloured(255,51,153)