Magicindicator
Magicindicator
// Source
src = input(defval=close, title="Source")
// Filter Direction
upward = 0.0
upward := filt > filt[1] ? nz(upward[1]) + 1 : filt < filt[1] ? 0 : nz(upward[1])
downward = 0.0
downward := filt < filt[1] ? nz(downward[1]) + 1 : filt > filt[1] ? 0 :
nz(downward[1])
// Target Bands
hband = filt + smrng
lband = filt - smrng
// Break Outs
longCond = bool(na)
shortCond = bool(na)
longCond := src > filt and src > src[1] and upward > 0 or
src > filt and src < src[1] and upward > 0
shortCond := src < filt and src < src[1] and downward > 0 or
src < filt and src > src[1] and downward > 0
CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]
longCondition = longCond and CondIni[1] == -1
shortCondition = shortCond and CondIni[1] == 1
// Impulse + Safezone
source = close
out22 = ta.ema(source, 13)
out3 = ta.ema(source, 26)
plot(out22, color=out22 > out22[1] ? color.green : color.red, linewidth=1,
title='Ema fast', transp=0)
plot(out3, color=color.new(#cc9900, 0), linewidth=1, title='Ema slow')
// Safezone Calculations
lookbackLength = input(99, 'LookBackLength')
coeff = input.float(2, 'CoEff short stop', step=0.25)
countShort = high > high[1] ? 1 : 0
diffShort = high > high[1] ? high - high[1] : 0
totalCountShort = math.sum(countShort, lookbackLength)
totalSumShort = math.sum(diffShort, lookbackLength)
penAvgShort = totalSumShort / totalCountShort
safetyShort = high[1] + penAvgShort[1] * coeff
short_stop = math.min(math.min(safetyShort, safetyShort[1]), safetyShort[2])
count = low < low[1] ? 1 : 0
diff = low < low[1] ? low[1] - low : 0
totalCount = math.sum(count, lookbackLength)
totalSum = math.sum(diff, lookbackLength)
penAvg = totalSum / totalCount
safety = low[1] - penAvg[1] * coeff
long_stop = math.max(math.max(safety, safety[1]), safety[2])
shortvs = 0.0
shortvs := na(shortvs[1]) ? short_stop : close > shortvs[1] ? short_stop :
math.min(short_stop, shortvs[1])
longvs = 0.0
longvs := na(longvs[1]) ? long_stop : close < longvs[1] ? long_stop :
math.max(long_stop, longvs[1])