#Automatically draw the channel boundaries in dashed lines #Automatically draw the support lines in red solid lines #Automatically draw the resistance lines in green solid lines input length = 10; input showLines = yes; input showValues = no; input showBarNumbers = no; input ExtensionLengthBars = 20; # added to control length of Entension input UpperExtensionPercentLimit = 5; input LowerExtensionPercentLimit = 5; def vHigh = high; def vLow = low; def vOpen = open; def vClose = close; def vVolume = volume; def nan = Double.NaN; def bn = BarNumber(); def currentBar = HighestAll(if !IsNaN(vHigh) then bn else nan); def x_AxisLastExpansionBar = BarNumber() == HighestAll(BarNumber()); def PH; def PL; def hh = fold i = 1 to length + 1 with p = 1 while p do vHigh > getValue(vHigh, -i); PH = if (bn > length and vHigh == highest(vHigh, length) and hh) then vHigh else double.NaN; def ll = fold j = 1 to length + 1 with q = 1 while q do vLow < getValue(low, -j); PL = if (bn > length and vLow == lowest(vLow, length) and ll) then vLow else double.NaN; def PHBar = if !isNaN(PH) then bn else PHBar[1]; def PLBar = if !isNaN(PL) then bn else PLBar[1]; def PHL = if !isNaN(PH) then PH else PHL[1]; def priorPHBar = if PHL != PHL[1] then PHBar[1] else priorPHBar[1]; def PLL = if !isNaN(PL) then PL else PLL[1]; def priorPLBar = if PLL != PLL[1] then PLBar[1] else priorPLBar[1]; def HighPivots = bn >= highestAll(priorPHBar); def LowPivots = bn >= highestAll(priorPLBar); def FirstRpoint = if HighPivots then bn - PHBar else 0; def PriorRpoint = if HighPivots then bn - PriorPHBar else 0; def RSlope = (getvalue(PH, FirstRpoint) - getvalue(PH, PriorRpoint)) / (PHBar - PriorPHBar); def FirstSpoint = if LowPivots then bn - PLBar else 0; def PriorSpoint = if LowPivots then bn - PriorPLBar else 0; def SSlope = (getvalue(PL, FirstSpoint) - getvalue(PL, PriorSpoint)) / (PLBar - PriorPLBar); def RExtend = if bn == highestall(PHBar) then 1 else RExtend[1]; def SExtend = if bn == highestall(PLBar) then 1 else SExtend[1]; plot pivotHigh = if HighPivots then PH else double.NaN; pivotHigh.SetDefaultColor(GetColor(1)); pivotHigh.setPaintingStrategy(PaintingStrategy.VALUES_ABOVE); pivotHigh.setHiding(!showValues); plot pivotHighLine = if PHL > 0 and HighPivots then PHL else double.NaN; pivotHighLine.SetPaintingStrategy(PaintingStrategy.DASHES); pivotHighLine.setDefaultColor(color.uptick); pivotHighLine.setHiding(!showLines); plot RLine = pivotHigh; RLine.enableApproximation(); RLine.SetDefaultColor(Color.LIGHT_GRAY); RLine.SetStyle(Curve.Short_DASH); def calc_ResistanceExtension = if RExtend then (bn - PHBar) * RSlope + PHL else double.NaN; plot line_ResistanceExtension = if bn <= (Currentbar + ExtensionLengthBars) and calc_ResistanceExtension[1] >= (lowestall(vLow) * (1-(lowerExtensionPercentLimit/100))) and calc_ResistanceExtension[1] <= (Highestall(vHigh) * (1 + (upperExtensionPercentLimit/100))) then calc_ResistanceExtension else double.nan; line_ResistanceExtension.SetStyle(Curve.Short_DASH); line_ResistanceExtension.SetDefaultColor(color.LIGHT_GRAY); line_ResistanceExtension.setLineWeight(1); plot pivotLow = if LowPivots then PL else double.NaN; pivotLow.setDefaultColor(GetColor(4)); pivotLow.setPaintingStrategy(PaintingStrategy.VALUES_BELOW); pivotLow.setHiding(!showValues); plot pivotLowLine = if PLL > 0 and LowPivots then PLL else double.NaN; pivotLowLine.SetPaintingStrategy(PaintingStrategy.DASHES); pivotLowLine.setDefaultColor(color.DOWNTICK); pivotLowLine.setHiding(!showLines); plot SupportLine = pivotLow; SupportLine.enableApproximation(); SupportLine.SetDefaultColor(color.LIGHT_GRAY); SUpportLine.SetStyle(Curve.Short_DASH); def calc_SupportExtension = if SExtend then (bn - PLBar) * SSlope + PLL else double.NaN; plot line_SupportExtension = if bn <= (Currentbar + ExtensionLengthBars) and calc_SupportExtension[1] >= (lowestall(vLow) * (1-(lowerExtensionPercentLimit/100))) and calc_SupportExtension[1] <= (Highestall(vHigh) * (1 + (upperExtensionPercentLimit/100))) then calc_supportExtension else double.nan; line_SupportExtension.SetDefaultColor(color.LIGHT_GRAY); #was 7 line_SupportExtension.SetStyle(Curve.Short_DASH); line_SupportExtension.setLineWeight(1); # plot BarNumbersBelow = bn; # BarNumbersBelow.SetDefaultColor(GetColor(0)); # BarNumbersBelow.setHiding(!showBarNumbers); # BarNumbersBelow.SetPaintingStrategy(PaintingStrategy.VALUES_BELOW); plot PivotDot = if !isNaN(pivotHigh) then pivotHigh else if !isNaN(pivotLow) then pivotLow else double.NaN; pivotDot.SetDefaultColor(GetColor(7)); pivotDot.SetPaintingStrategy(PaintingStrategy.POINTS); pivotDot.SetLineWeight(3);