//@version=5 indicator('Support and Resistance', shorttitle = 'Adaptive S/R', overlay=true, max_bars_back=1000) display_reversal_price = false display_cumulative_volume = false display_reversal_price_change = false length = input.int(25, 'Length : PC',inline = 'length', group='Basic Settings', tooltip='Pivot length. Use higher values for having lines connected to more significant pivots') lookback = input.int(3, minval=1, title='Lookback : PC', inline = 'lookback', group='Basic Settings', tooltip='Number of lines connecting a pivot high/low to display') Slope = input.float(1, minval=-2, maxval=2, step=0.1,title = 'Deviation : PC' ,inline = 'Slope', group='Basic Settings', tooltip='Allows to multiply the linear regression slope by a number within -2 and 2') extend_to_last_bar = input(title='Extend to Last Bar', group='Line Settings', defval=false) i_extendLines = input(false, 'Extend to current bar', group='Line Settings') extendL2 = input.bool(false, 'Parallel lines Left?', group='Line Settings') var extend2 = extend.right if extendL2 extend2 := extend.both extend2 showpar = input.bool(false, 'Show Parallel Lines',group='Line Settings') //Style ph_col = input.color(color.rgb(255, 82, 82), 'High Lines Color', group='Line Colors', inline='col1') pl_col = input.color(color.rgb(86, 187, 255), 'Low Lines Color', group='Line Colors', inline='col1') line_color = input(title='zigzag Colour', defval=color.new(color.white,95), group='Line Colors') devTooltip = 'Deviation is a multiplier that affects how much the price should deviate from the previous pivot in order for the bar to become a new pivot.' depthTooltip = 'The minimum number of bars that will be taken into account when calculating the indicator.' // pivots threshold threshold_multiplier = input.float(title=': ZZ', defval=3, minval=0, tooltip=devTooltip,inline = 'Slope', group='Basic Settings') dev_threshold = ta.atr(10) / close * 100 * threshold_multiplier depth = input.int(title=':ZZ', defval=25, minval=1, tooltip=depthTooltip,inline = 'length', group='Basic Settings') ///////// ShowSupResZones = input(false, title='Factal Support/Resistance',group='Line Settings') InvertColors = true TF1 = timeframe.period TF1_Menu = 'S/R Zones' TF1_VolMA1Input = 6 // S/R - Current Time Frame = Time Frame 1 = TF1 TF1_Vol = request.security(syminfo.tickerid, TF1, volume) TF1_VolMA = ta.sma(TF1_Vol, TF1_VolMA1Input) TF1_High = request.security(syminfo.tickerid, TF1, high) TF1_Low = request.security(syminfo.tickerid, TF1, low) TF1_Open = request.security(syminfo.tickerid, TF1, open) TF1_Close = request.security(syminfo.tickerid, TF1, close) TF1_Up = TF1_High[3] > TF1_High[4] and TF1_High[4] > TF1_High[5] and TF1_High[2] < TF1_High[3] and TF1_High[1] < TF1_High[2] and TF1_Vol[3] > TF1_VolMA[3] // or volume[3] > VolMA2Current[3]) TF1_Down = TF1_Low[3] < TF1_Low[4] and TF1_Low[4] < TF1_Low[5] and TF1_Low[2] > TF1_Low[3] and TF1_Low[1] > TF1_Low[2] and TF1_Vol[3] > TF1_VolMA[3] // or volume[3] > VolMA2Current[3]) TF1_CalcFractalUp() => TF1_FractalUp = 0.0 TF1_FractalUp := TF1_Up ? TF1_High[3] : TF1_FractalUp[1] TF1_FractalUp TF1_CalcFractalDown() => TF1_FractalDown = 0.0 TF1_FractalDown := TF1_Down ? TF1_Low[3] : TF1_FractalDown[1] TF1_FractalDown TF1_FractalUp = request.security(syminfo.tickerid, TF1, TF1_CalcFractalUp()) TF1_FractalDown = request.security(syminfo.tickerid, TF1, TF1_CalcFractalDown()) // Zones - Current Time Frame = Time Frame 1 = TF1 // Fractal Up Zones TF1_CalcFractalUpLowerZone() => TF1_FractalUpLowerZone = 0.0 TF1_FractalUpLowerZone := TF1_Up and TF1_Close[3] > TF1_Open[3] ? TF1_Close[3] : TF1_Up and TF1_Close[3] < TF1_Open[3] ? TF1_Open[3] : TF1_FractalUpLowerZone[1] TF1_FractalUpLowerZone TF1_CalcFractalUpUpperZone() => TF1_FractalUpUpperZone = 0.0 TF1_FractalUpUpperZone := TF1_Up and TF1_Close[3] > TF1_Open[3] ? TF1_High[3] - TF1_Close[3] + TF1_High[3] : TF1_Up and TF1_Close[3] < TF1_Open[3] ? TF1_High[3] - TF1_Open[3] + TF1_High[3] : TF1_FractalUpUpperZone[1] TF1_FractalUpUpperZone TF1_FractalUpLowerZone = request.security(syminfo.tickerid, TF1, TF1_CalcFractalUpLowerZone()) TF1_FractalUpUpperZone = request.security(syminfo.tickerid, TF1, TF1_CalcFractalUpUpperZone()) TF1_ResistanceUpperZone = TF1_FractalUpUpperZone TF1_ResistanceLowerZone = TF1_FractalUpLowerZone // Fractal Down Zones TF1_CalcFractalDownUpperZone() => TF1_FractalDownUpperZone = 0.0 TF1_FractalDownUpperZone := TF1_Down and TF1_Close[3] > TF1_Open[3] ? TF1_Open[3] : TF1_Down and TF1_Close[3] < TF1_Open[3] ? TF1_Close[3] : TF1_FractalDownUpperZone[1] TF1_FractalDownUpperZone TF1_CalcFractalDownLowerZone() => TF1_FractalDownLowerZone = 0.0 TF1_FractalDownLowerZone := TF1_Down and TF1_Close[3] > TF1_Open[3] ? TF1_Low[3] + TF1_Low[3] - TF1_Open[3] : TF1_Down and TF1_Close[3] < TF1_Open[3] ? TF1_Low[3] + TF1_Low[3] - TF1_Close[3] : TF1_FractalDownLowerZone[1] TF1_FractalDownLowerZone TF1_FractalDownLowerZone = request.security(syminfo.tickerid, TF1, TF1_CalcFractalDownLowerZone()) TF1_FractalDownUpperZone = request.security(syminfo.tickerid, TF1, TF1_CalcFractalDownUpperZone()) TF1_SupportUpperZone = TF1_FractalDownUpperZone TF1_SupportLowerZone = TF1_FractalDownLowerZone // Colors - Current Time Frame = Time Frame 1 = TF1 TF1_ResistanceColor = not InvertColors ? #ff49498c : #2ecff3e6 // red : lime TF1_SupportColor = not InvertColors ? #2ecff3e6 : #ff49498c // lime : red TF1_ResZoneColor = TF1_FractalUp != TF1_FractalUp[1] ? na : color.red TF1_ResZoneColorInverted = TF1_FractalUp != TF1_FractalUp[1] ? na : color.rgb(62, 192, 232) TF1_SupZoneColor = TF1_FractalDown != TF1_FractalDown[1] ? na : color.rgb(53, 217, 238) TF1_SupZoneColorInverted = TF1_FractalDown != TF1_FractalDown[1] ? na : color.rgb(228, 84, 84) TF1_ResistanceZonesColor = not InvertColors and TF1_Menu == 'S/R Zones' ? TF1_ResZoneColor : InvertColors and TF1_Menu == 'S/R Zones' ? TF1_ResZoneColorInverted : na // red : lime TF1_SupportZonesColor = not InvertColors and TF1_Menu == 'S/R Zones' ? TF1_SupZoneColor : InvertColors and TF1_Menu == 'S/R Zones' ? TF1_SupZoneColorInverted : na // lime : red // S/R & S/R Zone Plots - Current Time Frame = Time Frame 1 = TF1 plot(ShowSupResZones ? TF1_FractalUp : na, 'Current Timeframe - Resistance', color=TF1_ResistanceColor, linewidth=1, offset=-3, style=plot.style_circles, join=false) plot(ShowSupResZones ? TF1_FractalDown : na, 'Current Timeframe - Support', color=TF1_SupportColor, linewidth=1, offset=-3, style=plot.style_circles, join=false) i_drawLines = input(true, 'Draw lines or just dots',group='Line Settings') i_lineCount = input(10, ': ZZ',inline = 'lookback', group='Basic Settings') i_showFirst = true i_firstDepth = depth i_firstDeviation = dev_threshold i_firstColor = input(color.white, 'Extented line Colour', group='Line Colors')