@mini NOTE on this study I turned off the 10 levels(the original was 5 levels and I added 5 more) for support and resistance leaving the colored candles only. Also note that should price take out highs or lows the candles will lose the color and return to normal colors. I like to see the candles confirm and the tmo to be ob(10 or greater or os(-10 or greater).

# Swing High and Swing Low

# tomsk

# 11.18.2019

# As requested by chillc15 I have modified

@RobertPayne code to include SwingHigh

# points which are now plotted in CYAN with the swing high points painted in PINK.

# So now you have both swing high and low on your charts

# +------------------------------------------------------------+

# | Example: How to extend levels to the right of the chart |

# | Robert Payne |

# |

https://funwiththinkscript.com |

# +------------------------------------------------------------+

# SWING LOW

# define swing low points

input length = 10;

def bn = BarNumber();

def lastBar = HighestAll(if IsNaN(close) then 0 else bn);

def offset = Min(length - 1, lastBar - bn);

def swingLow = low < Lowest(low[1], length - 1) and low == GetValue(Lowest(low, length), -offset);

# identify the very last swing low point

def lowPointOneBarNumber = HighestAll(if swingLow then bn else 0);

def lowPointOneValue = if bn == lowPointOneBarNumber then low else lowPointOneValue[1];

plot low1 = if bn < lowPointOneBarNumber then Double.NaN else lowPointOneValue;

low1.SetDefaultColor(Color.LIGHT_RED);

# identify the 2nd to last swing low point

def lowPointTwoBarNumber = HighestAll(if swingLow and bn < lowPointOneBarNumber then bn else 0);

def lowPointTwoValue = if bn == lowPointTwoBarNumber then low else lowPointTwoValue[1];

plot low2 = if bn < lowPointTwoBarNumber then Double.NaN else lowPointTwoValue;

low2.SetDefaultColor(Color.Light_RED);

# just keep doing ths for as many lines as you want to add to the chart

# identify then 3rd to last swingHigh point low

def lowPointThreeBarNumber = HighestAll(if swingLow and bn < lowPointTwoBarNumber then bn else 0);

def lowPointThreeValue = if bn == lowPointThreeBarNumber then low else lowPointThreeValue[1];

plot low3 = if bn < lowPointThreeBarNumber then Double.NaN else lowPointThreeValue;

low3.SetDefaultColor(Color.Light_RED);

# identify then 4th to last swingHigh point low

def lowPointFourBarNumber = HighestAll(if swingLow and bn < lowPointThreeBarNumber then bn else 0);

def lowPointFourValue = if bn == lowPointFourBarNumber then low else lowPointFourValue[1];

plot low4 = if bn < lowPointFourBarNumber then Double.NaN else lowPointFourValue;

low4.SetDefaultColor(Color.Light_RED);

# identify then 5th to last swingHigh point low

def lowPointFiveBarNumber = HighestAll(if swingLow and bn < lowPointFourBarNumber then bn else 0);

def lowPointFiveValue = if bn == lowPointFiveBarNumber then low else lowPointFiveValue[1];

plot low5 = if bn < lowPointFiveBarNumber then Double.NaN else lowPointFiveValue;

low5.SetDefaultColor(Color.Light_RED);

# identify then 6th to last swingHigh point low

def lowPointSixBarNumber = HighestAll(if swingLow and bn < lowPointFiveBarNumber then bn else 0);

def lowPointSixValue = if bn == lowPointSixBarNumber then low else lowPointSixValue[1];

plot low6 = if bn < lowPointSixBarNumber then Double.NaN else lowPointSixValue;

low6.SetDefaultColor(Color.Light_RED);

# identify then 7th to last swingHigh point low

def lowPointSevenBarNumber = HighestAll(if swingLow and bn < lowPointSixBarNumber then bn else 0);

def lowPointSevenValue = if bn == lowPointSevenBarNumber then low else lowPointSevenValue[1];

plot low7 = if bn < lowPointSevenBarNumber then Double.NaN else lowPointSevenValue;

low7.SetDefaultColor(Color.Light_RED);

# identify then 8th to last swingHigh point low

def lowPointEightBarNumber = HighestAll(if swingLow and bn < lowPointSevenBarNumber then bn else 0);

def lowPointEightValue = if bn == lowPointEightBarNumber then low else lowPointEightValue[1];

plot low8 = if bn < lowPointEightBarNumber then Double.NaN else lowPointEightValue;

low8.SetDefaultColor(Color.Light_RED);

# identify then 9th to last swingHigh point low

def lowPointNineBarNumber = HighestAll(if swingLow and bn < lowPointEightBarNumber then bn else 0);

def lowPointNineValue = if bn == lowPointNineBarNumber then low else lowPointNineValue[1];

plot low9 = if bn < lowPointNineBarNumber then Double.NaN else lowPointNineValue;

low9.SetDefaultColor(Color.Light_RED);

# identify then 10th to last swingHigh point low

def lowPointTenBarNumber = HighestAll(if swingLow and bn < lowPointNineBarNumber then bn else 0);

def lowPointTenValue = if bn == lowPointTenBarNumber then low else lowPointTenValue[1];

plot low10 = if bn < lowPointTenBarNumber then Double.NaN else lowPointTenValue;

low10.SetDefaultColor(Color.Light_RED);

# SWING HIGH

# define swing high points

def swingHigh = high > Highest(high[1], length - 1) and high == GetValue(Highest(high, length), -offset);

# identify the very last swing high point

def highPointOneBarNumber = HighestAll(if swingHigh then bn else 0);

def highPointOneValue = if bn == highPointOneBarNumber then high else highPointOneValue[1];

plot high1 = if bn < highPointOneBarNumber then Double.NaN else highPointOneValue;

high1.SetDefaultColor(Color.CYAN);

# identify the 2nd to last swing high point

def highPointTwoBarNumber = HighestAll(if swingHigh and bn < highPointOneBarNumber then bn else 0);

def highPointTwoValue = if bn == highPointTwoBarNumber then high else highPointTwoValue[1];

plot high2 = if bn < highPointTwoBarNumber then Double.NaN else highPointTwoValue;

high2.SetDefaultColor(Color.CYAN);

# just keep doing ths for as many lines as you want to add to the chart

def highPointThreeBarNumber = HighestAll(if swingHigh and bn < highPointTwoBarNumber then bn else 0);

def highPointThreeValue = if bn == highPointThreeBarNumber then high else highPointThreeValue[1];

plot high3 = if bn < highPointThreeBarNumber then Double.NaN else highPointThreeValue;

high3.SetDefaultColor(Color.CYAN);

def highPointFourBarNumber = HighestAll(if swingHigh and bn < highPointThreeBarNumber then bn else 0);

def highPointFourValue = if bn == highPointFourBarNumber then high else highPointFourValue[1];

plot high4 = if bn < highPointFourBarNumber then Double.NaN else highPointFourValue;

high4.SetDefaultColor(Color.CYAN);

def highPointFiveBarNumber = HighestAll(if swingHigh and bn < highPointFourBarNumber then bn else 0);

def highPointFiveValue = if bn == highPointFiveBarNumber then high else highPointFiveValue[1];

plot high5 = if bn < highPointFiveBarNumber then Double.NaN else highPointFiveValue;

high5.SetDefaultColor(Color.CYAN);

def highPointSixBarNumber = HighestAll(if swingHigh and bn < highPointFiveBarNumber then bn else 0);

def highPointSixValue = if bn == highPointSixBarNumber then high else highPointSixValue[1];

plot high6 = if bn < highPointsixBarNumber then Double.NaN else highPointsixValue;

high6.SetDefaultColor(Color.CYAN);

def highPointSevenBarNumber = HighestAll(if swingHigh and bn < highPointSixBarNumber then bn else 0);

def highPointSevenValue = if bn == highPointSevenBarNumber then high else highPointSevenValue[1];

plot high7 = if bn < highPointSevenBarNumber then Double.NaN else highPointSevenValue;

high7.SetDefaultColor(Color.CYAN);

def highPointEightBarNumber = HighestAll(if swingHigh and bn < highPointSevenBarNumber then bn else 0);

def highPointEightValue = if bn == highPointEightBarNumber then high else highPointEightValue[1];

plot high8 = if bn < highPointEightBarNumber then Double.NaN else highPointEightValue;

high4.SetDefaultColor(Color.CYAN);

def highPointNineBarNumber = HighestAll(if swingHigh and bn < highPointEightBarNumber then bn else 0);

def highPointNineValue = if bn == highPointNineBarNumber then high else highPointNineValue[1];

plot high9 = if bn < highPointNineBarNumber then Double.NaN else highPointNineValue;

high4.SetDefaultColor(Color.CYAN);

def highPointTenBarNumber = HighestAll(if swingHigh and bn < highPointNineBarNumber then bn else 0);

def highPointTenValue = if bn == highPointTenBarNumber then high else highPointTenValue[1];

plot high10 = if bn < highPointTenBarNumber then Double.NaN else highPointTenValue;

high4.SetDefaultColor(Color.CYAN);

# ADJUST CANDLE COLORS

# change candle colors just to make it easier to see what we are working with

AssignPriceColor(if swingLow then Color.cyan else if swingHigh then Color.mageNTA else Color.current);

# End Swing High and Swing Low