input nFE = 8; input AlertOn = no; input Glength = 13; input betaDev = 8; input data = close; def w = (2 * Double.Pi / Glength); def beta = (1 - Cos(w)) / (Power(1.414, 2.0 / betaDev) - 1 ); def alpha = (-beta + Sqrt(beta * beta + 2 * beta)); def Go = Power(alpha, 4) * open + 4 * (1 – alpha) * Go[1] – 6 * Power( 1 - alpha, 2 ) * Go[2] + 4 * Power( 1 - alpha, 3 ) * Go[3] - Power( 1 - alpha, 4 ) * Go[4]; def Gh = Power(alpha, 4) * high + 4 * (1 – alpha) * Gh[1] – 6 * Power( 1 - alpha, 2 ) * Gh[2] + 4 * Power( 1 - alpha, 3 ) * Gh[3] - Power( 1 - alpha, 4 ) * Gh[4]; def Gl = Power(alpha, 4) * low + 4 * (1 – alpha) * Gl[1] – 6 * Power( 1 - alpha, 2 ) * Gl[2] + 4 * Power( 1 - alpha, 3 ) * Gl[3] - Power( 1 - alpha, 4 ) * Gl[4]; def Gc = Power(alpha, 4) * data + 4 * (1 – alpha) * Gc[1] – 6 * Power( 1 - alpha, 2 ) * Gc[2] + 4 * Power( 1 - alpha, 3 ) * Gc[3] - Power( 1 - alpha, 4 ) * Gc[4]; # Variables: def o; def h; def l; def c; def CU1; def CU2; def CU; def CD1; def CD2; def CD; def L0; def L1; def L2; def L3; # Calculations o = (Go + Gc[1]) / 2; h = Max(Gh, Gc[1]); l = Min(Gl, Gc[1]); c = (o + h + l + Gc) / 4; def gamma = Log(Sum((Max(Gh, Gc[1]) - Min(Gl, Gc[1])), nFE) / (Highest(gh, nFE) - Lowest(Gl, nFE))) / Log(nFE); L0 = (1 – gamma) * Gc + gamma * L0[1]; L1 = -gamma * L0 + L0[1] + gamma * L1[1]; L2 = -gamma * L1 + L1[1] + gamma * L2[1]; L3 = -gamma * L2 + L2[1] + gamma * L3[1]; if L0 >= L1 then { CU1 = L0 - L1; CD1 = 0; } else { CD1 = L1 - L0; CU1 = 0; } if L1 >= L2 then { CU2 = CU1 + L1 - L2; CD2 = CD1; } else { CD2 = CD1 + L2 - L1; CU2 = CU1; } if L2 >= L3 then { CU = CU2 + L2 - L3; CD = CD2; } else { CU = CU2; CD = CD2 + L3 - L2; } def RSI = if CU + CD <> 0 then CU / (CU + CD) else 0; def GREEN = if RSI crosses above .2 and gamma >0.55 then yes else 0; def RED = if RSI crosses below .70 and gamma >0.6 then yes else 0; def alertCount = if GREEN == yes then 1 else 0; plot signal = alertcount; AssignBackgroundColor(if alertCount == 0 then Color.RED else Color.GREEN);