![]() |

Access to Chart: Chart Setup
Hey traders,
Iām sharing a straightforward script designed to help identify reasonable buy-in points based on three simple pillars:
Reasonable Strength ā RSI not oversold, but showing some recovery potential
Reasonable Price ā Price below Bollinger Band basis (but not in panic zone)
Reasonable Interest ā Elevated relative volume to confirm trader participation

Buy Signal triggers when:
- RSI < 40 (suggesting weāve pulled back to a healthy zone)
- Price is under the Bollinger Band basis (a technical discount)
- Relative volume > 1.5x the average (indicating unusual interest)
Sell Signal (optional) fires when RSI > 60, price is extended above basis, and volume is also elevated.

- RSI value + slope to catch subtle directional shifts
- Bollinger Band zone (Buy/Sell/Neutral)
- Relative volume label (Confirms/Neutral/Weak)
- āBuy Setup Confirmedā label when everything lines up

- Cyan up arrows = Confirmed buy setups
- Magenta down arrows = Optional sell zones (if you want to test reversals or trim)
CASE STUDY:
The stock pictured is EVRG, they are a utility company and had two things hurt it recently which caused it to back off its uptrend. 1) They had some one times on their earnings report that reduced net income. Some of that was Higher Depreciation and Amortization because EVRG is investing heavily right now in infrastructure. Notable that this is not a cash reduction and a tax benefit. They also had reduced demand because of a rough winter. 2) The market overloaded Utilities as safe havens recently with the economic headwinds, so its natural that we are starting to see a bit of retrace due to sector rotation now that fears have subsided "some". Based off this I suggest EVRG is a good buy the dip company, but not yet. If you notice the chart below, you'll see the oval I put on the chart at current price levels. This means the stock is currently in a buy zone, also indicated by the label that is lit up green in the top left. It still has a weak RSI and volume is still low, once all 3 of this are working together then I would consider it a buy for a short term swing and possible long term defensive stock with a 5% dividend.
Code:
# === Inputs ===
input rsiLength = 14;
input rsiOverbought = 60;
input rsiOversold = 40;
input bbLength = 20;
input bbMult = 2.0;
input volLength = 20;
input relVolHigh = 1.5;
input relVolLow = 0.8;
input showLabels = yes;
input showArrows = yes;
# === RSI ===
def rsi = RSI(length = rsiLength);
# === Bollinger Bands ===
def basis = Average(close, bbLength);
def dev = bbMult * stdev(close, bbLength);
def upperBB = basis + dev;
def lowerBB = basis - dev;
# === Volume ===
def avgVol = Average(volume, volLength);
def relVol = if avgVol != 0 then volume / avgVol else 0;
# === Buy Condition ===
def buySignal = rsi < rsiOversold and high < basis and relVol > relVolHigh;
# === Sell Condition (Optional) ===
def sellSignal = rsi > rsiOverbought and low > basis and relVol > relVolHigh;
# === Label 1: RSI ===
def rsiSlope = rsi - rsi[1];
AddLabel(showLabels,
"RSI: (" + Round(rsi, 1) + ", Slope: " +Round(rsiSlope, 1) +")",
if rsi < rsiOversold then Color.GREEN
else if rsi > rsiOverbought then Color.RED
else Color.GRAY
);
# === Label 2: Bollinger Band Position ===
AddLabel(showLabels,
if high < basis then "BB Buy Zone"
else if low > basis then "BB Sell Zone"
else "Price in Range",
if high < basis then Color.GREEN
else if low > basis then Color.RED
else Color.GRAY
);
# === Label 3: Relative Volume ===
AddLabel(showLabels,
if relVol > relVolHigh then "Volume Confirms"
else if relVol < relVolLow then "Volume Weak ā Wait"
else "Neutral Volume",
if relVol > relVolHigh then Color.GREEN
else if relVol < relVolLow then Color.ORANGE
else Color.GRAY
);
# === Label 4: Confluence ===
AddLabel(showLabels,
if buySignal then "Buy Setup Confirmed"
else "No Setup",
if buySignal then Color.CYAN else Color.DARK_GRAY
);
# === Arrows ===
plot buyArrow = showArrows and buySignal;
buyArrow.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
buyArrow.SetDefaultColor(Color.CYAN);
buyArrow.SetLineWeight(3);
plot sellArrow = showArrows and sellSignal;
sellArrow.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
sellArrow.SetDefaultColor(Color.MAGENTA);
sellArrow.SetLineWeight(3);
Tips:
1)It helps to have bollinger bands on and RSI so you see whats going on. I also like the CMF as well
2) As with any indicator or system it requires a little common sense and not just pulling the trigger. This is a classical strategy, nothing ground breaking on it. IT just helps you not chase good opportunities
Last edited: