//@version=5
indicator("Origin — Larry Connors 10-Period RSI Pullback", overlay=true)

// Inputs
smaLen      = input.int(200, "SMA Trend Period", minval=1)
rsiLen      = input.int(10, "RSI Pullback Period", minval=1)
rsiBuyLevel = input.float(30.0, "RSI Buy Level (< 30)", minval=0.0, maxval=100.0)
rsiBuyExit  = input.float(40.0, "RSI Buy Exit (> 40)", minval=0.0, maxval=100.0)
maxBars     = input.int(10, "Max Holding Bars", minval=1)

// Calculations
sma200 = ta.sma(close, smaLen)
rsi10  = ta.rsi(close, rsiLen)

// Conditions
trendUp     = close > sma200
pullbackDip = rsi10 < rsiBuyLevel
buySetup    = trendUp and pullbackDip

// Tracking Long Trade State
var bool inTrade = false
var int entryBar = 0
var float entryPrice = 0.0

buySignal = false
exitSignal = false

if buySetup and not inTrade
    buySignal := true
    inTrade := true
    entryBar := bar_index
    entryPrice := open

if inTrade and bar_index > entryBar
    barsHeld = bar_index - entryBar
    if rsi10 > rsiBuyExit or barsHeld >= maxBars
        exitSignal := true
        inTrade := false

// Plots
plot(sma200, "200 SMA", color=color.blue, linewidth=2)

plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small, text="BUY")
plotshape(exitSignal, title="Exit Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small, text="EXIT")

bgcolor(buySetup ? color.new(color.green, 90) : na, title="Setup Dip")
