Pull Back Strategy
Pull Back Strategy
gr0 = 'Pullback'
pbStep = input(5, 'Backstep of Pullback', group=gr0)
gr4 = 'Styling'
showPattern = input(true, 'Show Pattern Name', group=gr4)
textCol = input.color(color.white, 'Text Color', group=gr4)
bullText = input.string('Buy', 'Buy Signal', inline='ul', group=gr4)
bullCol = input.color(color.green, '', '', 'ul', gr4)
bearText = input('Sell', 'Sell Signal', '', 'ms', gr4)
bearCol = input.color(color.red, '', '', 'ms', gr4)
fLabel(x, y)=>
labelStyle = y==high? label.style_label_down : label.style_label_up
labelCol = y==high? bearCol : bullCol
labelText = y==high? bearText : bullText
//labelText = showPattern? labelText_ + pn : labelText_
if x
label.new(bar_index, y, labelText, style=labelStyle,
color=labelCol, size=size.small, textcolor=textCol)
fLabel(buySignal , low )
fLabel(sellSignal, high)
//-------------------------------------------------------------------------
-----
//Settings
//-------------------------------------------------------------------------
----{
h = input.float(8.,'Bandwidth', minval = 0)
mult = input.float(3., minval = 0)
src = input(close, 'Source')
//Style
upCss = input.color(color.teal, 'Colors', inline = 'inline1', group =
'Style')
dnCss = input.color(color.red, '', inline = 'inline1', group = 'Style')
//-------------------------------------------------------------------------
----}
//Functions
//-------------------------------------------------------------------------
----{
//Gaussian window
gauss(x, h) => math.exp(-(math.pow(x, 2)/(h * h * 2)))
//-------------------------------------------------------------------------
----}
//Append lines
//-------------------------------------------------------------------------
----{
n = bar_index
var ln = array.new_line(0)
//-------------------------------------------------------------------------
----}
//End point method
//-------------------------------------------------------------------------
----{
var coefs = array.new_float(0)
var den = 0.
den := coefs.sum()
out = 0.
if not repaint
for i = 0 to 499
out += src[i] * coefs.get(i)
out /= den
mae = ta.sma(math.abs(src - out), 499) * mult
//-------------------------------------------------------------------------
----}
//Compute and display NWE
//-------------------------------------------------------------------------
----{
float y2 = na
float y1 = na
nwe = array.new<float>(0)
if barstate.islast and repaint
sae = 0.
//Compute and set NWE point
for i = 0 to math.min(499,n - 1)
sum = 0.
sumw = 0.
//Compute weighted mean
for j = 0 to math.min(499,n - 1)
w = gauss(i - j, h)
sum += src[j] * w
sumw += w
y2 := sum / sumw
sae += math.abs(src[i] - y2)
nwe.push(y2)
y1 := nwe.get(i)
//-------------------------------------------------------------------------
----}
//Dashboard
//-------------------------------------------------------------------------
----{
var tb = table.new(position.top_right, 1, 1
, bgcolor = #1e222d
, border_color = #373a46
, border_width = 1
, frame_color = #373a46
, frame_width = 1)
if repaint
tb.cell(0, 0, 'Repainting Mode Enabled', text_color = color.white,
text_size = size.small)
//-------------------------------------------------------------------------
----}
//Plot
//-------------------------------------------------------------------------
----}
plot(repaint ? na : out + mae, 'Upper', upCss)
plot(repaint ? na : out - mae, 'Lower', dnCss)
//Crossing Arrows
plotshape(ta.crossunder(close, out - mae) ? low : na, "Crossunder",
shape.labelup, location.absolute, color(na), 0 , text = '▲', textcolor =
upCss, size = size.tiny)
plotshape(ta.crossover(close, out + mae) ? high : na, "Crossover",
shape.labeldown, location.absolute, color(na), 0 , text = '▼', textcolor =
dnCss, size = size.tiny)
//-------------------------------------------------------------------------
----}