RoyalPrince Indicator Pt.2: Comprehensive Market Trend and Support/Resistance Tool
January 21, 2025 | by admin

Key Features of the Script:
- SuperTrend-Based Buy/Sell Signals:
- Uses an ATR-based SuperTrend algorithm to generate dynamic buy and sell signals.
- Customizable sensitivity settings: Low, Medium, High for different trading styles.
- Support and Resistance Levels:
- Automatically identifies key support and resistance levels based on pivot highs and lows.
- Provides visual cues for potential breakout or reversal points.
- EMA Energy Bands:
- Incorporates 16 EMAs (Exponential Moving Averages) to track market momentum.
- Color-coded trend strength based on price relation to the EMA values.
- Keltner Channel Integration:
- Implements multiple Keltner Channels with different ATR multipliers for trend-following and volatility measurement.
- Highlights upper and lower channel boundaries for breakout detection.
- PSAR (Parabolic SAR) Integration:
- Option to enable/disable the PSAR for additional trend confirmation.
- Uses colored dots to signify trend direction and potential reversals.
- Auto Trend Lines:
- Dynamically draws trend lines using linear regression slope and ATR-based deviations.
- Helps traders visualize potential breakout zones and trend reversals.
- Pivot Highs/Lows Tracking:
- Tracks recent market structure with adjustable lookback periods to identify swing highs and lows.
- Useful for spotting market turning points.
- Bar Coloring for Trend Confirmation:
- Changes bar colors based on price action relative to SuperTrend and moving averages.
- Provides easy visual interpretation of market sentiment.
- Breakout Confirmation:
- Detects breakouts above or below key pivot levels.
- Plots breakout labels (“B”) on the chart for quick trade opportunities.
- Custom Alerts and Notifications:
- Alerts for crossover and crossunder events of price vs. trend indicators.
- Enables traders to stay informed of potential trade setups in real time.
Recommended Usage:
- Scalping:
- Best suited for 5-minute to 15-minute charts.
- Use EMA energy bands and Keltner channels for quick decision-making.
- Swing Trading:
- Effective on 1-hour to 4-hour charts.
- Combine trend lines with SuperTrend for medium-term market trends.
- Breakout Trading:
- Track pivot levels and breakout confirmations on 30-minute to 1-hour charts.
- Identify potential reversal points using PSAR and EMA crossovers.
- Risk Management:
- Use ATR-based Keltner Channel boundaries for setting stop-loss and take-profit levels.
- Apply trend-based bar coloring to avoid entering choppy markets.
Script Evaluation:
- Functionality: 4.8/5
The script combines a variety of trend-following and breakout indicators, offering great flexibility for traders. - Ease of Use: 4.2/5
While it provides extensive customization options, beginners may need time to adjust settings effectively. - Accuracy: 4.7/5
Reliable signals when used with appropriate market conditions and timeframes. - Repainting Analysis:
This script does not repaint.
It generates signals based on confirmed bar data, ensuring accurate performance in live trading and backtesting. - Optimal Timeframes:
- Scalping: 5-minute to 15-minute charts.
- Swing Trading: 1-hour to 4-hour charts.
- Day Trading: 30-minute to 1-hour charts.
- Author and Development Quality:
The script is developed under the alias RoyalPrince, showcasing strong programming and trading strategy expertise. Minor optimization may improve performance on high-frequency charts. - Overall Score: 4.6/5
A well-balanced tool offering trend analysis, risk management, and breakout detection, suitable for various trading styles.
//@version=5
indicator("RoyalPrince Indicator Pt.2]", overlay=true, precision=0, explicit_plot_zorder=true, max_labels_count=500)
// Get user input
sensitivity = input.string("Low", "Sensitivity", ["Low", "Medium", "High"])
suppRes = input.bool(true, "Support & Resistance")
breaks = input.bool(false, "Breaks")
usePsar = input.bool(false, "PSAR")
emaEnergy = input.bool(true, "EMA Energy")
channelBal = input.bool(true, "Channel Balance")
autoTL = input.bool(true, "Auto Trend Lines")
// Functions
supertrend(_src, factor, atrLen) =>
atr = ta.atr(atrLen)
upperBand = _src + factor * atr
lowerBand = _src - factor * atr
prevLowerBand = nz(lowerBand[1])
prevUpperBand = nz(upperBand[1])
lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand
upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand
int direction = na
float superTrend = na
prevSuperTrend = superTrend[1]
if na(atr[1])
direction := 1
else if prevSuperTrend == prevUpperBand
direction := close > upperBand ? -1 : 1
else
direction := close < lowerBand ? 1 : -1
superTrend := direction == -1 ? lowerBand : upperBand
[superTrend, direction]
lr_slope(_src, _len) =>
x = 0.0, y = 0.0, x2 = 0.0, xy = 0.0
for i = 0 to _len - 1
val = _src[i]
per = i + 1
x += per
y += val
x2 += per * per
xy += val * per
_slp = (_len * xy - x * y) / (_len * x2 - x * x)
_avg = y / _len
_int = _avg - _slp * x / _len + _slp
[_slp, _avg, _int]
lr_dev(_src, _len, _slp, _avg, _int) =>
upDev = 0.0, dnDev = 0.0
val = _int
for j = 0 to _len - 1
price = high[j] - val
if price > upDev
upDev := price
price := val - low[j]
if price > dnDev
dnDev := price
price := _src[j]
val += _slp
[upDev, dnDev]
// Get Components
ocAvg = math.avg(open, close)
sma1 = ta.sma(close, 5)
sma2 = ta.sma(close, 6)
sma3 = ta.sma(close, 7)
sma4 = ta.sma(close, 8)
sma5 = ta.sma(close, 9)
sma6 = ta.sma(close, 10)
sma7 = ta.sma(close, 11)
sma8 = ta.sma(close, 12)
sma9 = ta.sma(close, 13)
sma10 = ta.sma(close, 14)
sma11 = ta.sma(close, 15)
sma12 = ta.sma(close, 16)
sma13 = ta.sma(close, 17)
sma14 = ta.sma(close, 18)
sma15 = ta.sma(close, 19)
sma16 = ta.sma(close, 20)
psar = ta.sar(0.02, 0.02, 0.2)
[middleKC1, upperKC1, lowerKC1] = ta.kc(close, 80, 10.5)
[middleKC2, upperKC2, lowerKC2] = ta.kc(close, 80, 9.5)
[middleKC3, upperKC3, lowerKC3] = ta.kc(close, 80, 8)
[middleKC4, upperKC4, lowerKC4] = ta.kc(close, 80, 3)
[supertrend, direction] = supertrend(close, sensitivity == "Low" ? 5 : sensitivity == "Medium" ? 2.5 : 2, 11)
barsL = 10
barsR = 10
pivotHigh = fixnan(ta.pivothigh(barsL, barsR)[1])
pivotLow = fixnan(ta.pivotlow(barsL, barsR)[1])
source = close, period = 150
[s, a, i] = lr_slope(source, period)
[upDev, dnDev] = lr_dev(source, period, s, a, i)
// Colors
green = #2BBC4D, green2 = #00DD00
red = #C51D0B, red2 = #DD0000
emaEnergyColor(ma) => emaEnergy ? (close >= ma ? green : red) : na
// Plots
k1 = plot(ta.ema(upperKC1, 50), "", na, editable=false)
k2 = plot(ta.ema(upperKC2, 50), "", na, editable=false)
k3 = plot(ta.ema(upperKC3, 50), "", na, editable=false)
k4 = plot(ta.ema(upperKC4, 50), "", na, editable=false)
k5 = plot(ta.ema(lowerKC4, 50), "", na, editable=false)
k6 = plot(ta.ema(lowerKC3, 50), "", na, editable=false)
k7 = plot(ta.ema(lowerKC2, 50), "", na, editable=false)
k8 = plot(ta.ema(lowerKC1, 50), "", na, editable=false)
fill(k1, k2, channelBal ? color.new(red2, 40) : na, editable=false)
fill(k2, k3, channelBal ? color.new(red2, 65) : na, editable=false)
fill(k3, k4, channelBal ? color.new(red2, 90) : na, editable=false)
fill(k5, k6, channelBal ? color.new(green2, 90) : na, editable=false)
fill(k6, k7, channelBal ? color.new(green2, 65) : na, editable=false)
fill(k7, k8, channelBal ? color.new(green2, 40) : na, editable=false)
plot(sma1, "", emaEnergyColor(sma1), editable=false)
plot(sma2, "", emaEnergyColor(sma2), editable=false)
plot(sma3, "", emaEnergyColor(sma3), editable=false)
plot(sma4, "", emaEnergyColor(sma4), editable=false)
plot(sma5, "", emaEnergyColor(sma5), editable=false)
plot(sma6, "", emaEnergyColor(sma6), editable=false)
plot(sma7, "", emaEnergyColor(sma7), editable=false)
plot(sma8, "", emaEnergyColor(sma8), editable=false)
plot(sma9, "", emaEnergyColor(sma9), editable=false)
plot(sma10, "", emaEnergyColor(sma10), editable=false)
plot(sma11, "", emaEnergyColor(sma11), editable=false)
plot(sma12, "", emaEnergyColor(sma12), editable=false)
plot(sma13, "", emaEnergyColor(sma13), editable=false)
plot(sma14, "", emaEnergyColor(sma14), editable=false)
plot(sma15, "", emaEnergyColor(sma15), editable=false)
plot(sma16, "", emaEnergyColor(sma16), editable=false)
barcolor(close > supertrend ? #2BE300 : red2)
p3 = plot(ocAvg, "", na, editable=false)
p4 = plot(psar, "PSAR", usePsar ? (close > psar ? green : red) : na, 1, plot.style_circles, editable=false)
fill(p3, p4, usePsar ? (close > psar ? color.new(green, 90) : color.new(red, 90)) : na, editable=false)
y1 = low - (ta.atr(30) * 2), y1B = low - ta.atr(30)
y2 = high + (ta.atr(30) * 2), y2B = high + ta.atr(30)
bull = ta.crossover(close, supertrend) and close >= sma9
bear = ta.crossunder(close, supertrend) and close <= sma9
plot(pivotHigh, "Resistance", not suppRes or ta.change(pivotHigh) ? na : red, 2, offset=-(barsR + 1), editable=false)
plot(pivotLow, "Support", not suppRes or ta.change(pivotLow) ? na : green, 2, offset=-(barsR + 1), editable=false)
upB = breaks and ta.crossover(close, pivotHigh) ? label.new(bar_index, y1B, "B", xloc.bar_index, yloc.price, green, label.style_label_up, color.white, size.small) : na
dnB = breaks and ta.crossunder(close, pivotLow) ? label.new(bar_index, y2B, "B", xloc.bar_index, yloc.price, red, label.style_label_down, color.white, size.small) : na
x1 = bar_index - period + 1, _y1 = i + s * (period - 1), x2 = bar_index, _y2 = i
upperTL = autoTL ? line.new(x1, _y1 + upDev, x2, _y2 + upDev, xloc.bar_index, extend.none, red) : na
line.delete(upperTL[1])
middleTL = autoTL ? line.new(x1, _y1, x2, _y2, xloc.bar_index, extend.none, color.white) : na
line.delete(middleTL[1])
lowerTL = autoTL ? line.new(x1, _y1 - dnDev, x2, _y2 - dnDev, xloc.bar_index, extend.none, green) : na
line.delete(lowerTL[1])
How to Apply Pine Script in TradingView:
- Open TradingView and log in.
- Navigate to the Pine Script Editor at the bottom of the screen.
- Copy and paste the provided script code.
- Click Save, then name the script (e.g., “RoyalPrince Indicator Pt.2”).
- Click Add to Chart to apply it.
- Customize the settings to fit your trading strategy.
Additional Trading Tips:
- Combine with Volume Indicators:
Use volume-based indicators like OBV or VWAP alongside this script for enhanced trade confirmation. - Use on Higher Timeframes for Accuracy:
While it works on lower timeframes, the best results are often seen on 1-hour or higher charts, where signals are more reliable. - Backtest Before Live Trading:
Always backtest the script under various market conditions to optimize parameters and maximize its effectiveness.
Final Thoughts:
The RoyalPrince Indicator Pt.2 is a powerful and versatile trading tool that combines multiple indicators to provide a complete market analysis system. Its non-repainting nature ensures reliable signals, making it ideal for traders focusing on trend-following and breakout strategies. Whether you’re scalping or swing trading, this script offers the insights needed to stay ahead of the market.
RELATED POSTS
View all