@SleppyZ, I have one more request. Can you modify the code to turn the lines on and off? Thanks again for your help.
Input show_lines now added
Ruby:# Swing High and Swing Low # tomsk # 11.18.2019 # As requested by chillc15 I have modified [USER=1174]@RobertPayne[/USER] 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 show_lines = no; 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 !show_lines or 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 !show_lines or 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 !show_lines or 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 !show_lines or 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 !show_lines or 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 !show_lines or 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 !show_lines or 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 !show_lines or 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 !show_lines or 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 !show_lines or 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 !show_lines or 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 !show_lines or 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 !show_lines or 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 !show_lines or 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 !show_lines or 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 !show_lines or 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 !show_lines or 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 !show_lines or 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 !show_lines or 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 !show_lines or 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); def maxhl = if highPointOneBarNumber == Max(highPointOneBarNumber, lowPointOneBarNumber) then 1 else 0; input limit_developing_arrow_plot = yes; input show_completed_arrows = no; plot HighArrow = if limit_developing_arrow_plot and maxhl == 1 and bn == highPointOneBarNumber then Double.NaN else if show_completed_arrows and swingHigh then high else Double.NaN; HighArrow.SetLineWeight(5); HighArrow.SetDefaultColor(Color.RED); HighArrow.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN); plot LowArrow = if limit_developing_arrow_plot and maxhl == 0 and bn == lowPointOneBarNumber then Double.NaN else if show_completed_arrows and swingLow then low else Double.NaN; LowArrow.SetLineWeight(5); LowArrow.SetDefaultColor(Color.GREEN); LowArrow.SetPaintingStrategy(PaintingStrategy.ARROW_UP); input limit_developing_bubble_plot = no; input show_completed_bubbles = no; AddChartBubble( if limit_developing_bubble_plot and maxhl == 1 and bn == highPointOneBarNumber then Double.NaN else if show_completed_bubbles then bn == highPointOneBarNumber else Double.NaN, high1, if high1 > high2 then "HH" else "LH", if high1 > high2 then Color.GREEN else Color.RED); AddChartBubble(if limit_developing_bubble_plot and maxhl == 0 and bn == lowPointOneBarNumber then Double.NaN else if show_completed_bubbles then bn == lowPointOneBarNumber else Double.NaN, low1, if low1 > low2 then "HL" else "LL", if low1 > low2 then Color.GREEN else Color.RED, no); # End Swing High and Swing Low #Test to view last high/low swings input test = no; plot Highdot = if bn == highPointOneBarNumber then swingHigh else Double.NaN; Highdot.SetLineWeight(5); Highdot.SetDefaultColor(Color.RED); Highdot.SetPaintingStrategy(PaintingStrategy.BOOLEAN_POINTS); Highdot.SetHiding(!test); plot Lowdot = if bn == lowPointOneBarNumber then swingLow else Double.NaN; Lowdot.SetLineWeight(5); Lowdot.SetDefaultColor(Color.GREEN); Lowdot.SetPaintingStrategy(PaintingStrategy.BOOLEAN_POINTS); Lowdot.SetHiding(!test); input show_bubbles_HHLL = no; def swinghigh1 = if swingHigh then high else swinghigh1[1]; def swinghigh2 = if swinghigh1 != swinghigh1[1] then swinghigh1[1] else swinghigh2[1]; #addlabel(1,swinghigh1[1]+" "+swinghigh2[1]); AddChartBubble(if show_bubbles_HHLL and swinghigh1 > swinghigh2 then swingHigh else Double.NaN, high, "HH", Color.GREEN); def swinglow1 = if swingLow then low else swinglow1[1]; def swinglow2 = if swinglow1 != swinglow1[1] then swinglow1[1] else swinglow2[1]; #addlabel(1,swinglow1[1]+" "+swinglow2[1]); AddChartBubble(if show_bubbles_HHLL and swinglow1 < swinglow2 then swingLow else Double.NaN, low, "LL", Color.RED, no); input show_swing_Prices = yes; plot swinghigh_price = if show_swing_Prices and swingHigh then high else Double.NaN; swinghigh_price.SetPaintingStrategy(PaintingStrategy.VALUES_ABOVE); swinghigh_price.SetDefaultColor(Color.CYAN); plot swinglow_price = if show_swing_Prices and swingLow then low else Double.NaN; swinglow_price.SetPaintingStrategy(PaintingStrategy.VALUES_BELOW); swinglow_price.SetDefaultColor(Color.LIGHT_RED);