declare lower;
input Smoother = 5;
input SupResPeriod = 50;
input SupResPercentage = 100;
input PricePeriod = 16;
input ob = 200;
input os = -200;
input showColorBars = no; #COLOR BARS
input showDynamics = no; #Dynamic zones
input showOBOS = yes; #Show OB/OS
def nn = Smoother;
def ys1 = (high + low + close * 2) / 4;
def rk3 = ExpAverage(ys1, nn);
def rk4 = StDev(ys1, nn);
def rk5 = (ys1 - rk3) * 200 / rk4;
def rk6 = ExpAverage(rk5, nn);
def up = ExpAverage(rk6, nn);
def down = ExpAverage(up, nn);
def Oo = If(up < down, up, down);
def Hh = Oo;
def Ll = If(up < down, down, up);
def Cc = Ll;
def Lookback = SupResPeriod;
def PerCent = SupResPercentage;
def Pds = PricePeriod;
def C3 = CCI(length = Pds);
def Osc = C3;
def Value1 = Osc;
def Value2 = Highest(Value1, Lookback);
def Value3 = Lowest(Value1, Lookback);
def Value4 = Value2 - Value3;
def Value5 = Value4 * (PerCent / 100);
def ResistanceLine = Value3 + Value5;
def SupportLine = Value2 - Value5;
#PLOTS
plot pResistanceLine = ResistanceLine;
pResistanceLine.SetHiding(!showDynamics);
plot pSupportLine = SupportLine;
pSupportLine.SetHiding(!showDynamics);
def UpShape = if up > ob and up > down then
high
#highest(up,1) + 20
else if up > ob and up < down then
high#highest(down,1) + 20
else Double.NaN;
def DownShape = if down < os and up > down then
low
#lowest(down,1) - 20
else if down < os and up < down then
low#lowest(up,1) - 20
else Double.NaN;
def sState = if !isNan(UpShape) then 100 else if !isNan(DownShape) then -100 else sState[1];
plot pUP = UpShape;
pUP.SetPaintingStrategy(PaintingStrategy.TRIANGLES);
pUP.SetDefaultColor(Color.CYAN);
pUP.SetLineWeight(1);
plot pDown = DownShape;
pDown.SetPaintingStrategy(PaintingStrategy.TRIANGLES);
pDown.SetDefaultColor(Color.CYAN);
pDown.SetLineWeight(1);
;
input Fill = yes;
def O = open;
def H = high;
def L = low;
def C = close;
#== Up CANDLE
def UpO;
def UpH;
def UpL;
def UpC;
if O <= C
then {
UpO = if Fill then C else O;
UpH = H;
UpL = L;
UpC = if Fill then O else C;
} else {
UpO = Double.NaN;
UpH = Double.NaN;
UpL = Double.NaN;
UpC = Double.NaN;
}
#== Down CANDLE
def DnO;
def DnH;
def DnL;
def DnC;
if O >= C
then {
DnO = if Fill then O else C;
DnH = H;
DnL = L;
DnC = if Fill then C else O;
} else {
DnO = Double.NaN;
DnH = Double.NaN;
DnL = Double.NaN;
DnC = Double.NaN;
}
#== Doji CANDLE
def DUpO;
def DUpH;
def DUpL;
def DUpC;
if O == C
then {
DUpO = O;
DUpH = H;
DUpL = L;
DUpC = C;
} else {
DUpO = Double.NaN;
DUpH = Double.NaN;
DUpL = Double.NaN;
DUpC = Double.NaN;
}
def DDnO;
def DDnH;
def DDnL;
def DDnC;
if O == C
then {
DDnO = O;
DDnH = H;
DDnL = L;
DDnC = C;
} else {
DDnO = Double.NaN;
DDnH = Double.NaN;
DDnL = Double.NaN;
DDnC = Double.NaN;
}
#== Up & Down CANDLE colors
DefineGlobalColor("Up", GetColor(6));
AddChart(high = UpH, low = UpL, open = UpO, close = UpC, type = ChartType.CANDLE, GlobalColor("Up"));
DefineGlobalColor("Down", GetColor(5));
AddChart(high = DnH, low = DnL, open = DnO, close = DnC, type = ChartType.CANDLE, GlobalColor("Down"));
#== Doji CANDLE color
AddChart(high = DUpH, low = DUpL, open = DUpO, close = DUpO, type = ChartType.CANDLE, growColor = Color.WHITE);
AddChart(high = DDnH, low = DDnL, open = DDnO, close = DDnO, type = ChartType.CANDLE, growColor = Color.WHITE);
#== Last Price color
DefineGlobalColor("Last", GetColor(9));
AddChartBubble(IsNaN(C[-1]), text = Round(C, 2), "price location" = C, GlobalColor("Last"));
#== Highest & Lowest of period color
def HA = HighestAll(H);
def LA = LowestAll(L);
DefineGlobalColor("Highest", GetColor(6));
AddChartBubble(H == HA, H, "Hi: " + Round(HA, 2), GlobalColor("Highest"));
DefineGlobalColor("Lowest", GetColor(5));
AddChartBubble(L == LA, L, "Lo: " + Round(LA, 2), GlobalColor("Lowest"), no);