// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © AI_PIPS //@version=6 indicator("AIPIPS Dynamic Risk Model", overlay=true) atrLen = input.int(14, "ATR length", minval=1) rangeLookback = input.int(20, "Dealing range lookback", minval=5) riskMultiple = input.float(2.0, "Target multiple", step=0.25) baseRiskPct = input.float(0.5, "Base risk % of ADR", step=0.05) atr = ta.atr(atrLen) adr = ta.sma(ta.tr(true), 20) rangeHigh = ta.highest(high, rangeLookback) rangeLow = ta.lowest(low, rangeLookback) rangeMid = (rangeHigh + rangeLow) / 2.0 stopBuffer = math.max(atr, adr * baseRiskPct * 0.01) recommendedStopLong = close - stopBuffer recommendedStopShort = close + stopBuffer recommendedTargetLong = close + stopBuffer * riskMultiple recommendedTargetShort = close - stopBuffer * riskMultiple plot(recommendedStopLong, title="Long stop", style=plot.style_linebr, color=color.new(color.red, 0)) plot(recommendedStopShort, title="Short stop", style=plot.style_linebr, color=color.new(color.green, 0)) plot(recommendedTargetLong, title="Long target", style=plot.style_linebr, color=color.new(color.green, 70)) plot(recommendedTargetShort, title="Short target", style=plot.style_linebr, color=color.new(color.red, 70)) plot(rangeMid, title="Range mid", color=color.new(color.gray, 60), style=plot.style_dotted) var label info = na if barstate.islast text = "AI PIPS dynamic risk\nATR:" + str.tostring(atr, format.mintick) + " | ADR:" + str.tostring(adr, format.mintick) if na(info) info := label.new(bar_index, high, text=text, style=label.style_label_left, color=color.new(color.blue, 80), textcolor=color.white) else label.set_xy(info, bar_index, high) label.set_text(info, text)