Backtesting Party: Order Blocks

The code shown in the video can be accessed by members:

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// ยฉ MensaTrader


//@version=5
indicator(shorttitle="TTP OB", title="BB Order Blocks", overlay=true, timeframe="", timeframe_gaps=true)

//Inputs
length      = input.int(20, minval=1, title="Bollinger Band Length", group="=== Bollinger Bands ===", step=5, tooltip="Lengths 20,50,100 & 200 Give interesting levels of confluence")
src         = input(close, title="Band Source", group="=== Bollinger Bands ===")
mult        = input.float(2.0, minval=0.001, maxval=50, title="Band StdDev", group="=== Bollinger Bands ===")

//OB In
lookback    = input.int(100, title="Lookback Length", step=10, group="=== Order Block ===", tooltip="Range from 20-200")


plotBands   = input.bool(false, title="Plot Bollinger Bands", group="=== Plots ===")
plotOb      = input.bool(true, title="Plot OB Levels", group="=== Plots ===")
plotCon     = input.bool(true, title="Plot Solid OB only", group="=== Plots ===")

//Calc Bands
basis       = ta.sma(src, length)
dev         = mult * ta.stdev(src, length)
upper       = basis + dev
lower       = basis - dev
offset      = 0

reachDev    = (mult + 0.1) * ta.stdev(src, length)
upper2      = basis + reachDev
lower2      = basis - reachDev

//Order Blocks
obHigh      = ta.highest(upper, lookback)
obLow       = ta.lowest(lower, lookback)

obHigh2     = ta.highest(upper2, lookback)
obLow2      = ta.lowest(lower2, lookback)


//Plots
//Upper Order Block
o1 = plot(plotOb ? plotCon ? obHigh==obHigh[1]  ? obHigh : na : obHigh :na, title="Order Block High", color=#FF0000, style=plot.style_linebr)
o2 = plot(plotOb ? plotCon ? obHigh==obHigh[1]  ? obHigh2 : na : obHigh2 :na, title="Order Block High 2", color=#FF0000, style=plot.style_linebr)

fill(o1,o2, color=color.new(#FF0000,80), title="Sell Fill")

l3 = plotOb ? plotCon ? obLow==obLow[1]  ? obLow : na : obLow :na
l4 = plotOb ? plotCon ? obLow==obLow[1]  ? obLow2 : na : obLow2 :na

//Lower Order Block
o3 = plot(l3, title="Order Block Low", color=#00E600, style=plot.style_linebr)
o4 = plot(l4, title="Order Block Low 2", color=#00E600, style=plot.style_linebr)

fill(o3,o4, color=color.new(#00E600,80), title="Buy Fill")


//Plot bands
plot(plotBands ? basis : na, "Basis", color=#FF6D00, offset = offset)
p1 = plot(plotBands ? upper : na, "Upper", color=#2962FF, offset = offset)
p2 = plot(plotBands ? lower : na, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))



obCondition = low < l3
rsi = ta.rsi(close, 14)
rsima = ta.sma(rsi,14)
rsiCondition = ta.crossover(rsi, rsima)
whenOB = ta.barssince(obCondition)
buySignal = rsiCondition and  whenOB < 10 
plot(buySignal ? 1 : 0 , "buy")
plotshape(buySignal,"buy",shape.labelup, location.belowbar,color.green, text="b",textcolor = color.white)
plotshape(obCondition,"ob",shape.labeldown, location.abovebar,color.gray, text="ob",textcolor = color.white)

Featured products and TTP memberships