indicator('Faytterro Bands', overlay = true, max_lines_count = 500, max_bars_back = 500)
src = input(hlc3, title = 'source')
len = input.int(50, title = 'lenght', maxval = 500)
cr(x, y) =>
z = 0.0
weight = 0.0
for i = 0 to y - 1 by 1
z := z + x[i] * ((y - 1) / 2 + 1 - math.abs(i - (y - 1) / 2))
z
z / ((y + 1) / 2 * (y + 1) / 2)
cr = cr(src, 2 * len - 1)
width = 2
//plot(cr, color= #cf0202, linewidth=width,offset=-len+1)
var dizii = array.new_float(500)
for k = 0 to len - 1 by 1
sum = 0.0
for i = 0 to 2 * len - 2 - k by 1
sum := sum + (len - math.abs(len - 1 - k - i)) * src[i] / (len * len - k * (k + 1) / 2)
sum
array.set(dizii, k, sum)
mult = input.float(2.0, minval = 0.001, maxval = 50, title = 'StdDev')
dev = mult * ta.stdev(src, len)
nmid = ta.wma(src, len)
nupper = nmid + ta.wma(dev,len)
nlower = nmid - ta.wma(dev,len)
//plot(nmid)
//plot(nlower)
//plot(nupper)
upper = cr + cr(dev, 2 * len - 1)
lower = cr - cr(dev, 2 * len - 1)
cu = input.color(color.rgb(255, 137, 137), 'upper band color')
cl = input.color(color.rgb(137, 255, 97), 'lower band color')
plot(lower, color = cl, offset = 1 - len, linewidth = 2, display = display.pane)
plot(upper, color = cu, offset = 1 - len, linewidth = 2, display = display.pane)
dashed = input.bool(false)
transp = input.bool(true)
d = dashed ? 2 : 1
tra = transp ? 1 : 0
// extrapolation
var diz = array.new_float(500)
var lin = array.new_line()
var diz2 = array.new_float(500)
var lin2 = array.new_line(0)
// Extrapolation - dynamic lines that redraw every bar
if bar_index > len
// Önceki çizgileri sil (varsa)
if array.size(lin) > 0
for i = 0 to array.size(lin) - 1
line.delete(array.get(lin, i))
array.clear(lin)
if array.size(lin2) > 0
for i = 0 to array.size(lin2) - 1
line.delete(array.get(lin2, i))
array.clear(lin2)
// Yeni extrapolation hesapla
for k = 0 to len - 1 by 1
sum = 0.0
dv = 0.0
for i = 0 to 2 * len - 2 - k by 1
sum := sum + (len - math.abs(len - 1 - k - i)) * src[i] / (len * len - k * (k + 1) / 2)
dv := dv + (len - math.abs(len - 1 - k - i)) * dev[i] / (len * len - k * (k + 1) / 2)
array.set(diz, k, sum + dv)
array.set(diz2, k, sum - dv)
// Yeni çizgileri oluştur
for i = 0 to len / d - 2 by 1
l1 = line.new(
bar_index + i * d + 1 - len, array.get(diz, i * d),
bar_index + i * d + 2 - len, array.get(diz, i * d + 1),
width = width,
color = color.new(cu, tra * i * 95 / (len / d - 1))
)
array.push(lin, l1)
l2 = line.new(
bar_index + i * d + 1 - len, array.get(diz2, i * d),
bar_index + i * d + 2 - len, array.get(diz2, i * d + 1),
width = width,
color = color.new(cl, tra * i * 95 / (len / d - 1))
)
array.push(lin2, l2)
plot(array.get(diz, len - 1), color = color.new(cu, 100))
plot(array.get(diz2, len - 1), color = color.new(cl, 100))
//plot(array.get(dizii, len - 1), color = color.new(cl, 10))
alertcondition(ta.crossover(close, array.get(diz, len - 1)) or ta.crossunder(close, array.get(diz2, len - 1)), title = 'faytterro bands alert', message = 'warning! this is an early warning alert, not a buy or sell signal. Remember that the indicator repaints to a limited extent on the last bars.')