Order Bloc Finder
Order Bloc Finder
tip1 = "Indicator to help identify instituational Order Blocks (OB). OBs often
signal the beginning of a strong move. There is a high probability that OB price
levels will be revisited in the future and are interesting levels to place limit
orders. Bullish Order block is the last down candle before a sequence of up
candles. Bearish Order Block is the last up candle before a sequence of down
candles."
tip2 = "!Experimental!\nFind Order Blocks from different timeframes. Channels
prices are accurate, but arrow position is not. Most useful when selecting a
timeframe higher than the chart."
tip3 = "Required number of subsequent candles in the same direction to identify
Order Block"
tip4 = "Measured from from potential OB close to close of first candle in sequence"
dummy = input(true,"Hover over ( ! ) for documentation", tooltip = tip1)
colors = input("LIGHT","Color Scheme", options=["DARK", "LIGHT"])
//res = input("","Order Block Timeframe",input.resolution,tooltip=tip2)
periods = input(7, "Relevant Periods to identify OB",tooltip=tip3) //
Required number of subsequent candles in the same direction to identify Order Block
threshold = input(0.0, "Min. Percent move for valid OB", step = 0.1,
tooltip=tip4) // Required minimum % move (from potential OB close to last
subsequent candle to identify Order Block)
bull_channels = input(2, "Number of Bullish Channels to show") // Num
of channels
bear_channels = input(2, "Number of Bearish Channels to show") // Num
of channels
//Data Curation
res = ""
[copen,chigh,clow,cclose] = security(syminfo.tickerid,res,
[open,high,low,close],barmerge.gaps_on, barmerge.lookahead_off)
ob_period = periods + 1 //
Identify location of relevant Order Block candle
absmove = ((abs(cclose[ob_period] - cclose[1]))/cclose[ob_period]) * 100 //
Calculate absolute percent move from potential OB to last candle of subsequent
candles
relmove = absmove >= threshold //
Identify "Relevant move" by comparing the absolute move to the threshold
// Color Scheme
bullcolor = colors == "DARK"? color.white : color.green
bearcolor = colors == "DARK"? color.blue : color.red
int upcandles = 0
for i = 1 to periods
upcandles := upcandles + (cclose[i] > copen[i]? 1 : 0) //
Determine color of subsequent candles (must all be green to identify a valid
Bearish OB)
OB_bull = bullishOB and (upcandles == (periods)) and relmove //
Identification logic (red OB candle & subsequent green candles)
OB_bull_chigh = OB_bull? chigh[ob_period] : na //
Determine OB upper limit (Open or High depending on input)
OB_bull_clow = OB_bull? clow[ob_period] : na //
Determine OB clower limit (Low)
OB_bull_avg = (OB_bull_chigh + OB_bull_clow)/2 //
Determine OB middle line
int downcandles = 0
for i = 1 to periods
downcandles := downcandles + (cclose[i] < copen[i]? 1 : 0) //
Determine color of subsequent candles (must all be red to identify a valid Bearish
OB)
// Plotting
plotshape(OB_bull, title="Bullish OB", style = shape.triangleup, color =
bullcolor, textcolor = bullcolor, size = size.tiny, location = location.belowbar,
offset = -ob_period, text = "Bull") // Bullish OB Indicator
bull1 = plot(OB_bull_chigh, title="Bullish OB High", style = plot.style_linebr,
color = bullcolor, offset = -ob_period, linewidth = 2)
// Bullish OB Upper Limit
bull2 = plot(OB_bull_clow, title="Bullish OB Low", style = plot.style_linebr,
color = bullcolor, offset = -ob_period, linewidth = 2)
// Bullish OB Lower Limit
fill(bull1, bull2, color=bullcolor, transp = 50, title = "Bullish OB fill")
// Fill Bullish OB
plotshape(OB_bull_avg, title="Bullish OB Average", style = shape.cross, color =
bullcolor, size = size.small, location = location.absolute, offset = -ob_period)
// Bullish OB Average
sync = time_close(res)