Technical Ratings Pro - Pump Wave

Category: Indicators By: Iván González Created: January 13, 2026, 10:49 AM
January 13, 2026, 10:49 AM
Indicators
4 Comments

In technical analysis, relying on a single indicator can often lead to false signals or “market noise.” The most robust trading decisions usually come from a consensus, a situation where multiple independent tools point in the same direction.

The Technical Ratings Pro is a high-level analytical tool designed to provide this consensus automatically. It aggregates 27 different technical conditions into a single, easy-to-read interface, giving you a real-time “score” of the market bias.

How It Works: The Internal Logic

The indicator is divided into two major technical categories that analyze price from different perspectives:

1. The Moving Averages Category (15 Conditions)

This section determines the trend by comparing the current closing price to various averages and cloud structures. It includes:

  • Simple Moving Averages (SMA): Periods 10, 20, 30, 50, 100, and 200.

  • Exponential Moving Averages (EMA): Periods 10, 20, 30, 50, 100, and 200.

  • Hull Moving Average: A 9-period Hull MA for fast trend detection.

  • Volume Weighted Moving Average (VWMA): A 20-period average adjusted for trading volume.

  • Ichimoku Cloud: Analyzes the relationship between Lead Line 1, Lead Line 2, and the Base Line.

2. The Oscillators Category (11 Conditions)

This section looks for momentum shifts and overbought/oversold conditions. It aggregates:

  • Relative Strength Index (RSI): Standard 14-period analysis.

  • Stochastic & Stochastic RSI: Traditional and RSI-based momentum.

  • ADX: Filters for trend strength and direction (DI+/DI-).

  • MACD: Evaluates the relationship between the MACD line and the signal line.

  • Other Tools: Includes Commodity Channel Index (CCI), Awesome Oscillator, Momentum, Williams %R, Bull/Bear Power, and the Ultimate Oscillator.

Visual Breakdown

The indicator provides a rich visual experience directly on your price chart:

  • Real-Time Dashboard: A text summary appears in the top-right corner using the ANCHOR command. It displays the specific percentage rating for MAs, Oscillators, and the total combined score.

  • Pump Waves: Using the COLORBETWEEN instruction, the indicator draws dynamic “waves” representing the intensity of the bias.

    • Blue/Green: Indicates a Bullish bias (Buy/Strong Buy).

    • Red: Indicates a Bearish bias (Sell/Strong Sell).

    • Grey: Indicates a Neutral market.

  • Trend Line: A smoothed dynamic line at the bottom represents the overall trajectory of the Moving Average consensus.

Configuration and Inputs

You can customize the indicator’s behavior through the variable interface without modifying the code:

Variable Default Value Description
ratingSignal 0 0 = All combined, 1 = Moving Averages only, 2 = Oscillators only.
showema 1 (On) Toggles the visibility of the Moving Average Pump Wave.
showosc 1 (On) Toggles the visibility of the Oscillator Pump Wave.
showtotal 1 (On) Toggles the visibility of the Total Rating Pump Wave.
showtrend 1 (On) Toggles the visibility of the dynamic MA Trend Line.

ProBuilder Code

//----------------------------------------------------------//
//PRC_Technical Ratings Pro (by veryfid)
//version = 0
//07.05.24
//Iván González @ www.prorealcode.com
//Sharing ProRealTime knowledge
//----------------------------------------------------------//
//-----Inputs-----------------------------------------------//
defparam DRAWONLASTBARONLY = true
ratingSignal=0//0=All 1=MAs 2=Oscillators
showema=1//Show MA Pump Wave?
showosc=1//Show Oscillator Pump Wave?
showtotal=1//Show Total Rating Pump Wave?
showtrend=1//Show MA Trend Line?
//----------------------------------------------------------//
//-----Moving Averages--------------------------------------//
sma10=average[10,0](close)
sma20=average[20,0](close)
sma30=average[30,0](close)
sma50=average[50,0](close)
sma100=average[100,0](close)
sma200=average[200,0](close)

ema10=average[10,1](close)
ema20=average[20,1](close)
ema30=average[30,1](close)
ema50=average[50,1](close)
ema100=average[100,1](close)
ema200=average[200,1](close)

hullMA9=hullaverage[9](close)

vwma=VolumeAdjustedAverage[20](close)
//----------------------------------------------------------//
//-----Ichimoku Cloud---------------------------------------//
donchian9 = (highest[9](high)+lowest[9](low))/2
donchian26 = (highest[26](high)+lowest[26](low))/2
donchian52 = (highest[52](high)+lowest[52](low))/2

conversionLine=donchian9
baseLine=donchian26
leadLine1=(conversionLine+baseLine)/2
leadLine2=donchian52
//----------------------------------------------------------//
//-----RSI--------------------------------------------------//
myrsi = rsi[14](close)
//----------------------------------------------------------//
//-----Stochastic-------------------------------------------//
lengthStoch=14
smoothKStoch = 3
smoothDStoch = 3
kStoch=Stochastic[lengthStoch,smoothKStoch](close)
Dstoch=Stochasticd[lengthStoch,smoothKStoch,smoothDStoch](close)
//----------------------------------------------------------//
//-----CCI--------------------------------------------------//
mycci = cci[20](close)
//----------------------------------------------------------//
//-----ADX--------------------------------------------------//
adxvalue = ADX[14]
adxPlus = DIplus[14](close)
adxMinus = DIminus[14](close)
//----------------------------------------------------------//
//-----awesome Oscilator------------------------------------//
hl2 = (high+low)/2
ao = average[5](hl2)-average[34](hl2)
//----------------------------------------------------------//
//-----Momentum---------------------------------------------//
mom = momentum[10](close)
//----------------------------------------------------------//
//-----MACD-------------------------------------------------//
macdMACD = MACDline[12,26,9](close)
signalMACD = MACDSignal[12,26,9](close)
//----------------------------------------------------------//
//-----Stochastic RSI---------------------------------------//
lengthStoch = 14 //Stochastic period
smoothK = 3 //Smooth signal of stochastic RSI
smoothD = 3 //Smooth signal of smoothed stochastic RSI

MinRSI = lowest[lengthStoch](myrsi)
MaxRSI = highest[lengthStoch](myrsi)

StochRSI = (myRSI-MinRSI) / (MaxRSI-MinRSI)

StochRSIK = average[smoothK](stochrsi)*100
StochRSID = average[smoothD](StochRSIK)
//----------------------------------------------------------//
//-----Ultimate Oscillator----------------------------------//
if close[1]<low then
   tl=close[1]
else
   tl=low
endif
//uo(ShortLen, MiddlLen, LongLen)(7,14,28)
value1=summation[7](tr)
value2=summation[14](tr)
value3=summation[28](tr)
value4=summation[7](close-tl)
value5=summation[14](close-tl)
value6=summation[28](close-tl)
if value1<>0 and value2<>0 and value3<>0 then
   var0=28/7
   var1=28/14
   value7=(value4/value1)*var0
   value8=(value5/value2)*var1
   value9=value6/value3
   uo=(value7+value8+value9)/(var0+var1+1)*100
endif
//----------------------------------------------------------//
//-----Williams Percent Range-------------------------------//
wr = Williams[14](close)
//----------------------------------------------------------//
//-----Bull & Bear Power------------------------------------//
BullPower = high - average[13,1](close)
BearPower = low - average[13,1](close)
//----------------------------------------------------------//
priceavg=average[50,1](close)
downtrend=close<priceavg
uptrend=close>priceavg
//----------------------------------------------------------//
//-----Rating MA Calculation--------------------------------//
//---SMA10
if barindex < 10 then
   calcRatingSMA10=undefined
else
   if sma10=close then
      calcRatingSMA10=0
   elsif sma10<close then
      calcRatingSMA10=1
   elsif sma10>close then
      calcRatingSMA10=-1
   endif
   calcSMA10=1
endif
//---SMA20
if barindex < 20 then
   calcRatingSMA20=undefined
else
   if sma20=close then
      calcRatingSMA20=0
   elsif sma20<close then
      calcRatingSMA20=1
   elsif sma20>close then
      calcRatingSMA20=-1
   endif
   calcSMA20=1
endif
//---SMA30
if barindex < 30 then
   calcRatingSMA30=undefined
else
   if SMA30=close then
      calcRatingSMA30=0
   elsif SMA30<close then
      calcRatingSMA30=1
   elsif SMA30>close then
      calcRatingSMA30=-1
   endif
   calcSMA30=1
endif
//---SMA50
if barindex < 50 then
   calcRatingSMA50=undefined
else
   if SMA50=close then
      calcRatingSMA50=0
   elsif SMA50<close then
      calcRatingSMA50=1
   elsif SMA50>close then
      calcRatingSMA50=-1
   endif
   calcSMA50=1
endif
//---SMA100
if barindex < 100 then
   calcRatingSMA100=undefined
else
   if SMA100=close then
      calcRatingSMA100=0
   elsif SMA100<close then
      calcRatingSMA100=1
   elsif SMA100>close then
      calcRatingSMA100=-1
   endif
   calcSMA100=1
endif
//---SMA200
if barindex < 200 then
   calcRatingSMA200=undefined
else
   if SMA200=close then
      calcRatingSMA200=0
   elsif SMA200<close then
      calcRatingSMA200=1
   elsif SMA200>close then
      calcRatingSMA200=-1
   endif
   calcSMA200=1
endif
//---EMA10
if barindex < 10 then
   calcRatingEMA10=undefined
else
   if EMA10=close then
      calcRatingEMA10=0
   elsif EMA10<close then
      calcRatingEMA10=1
   elsif EMA10>close then
      calcRatingEMA10=-1
   endif
   calcEMA10=1
endif
//---EMA20
if barindex < 20 then
   calcRatingEMA20=undefined
else
   if EMA20=close then
      calcRatingEMA20=0
   elsif EMA20<close then
      calcRatingEMA20=1
   elsif EMA20>close then
      calcRatingEMA20=-1
   endif
   calcEMA20=1
endif
//---EMA30
if barindex < 30 then
   calcRatingEMA30=undefined
else
   if EMA30=close then
      calcRatingEMA30=0
   elsif EMA30<close then
      calcRatingEMA30=1
   elsif EMA30>close then
      calcRatingEMA30=-1
   endif
   calcEMA30=1
endif
//---EMA50
if barindex < 50 then
   calcRatingEMA50=undefined
else
   if EMA50=close then
      calcRatingEMA50=0
   elsif EMA50<close then
      calcRatingEMA50=1
   elsif EMA50>close then
      calcRatingEMA50=-1
   endif
   calcEMA50=1
endif
//---EMA100
if barindex < 100 then
   calcRatingEMA100=undefined
else
   if EMA100=close then
      calcRatingEMA100=0
   elsif EMA100<close then
      calcRatingEMA100=1
   elsif EMA100>close then
      calcRatingEMA100=-1
   endif
   calcEMA100=1
endif
//---EMA200
if barindex < 200 then
   calcRatingEMA200=undefined
else
   if EMA200=close then
      calcRatingEMA200=0
   elsif EMA200<close then
      calcRatingEMA200=1
   elsif EMA200>close then
      calcRatingEMA200=-1
   endif
   calcEMA200=1
endif
//---hull9
if barindex < 9 then
   calcRatinghullMA9=undefined
else
   if hullMA9=close then
      calcRatinghullMA9=0
   elsif hullMA9<close then
      calcRatinghullMA9=1
   elsif hullMA9>close then
      calcRatinghullMA9=-1
   endif
   calchullMA9=1
endif
//---VWMA
if barindex < 20 then
   calcRatingVWMA=undefined
else
   if VWMA=close then
      calcRatingVWMA=0
   elsif VWMA<close then
      calcRatingVWMA=1
   elsif VWMA>close then
      calcRatingVWMA=-1
   endif
   calcVWMA=1
endif
//---Ichimoku
ma=leadLine1 > leadLine2 and close > leadLine1 and close < baseLine and close[1] < conversionLine and close > conversionLine
src=leadLine2 > leadLine1 and close < leadLine2 and close > baseLine and close[1] > conversionLine and close < conversionLine
if barindex < 52 then
   calcRatingichimoku=undefined
else
   if ma=src then
      calcRatingichimoku=0
   elsif ma<src then
      calcRatingichimoku=1
   elsif ma>src then
      calcRatingichimoku=-1
   endif
   calcichimoku=1
endif
//---Rating calculation
ratingMA=calcRatingSMA10+calcRatingSMA20+calcRatingSMA30+calcRatingSMA50+calcRatingSMA100+calcRatingSMA200+calcRatingEMA10+calcRatingEMA20+calcRatingEMA30+calcRatingEMA50+calcRatingEMA100+calcRatingEMA200+calcRatinghullMA9+calcRatingVWMA+calcRatingichimoku

ratingMAC=calcSMA10+calcSMA20+calcSMA30+calcSMA50+calcSMA100+calcSMA200+calcEMA10+calcEMA20+calcEMA30+calcEMA50+calcEMA100+calcEMA200+calchullMA9+calcVWMA+calcichimoku

if ratingMAC > 0 then
   rateMA = ratingMA/ratingMAC
else
   rateMA = undefined
endif
//----------------------------------------------------------//
//-----Rating Others----------------------------------------//
//---RSI
ratingRSI = myrsi
maRSI = ratingRSI < 30 and ratingRSI[1] < ratingRSI
srcRSI = ratingRSI > 70 and ratingRSI[1] > ratingRSI
if barindex < 14 then
   calcRatingRSI=undefined
else
   if maRSI=srcRSI then
      calcRatingRSI=0
   elsif maRSI<srcRSI then
      calcRatingRSI=1
   elsif maRSI>srcRSI then
      calcRatingRSI=-1
   endif
   calcRSI=1
endif
//---Stockastic
maSto = kStoch < 20 and dStoch < 20 and kStoch > dStoch and kStoch[1] < dStoch[1]
srcSto = kStoch > 80 and dStoch > 80 and kStoch < dStoch and kStoch[1] > dStoch[1]
if barindex < 14 then
   calcRatingSto=undefined
else
   if maSto=srcSto then
      calcRatingSto=0
   elsif maSto<srcSto then
      calcRatingSto=1
   elsif maSto>srcSto then
      calcRatingSto=-1
   endif
   calcSto=1
endif
//---CCI
ratingCCI = myCCI
maCCI = ratingCCI < -100 and ratingCCI[1]<ratingCCI
srcCCI = ratingCCI > 100 and ratingCCI[1] > ratingCCI
if barindex < 20 then
   calcRatingCCI=undefined
else
   if maCCI=srcCCI then
      calcRatingCCI=0
   elsif maCCI<srcCCI then
      calcRatingCCI=1
   elsif maCCI>srcCCI then
      calcRatingCCI=-1
   endif
   calcCCI=1
endif
//---ADX
maADX = adxValue > 20 and adxPlus[1] < adxMinus[1] and adxPlus > adxMinus
srcADX = adxValue > 20 and adxPlus[1] > adxMinus[1] and adxPlus < adxMinus
if barindex < 14 then
   calcRatingADX=undefined
else
   if maADX=srcADX then
      calcRatingADX=0
   elsif maADX<srcADX then
      calcRatingADX=1
   elsif maADX>srcADX then
      calcRatingADX=-1
   endif
   calcADX=1
endif
//---AO
maAO = ao crosses over 0 or (ao > 0 and ao[1] > 0 and ao > ao[1] and ao[2] > ao[1])
srcAO = ao crosses under 0 or (ao < 0 and ao[1] < 0 and ao < ao[1] and ao[2] < ao[1])
if barindex < 34 then
   calcRatingAO=undefined
else
   if maAO=srcAO then
      calcRatingAO=0
   elsif maAO<srcAO then
      calcRatingAO=1
   elsif maAO>srcAO then
      calcRatingAO=-1
   endif
   calcAO=1
endif
//---MOM
maMOM = Mom > Mom[1]
srcMOM = Mom < Mom[1]
if barindex < 10 then
   calcRatingMOM=undefined
else
   if maMOM=srcMOM then
      calcRatingMOM=0
   elsif maMOM<srcMOM then
      calcRatingMOM=1
   elsif maMOM>srcMOM then
      calcRatingMOM=-1
   endif
   calcMOM=1
endif
//---MACD
maMACD = macdMACD > signalMACD
srcMACD = macdMACD < signalMACD
if barindex < 26 then
   calcRatingMACD=undefined
else
   if maMACD=srcMACD then
      calcRatingMACD=0
   elsif maMACD<srcMACD then
      calcRatingMACD=1
   elsif maMACD>srcMACD then
      calcRatingMACD=-1
   endif
   calcMACD=1
endif
//---Stoch RSI
//ratingStoRSI =
maStoRSI = DownTrend and StochRSIK < 20 and StochRSID < 20 and StochRSIK > StochRSID and StochRSIK[1] < StochRSID[1]
srcStoRSI = UpTrend and StochRSIK > 80 and StochRSID > 80 and StochRSIK < StochRSID and StochRSIK[1] > StochRSID[1]
if barindex < 20 then
   calcRatingStoRSI=undefined
else
   if maStoRSI=srcStoRSI then
      calcRatingStoRSI=0
   elsif maStoRSI<srcStoRSI then
      calcRatingStoRSI=1
   elsif maStoRSI>srcStoRSI then
      calcRatingStoRSI=-1
   endif
   calcStoRSI=1
endif
//---WR
maWR = WR < -80 and WR > WR[1]
srcWR = WR > -20 and WR < WR[1]
if barindex < 20 then
   calcRatingWR=undefined
else
   if maWR=srcWR then
      calcRatingWR=0
   elsif maWR<srcWR then
      calcRatingWR=1
   elsif maWR>srcWR then
      calcRatingWR=-1
   endif
   calcWR=1
endif
//---BBpower
maBBpower = UpTrend and BearPower < 0 and BearPower > BearPower[1]
srcBBpower = DownTrend and BullPower > 0 and BullPower < BullPower[1]
if barindex < 20 then
   calcRatingBBpower=undefined
else
   if maBBpower=srcBBpower then
      calcRatingBBpower=0
   elsif maBBpower<srcBBpower then
      calcRatingBBpower=1
   elsif maBBpower>srcBBpower then
      calcRatingBBpower=-1
   endif
   calcBBpower=1
endif
//---UO
maUO = UO > 70
srcUO = UO < 30
if barindex < 56 then
   calcRatingUO=undefined
else
   if maUO=srcUO then
      calcRatingUO=0
   elsif maUO<srcUO then
      calcRatingUO=1
   elsif maUO>srcUO then
      calcRatingUO=-1
   endif
   calcUO=1
endif
//---Rating calculation
ratingOtherC = calcUO+calcBBpower+calcWR+calcStoRSI+calcMACD+calcMOM+calcAO+calcADX+calcCCI+calcSto+calcRSI

ratingOther = calcRatingUO+calcRatingBBpower+calcRatingWR+calcRatingStoRSI+calcRatingMACD+calcRatingMOM+calcRatingAO+calcRatingADX+calcRatingCCI+calcRatingSto+calcRatingRSI

if ratingOtherC>0 then
   rateOther = ratingOther/ratingOtherC
else
   rateOther = undefined
endif
//----------------------------------------------------------//
//-----Rating Total-----------------------------------------//
rateTotal = (rateMA+rateOther)/2
//----------------------------------------------------------//
StrongBound = 0.5
WeakBound = 0.1

if ratingSignal=1 then
   tradeSignal = rateMA
elsif ratingSignal=2 then
   tradeSignal = rateOther
else
   tradeSignal = rateTotal
endif
//----------------------------------------------------------//
//-----Gradient---------------------------------------------//
poscond = tradeSignal > WeakBound
negcond = tradeSignal < -WeakBound

if poscond then
   posseries = tradeSignal
else
   posseries = 0
endif
if negcond then
   negseries = tradeSignal
else
   negseries = 0
endif

//count_rising(posseries)
if posseries > 0 then
   vplot=posseries
else
   vplot=-posseries
endif
if vplot=0 then
   poscount=0
elsif vplot>=vplot[1] then
   poscount=min(5,poscount+1)
elsif vplot<vplot[1] then
   poscount=max(1,poscount-1)
endif
//count_rising(negseries)
if negseries > 0 then
   vplot1=negseries
else
   vplot1=-negseries
endif
if vplot1=0 then
   negcount=0
elsif vplot1>=vplot1[1] then
   negcount=min(5,negcount+1)
elsif vplot1<vplot1[1] then
   negcount=max(1,negcount-1)
endif
//----------------------------------------------------------//

myrate1=round(rateMA,2)*100
if -StrongBound > rateMA then
   drawtext("MAs: Strong Sell #myrate1#%",-200,-30)anchor(topright,xshift,yshift)
   r=255
   g=0
   b=0
elsif rateMA < -weakbound then
   drawtext("MAs: Sell #myrate1#%",-200,-30)anchor(topright,xshift,yshift)
   r=125
   g=0
   b=0
elsif rateMA > Strongbound then
   drawtext("MAs: Strong Buy #myrate1#%",-200,-30)anchor(topright,xshift,yshift)
   r=0
   g=0
   b=255
elsif rateMA > weakbound then
   drawtext("MAs: Buy #myrate1#%",-200,-30)anchor(topright,xshift,yshift)
   r=0
   g=0
   b=125
else
   drawtext("MAs: Neutral #myrate1#%",-200,-30)anchor(topright,xshift,yshift)
   r=124
   g=124
   b=124
endif

myrate2=round(rateOther,2)*100
if -StrongBound > rateOther then
   drawtext("Oscillators: Strong Sell #myrate2#%",-200,-50)anchor(topright,xshift,yshift)
   r=255
   g=0
   b=0
elsif rateOther < -weakbound then
   drawtext("Oscillators: Sell #myrate2#%",-200,-50)anchor(topright,xshift,yshift)
   r=125
   g=0
   b=0
elsif rateOther > Strongbound then
   drawtext("Oscillators: Strong Buy #myrate2#%",-200,-50)anchor(topright,xshift,yshift)
   r=0
   g=0
   b=255
elsif rateOther > weakbound then
   drawtext("Oscillators: Buy #myrate2#%",-200,-50)anchor(topright,xshift,yshift)
   r=0
   g=0
   b=125
else
   drawtext("Oscillators: Neutral #myrate2#%",-200,-50)anchor(topright,xshift,yshift)
   r=124
   g=124
   b=124
endif
myrate3=round(rateTotal,2)*100
if -StrongBound > rateTotal then
   drawtext("All: Strong Sell #myrate3#%",-200,-70)anchor(topright,xshift,yshift)
   r=255
   g=0
   b=0
elsif rateTotal < -weakbound then
   drawtext("All: Sell #myrate3#%",-200,-70)anchor(topright,xshift,yshift)
   r=125
   g=0
   b=0
elsif rateTotal > Strongbound then
   drawtext("All: Strong Buy #myrate3#%",-200,-70)anchor(topright,xshift,yshift)
   r=0
   g=0
   b=255
elsif rateTotal > weakbound then
   drawtext("All: Buy #myrate3#%",-200,-70)anchor(topright,xshift,yshift)
   r=0
   g=0
   b=125
else
   drawtext("All: Neutral #myrate3#%",-200,-70)anchor(topright,xshift,yshift)
   r=124
   g=124
   b=124
endif

//----------------------------------------------------------//
stradeSignal=average[6,1](tradeSignal)
//----------------------------------------------------------//
if showema then
   p1 = rateMA
   p2 = rateMA*(-1)
   COLORBETWEEN(p1,p2,r,g,b)
else
   p1 = undefined
   p2 = undefined
endif
if showosc then
   p3 = rateOther-2.5
   p4 = rateOther*(-1)-1.5
   COLORBETWEEN(p3,p4,r,g,b)
else
   p3 = undefined
   p4 = undefined
endif
if showtotal then
   p5 = stradeSignal + 2
   p6 = stradeSignal*(-1) + 2
   COLORBETWEEN(p5,p6,r,g,b)
else
   p5 = undefined
   p6 = undefined
endif
//----------------------------------------------------------//
//-----Trend Line-------------------------------------------//
sline = average[6,2](rateMA)
if showtrend then
   uplevel=-3
   dwlevel=-7
   p7=(sline*2)-5
else
   uplevel=undefined
   dwlevel=undefined
   p7=undefined
endif
//----------------------------------------------------------//
return p1,p2,p3,p4,p5,p6,p7 as "Trend Line"coloured(r,g,b)style(line,5),uplevel,dwlevel

Download
Filename: PRC_Technical-Ratings-Pro.itf
Downloads: 89
Iván González Master
Currently debugging life, so my bio is on hold. Check back after the next commit for an update.
Author’s Profile

Comments

Logo Logo
Loading...