declare upper;
plot filter = MovAvgExponential(close, 12);
plot tunnel_fast = MovAvgExponential(close, 144);
plot tunnel_slow = MovAvgExponential(close, 169);
def basis = (tunnel_slow + tunnel_fast) / 2;
def pip = tickSize();
# 55, 89, 144, 233, and 377
plot high_fib_55 = basis + (pip * 55);
plot low_fib_55 = basis - (pip * 55);
plot high_fib_89 = basis + (pip * 89);
plot low_fib_89 = basis - (pip * 89);
plot high_fib_144 = basis + (pip * 144);
plot low_fib_144 = basis - (pip * 144);
plot high_fib_233 = basis + (pip * 233);
plot low_fib_233 = basis - (pip * 233);
plot high_fib_377 = basis + (pip * 377);
plot low_fib_377 = basis - (pip * 377);
filter.SetDefaultColor(color.plum);
tunnel_fast.SetDefaultColor(color.red);
tunnel_slow.SetDefaultColor(color.red);
high_fib_55.SetDefaultColor(color.light_gray);
low_fib_55.SetDefaultColor(color.light_gray);
high_fib_89.SetDefaultColor(color.light_gray);
low_fib_89.SetDefaultColor(color.light_gray);
high_fib_144.SetDefaultColor(color.light_gray);
low_fib_144.SetDefaultColor(color.light_gray);
high_fib_233.SetDefaultColor(color.light_gray);
low_fib_233.SetDefaultColor(color.light_gray);
high_fib_377.SetDefaultColor(color.light_gray);
low_fib_377.SetDefaultColor(color.light_gray);
plot short = if close[1] > min(tunnel_fast[1], tunnel_slow[1]) and close < min(tunnel_fast, tunnel_slow) then high else double.nan;
plot long = if close[1] < max(tunnel_fast[1], tunnel_slow[1]) and close > max(tunnel_fast, tunnel_slow) then low else double.nan;
short.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
short.setDefaultColor(color.dark_red);
long.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
long.SetDefaultColor(color.Dark_Green);