Modified PVO VO to match Elder Impulsive MACD
Forums › ProRealTime English forum › ProBuilder support › Modified PVO VO to match Elder Impulsive MACD
- This topic has 2 replies, 2 voices, and was last updated 3 days ago by
JS.
-
-
09/10/2025 at 5:12 PM #250649
Hi all, I don’t manage myself or with the IA to modify the original PVO VO indicator to match in color and time the Elder Impulse MACD that I found couple of years back somewhere here. This is what the IA provide that is not working, I have error message when trying to save with something in line with ending with “Return”.
//@version=13
// PVO with Elder Impulse Coloring & Divergence
DefParam DrawOnLastBarOnly = True// Parameters (Fibonacci-based)
ShortPeriod = 13
LongPeriod = 34
SignalPeriod = 5
TrendPeriod = 13// Initialize variables for divergence detection (CRITICAL in PRT)
hi = 0
lo = 100000
hico = 0
lowco = 100000
sto1b = 0
sto2b = 0
sto1h = 100000
sto2h = 100000
p1b = 0
p2b = 0
p3b = 0
p4b = 0
p1h = 100000
p2h = 100000
p3h = 100000
p4h = 100000
hico1 = 0
lowco1 = 100000// Core PVO Calculation
EMAShort = ExponentialAverage[ShortPeriod](Volume)
EMALong = ExponentialAverage[LongPeriod](Volume)
PVO = ((EMAShort – EMALong) / EMALong) * 100
SignalLine = ExponentialAverage[SignalPeriod](PVO)
Histogram = PVO – SignalLine// Elder Impulse Coloring Logic
TrendEMA = ExponentialAverage[TrendPeriod](Close)
ImpulseUp = 0
ImpulseDown = 0
ImpulseNeutral = 0IF TrendEMA > TrendEMA[1] AND Histogram > Histogram[1] THEN
ImpulseUp = Histogram
ELSIF TrendEMA < TrendEMA[1] AND Histogram < Histogram[1] THEN
ImpulseDown = Histogram
ELSE
ImpulseNeutral = Histogram
ENDIF// ZeroLag Volume Divergence Detection
EMAShort1 = ExponentialAverage[ShortPeriod](Volume)
EMAShort2 = ExponentialAverage[ShortPeriod](EMAShort1)
DiffShort = EMAShort1 – EMAShort2
ZeroLagShort = EMAShort1 + DiffShortEMALong1 = ExponentialAverage[LongPeriod](Volume)
EMALong2 = ExponentialAverage[LongPeriod](EMALong1)
DiffLong = EMALong1 – EMALong2
ZeroLagLong = EMALong1 + DiffLongZeroLagPVO = ZeroLagShort – ZeroLagLong
SignalZL1 = ExponentialAverage[SignalPeriod](ZeroLagPVO)
SignalZL2 = ExponentialAverage[SignalPeriod](SignalZL1)
DiffZL = SignalZL1 – SignalZL2
SignalZL = SignalZL1 + DiffZL// Divergence Logic
x = ZeroLagPVO
y = SignalZL
BullDiv = 0
BearDiv = 0// BEARISH DIVERGENCES PVO (as in your working MACD code)
hi = max(hi, x)
hico = max(hico, max(High, High[1]))IF x CROSSES UNDER y THEN
sto2b = sto1b
sto1b = hi
hi = 0
p3b = p1b
p2b = max(p1b, hico1)
p1b = max(Highest[3](High), hico)
IF p2b = p1b THEN
p2b = max(p3b, p4b)
ENDIF
hico = 0
hico1 = 0
ENDIFIF x < y THEN
p4b = hico1
hico1 = max(hico1, High)
ENDIFIF p1b > p2b AND sto1b < sto2b AND x CROSSES UNDER y AND x < x[1] THEN
BearDiv = Histogram
ENDIF// BULLISH PVO DIVERGENCES
lo = min(lo, x)
lowco = min(lowco, min(Low, Low[1]))IF x CROSSES OVER y THEN
sto2h = sto1h
sto1h = lo
lo = 100000
p3h = p1h
p2h = min(p1h, lowco1)
p1h = min(Lowest[3](Low), lowco)
IF p2h = p1h THEN
p2h = min(p3h, p4h)
ENDIF
lowco = 100000
lowco1 = 100000
ENDIFIF x > y THEN
p4h = lowco1
lowco1 = min(lowco1, Low)
ENDIFIF p1h < p2h AND sto1h > sto2h AND x CROSSES OVER y AND x > x[1] THEN
BullDiv = Histogram
ENDIF// RETURN statement (MUST be the last line)
RETURN ImpulseUp COLOURED(0,255,0) AS “Impulse Up (Green)”,
ImpulseDown COLOURED(255,0,0) AS “Impulse Down (Red)”,
ImpulseNeutral COLOURED(128,128,128) AS “Impulse Neutral (Gray)”,
BullDiv COLOURED(0,180,0) AS “Bullish Divergence”,
BearDiv COLOURED(180,0,0) AS “Bearish Divergence”,
Histogram AS “PVO Histogram”,
0 AS “Zero Line”09/10/2025 at 5:33 PM #250650Clarification. Maybe it is more for curiosity if you can fix the issue of the code. In the original PVO & VO I have already modified short term MA to 13, long term to 34 and signal to 5. The colors match as well. So at the end the modification I made on the origina PVO & VO seems to be fine. I didn’t modify the default value of Elder Impulse MACD so the purpose of matching is not pursued anymore.
09/10/2025 at 6:44 PM #250656Hi,
The word “Histogram” is a reserved keyword in PRT, I modified the code and replaced “Histogram” with “xHistogram”…Elder Impulsive MACD123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131//@version=13// PVO with Elder Impulse Coloring & DivergenceDefParam DrawOnLastBarOnly = True// Parameters (Fibonacci-based)ShortPeriod = 13LongPeriod = 34SignalPeriod = 5TrendPeriod = 13// Initialize variables for divergence detection (CRITICAL in PRT)hi = 0lo = 100000hico = 0lowco = 100000sto1b = 0sto2b = 0sto1h = 100000sto2h = 100000p1b = 0p2b = 0p3b = 0p4b = 0p1h = 100000p2h = 100000p3h = 100000p4h = 100000hico1 = 0lowco1 = 100000// Core PVO CalculationEMAShort = ExponentialAverage[ShortPeriod](Volume)EMALong = ExponentialAverage[LongPeriod](Volume)PVO = ((EMAShort - EMALong) / EMALong) * 100SignalLine = ExponentialAverage[SignalPeriod](PVO)xHistogram = PVO - SignalLine// Elder Impulse Coloring LogicTrendEMA = ExponentialAverage[TrendPeriod](Close)ImpulseUp = 0ImpulseDown = 0ImpulseNeutral = 0IF TrendEMA > TrendEMA[1] AND xHistogram > xHistogram[1] THENImpulseUp = xHistogramELSIF TrendEMA < TrendEMA[1] AND xHistogram < xHistogram[1] THENImpulseDown = xHistogramELSEImpulseNeutral = xHistogramENDIF// ZeroLag Volume Divergence DetectionEMAShort1 = ExponentialAverage[ShortPeriod](Volume)EMAShort2 = ExponentialAverage[ShortPeriod](EMAShort1)DiffShort = EMAShort1 - EMAShort2ZeroLagShort = EMAShort1 + DiffShortEMALong1 = ExponentialAverage[LongPeriod](Volume)EMALong2 = ExponentialAverage[LongPeriod](EMALong1)DiffLong = EMALong1 - EMALong2ZeroLagLong = EMALong1 + DiffLongZeroLagPVO = ZeroLagShort - ZeroLagLongSignalZL1 = ExponentialAverage[SignalPeriod](ZeroLagPVO)SignalZL2 = ExponentialAverage[SignalPeriod](SignalZL1)DiffZL = SignalZL1 - SignalZL2SignalZL = SignalZL1 + DiffZL// Divergence Logicx = ZeroLagPVOy = SignalZLBullDiv = 0BearDiv = 0// BEARISH DIVERGENCES PVO (as in your working MACD code)hi = max(hi, x)hico = max(hico, max(High, High[1]))IF x CROSSES UNDER y THENsto2b = sto1bsto1b = hihi = 0p3b = p1bp2b = max(p1b, hico1)p1b = max(Highest[3](High), hico)IF p2b = p1b THENp2b = max(p3b, p4b)ENDIFhico = 0hico1 = 0ENDIFIF x < y THENp4b = hico1hico1 = max(hico1, High)ENDIFIF p1b > p2b AND sto1b < sto2b AND x CROSSES UNDER y AND x < x[1] THENBearDiv = xHistogramENDIF// BULLISH PVO DIVERGENCESlo = min(lo, x)lowco = min(lowco, min(Low, Low[1]))IF x CROSSES OVER y THENsto2h = sto1hsto1h = lolo = 100000p3h = p1hp2h = min(p1h, lowco1)p1h = min(Lowest[3](Low), lowco)IF p2h = p1h THENp2h = min(p3h, p4h)ENDIFlowco = 100000lowco1 = 100000ENDIFIF x > y THENp4h = lowco1lowco1 = min(lowco1, Low)ENDIFIF p1h < p2h AND sto1h > sto2h AND x CROSSES OVER y AND x > x[1] THENBullDiv = xHistogramENDIF// RETURN statement (MUST be the last line)RETURN ImpulseUp COLOURED(0,255,0) AS "Impulse Up (Green)",ImpulseDown COLOURED(255,0,0) AS "Impulse Down (Red)",ImpulseNeutral COLOURED(128,128,128) AS "Impulse Neutral (Gray)",BullDiv COLOURED(0,180,0) AS "Bullish Divergence",BearDiv COLOURED(180,0,0) AS "Bearish Divergence",xHistogram AS "PVO Histogram",0 AS "Zero Line"2 users thanked author for this post.
-
AuthorPosts
Find exclusive trading pro-tools on