Fibo SR
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Duyck

//@version=4
study("Fibo SR", overlay = true, resolution = "")
//{
//
//}

// inputs //
//{
trailType        = input("modified", "Trailtype", options = ["modified", "unmodified"])
ATRPeriod        = input(28, "ATR Period")
ATRFactor        = input(5, "ATR Factor")
show_fib_entries = input(true, "Show Fib Entries?")

norm_o = security(tickerid(syminfo.prefix,syminfo.ticker), timeframe.period, open)
norm_h = security(tickerid(syminfo.prefix,syminfo.ticker), timeframe.period, high)
norm_l = security(tickerid(syminfo.prefix,syminfo.ticker), timeframe.period, low)
norm_c = security(tickerid(syminfo.prefix,syminfo.ticker), timeframe.period, close)
//}

//////// FUNCTIONS //////////////
//{
// Wilders ma //
Wild_ma(_src, _malength) =>
    _wild  = 0.0
    _wild := nz(_wild[1]) + (_src - nz(_wild[1])) / _malength

/////////// TRUE RANGE CALCULATIONS /////////////////
HiLo = min(norm_h - norm_l, 1.5 * nz(sma((norm_h - norm_l), ATRPeriod)))

HRef = norm_l<= norm_h[1] ?
 norm_h - norm_c[1] :
 (norm_h - norm_c[1]) - 0.5 * (norm_l- norm_h[1])

LRef = norm_h >= norm_l[1] ?
 norm_c[1] - norm_l:
 (norm_c[1] - norm_l) - 0.5 * (norm_l[1] - norm_h)

trueRange =
 trailType == "modified" ? max(HiLo, HRef, LRef) :
 max(norm_h - norm_l, abs(norm_h - norm_c[1]), abs(norm_l - norm_c[1]))
//}


/////////// TRADE LOGIC ////////////////////////
//{
loss = ATRFactor * Wild_ma(trueRange, ATRPeriod)

Up = norm_c - loss
Dn = norm_c + loss

TrendUp   = Up
TrendDown = Dn
Trend     = 1

TrendUp   := norm_c[1] > TrendUp[1]   ? max(Up, TrendUp[1])   : Up
TrendDown := norm_c[1] < TrendDown[1] ? min(Dn, TrendDown[1]) : Dn

Trend := norm_c > TrendDown[1] ? 1 : norm_c < TrendUp[1]? -1 : nz(Trend[1],1)
trail = Trend == 1? TrendUp : TrendDown

ex = 0.0
ex :=
 crossover(Trend, 0)  ? norm_h :
 crossunder(Trend, 0) ? norm_l :
 Trend == 1  ? max(ex[1], norm_h) :
 Trend == -1 ? min(ex[1], norm_l) : ex[1]
//}

// //////// PLOT TP and SL /////////////


////// FIBONACCI LEVELS ///////////
//{
state = Trend == 1 ? "long" : "short"

fib1Level = 38.2
fib2Level = 50.0
fib3Level = 61.8

f1 = ex + (trail - ex) * fib1Level / 100
f2 = ex + (trail - ex) * fib2Level / 100
f3 = ex + (trail - ex) * fib3Level / 100
l100 = trail + 0

Fib1 = plot(f1,  "Fib 1", style = plot.style_line, color = color.black)
Fib2 = plot(f2,  "Fib 2", style = plot.style_line, color = color.black)
Fib3 = plot(f3,  "Fib 3", style = plot.style_line, color = color.black)
L100 = plot(l100, "l100", style = plot.style_line, color = color.black)

fill(Fib1, Fib2, color = state == "long"? color.green : state == "short"? color.red : na)
fill(Fib2, Fib3, color = state == "long"? color.new(color.green, 70) : state == "short"? color.new(color.red, 70) : na)
fill(Fib3, L100, color = state == "long"? color.new(color.green, 60) : state == "short"? color.new(color.red, 60) : na)

l1 = state[1] == "long" and crossunder(norm_c, f1[1])
l2 = state[1] == "long" and crossunder(norm_c, f2[1])
l3 = state[1] == "long" and crossunder(norm_c, f3[1])
s1 = state[1] == "short" and crossover(norm_c, f1[1])
s2 = state[1] == "short" and crossover(norm_c, f2[1])
s3 = state[1] == "short" and crossover(norm_c, f3[1])

atr = sma(trueRange, 14)

/////////// FIB PLOTS /////////////////.


//}


//////////// FIB ALERTS /////////////////////
//{

//}