This is the modified % bollinger bands oscillator remade by Sylvain Vervoort. It’s using an Heiken Ashi closing price instead of the classic close value with TEMA average. This indicator tend to be more accurate and less choppy for intendifying turning points of the Dow theory by counting reverse oscillation of the curve.
Because of its bounded values, it can be used as an overbought and oversold classical oscillator.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// variables : // period = 18 // TeAv = 8 // afwh = 1.6 // afwl = 1.6 // afwper = 63 haOpen = ((Open[1]+High[1]+Low[1]+Close[1])/4 + (Open[2]+High[2]+Low[2]+Close[2]))/2 haC = ((Open+High+Low+Close)/4 + haOpen + Max(high,haOpen) + Min(low,haOpen)) /4 TMA1 = tema[TeAv](haC) TMA2 = tema[TeAv](TMA1) Diff = TMA1-TMA2 ZlHA = TMA1+Diff percb = (tema[TeAv](ZLHA)+2*STD[period](tema[TeAv](ZLHA))-weightedaverage[period](tema[TeAv](ZLHA))) / (4*STD[period](tema[TeAv](ZLHA)))*100 hi = 50+afwh*STD[afwper](percb) lo = 50-afwl*STD[afwper](percb) RETURN percb as "SVE BB %b", hi as "upper band", lo as "lower band", 50 as "middle" |
Share this
No information on this site is investment advice or a solicitation to buy or sell any financial instrument. Past performance is not indicative of future results. Trading may expose you to risk of loss greater than your deposits and is only suitable for experienced investors who have sufficient financial means to bear such risk.
ProRealTime ITF files and other attachments :PRC is also on YouTube, subscribe to our channel for exclusive content and tutorials
Hi Nicolas
there’s a problem to download file
Thanks for the very nice indicator
Thank you for noticing it to me, it is now fixed. Problem came from a wrong file name..
Thanks!
Hi Nicolas,
Something looks odd with haOpen: it seems that /4 is missing in the second part of the formula.
Shouldn’t we have:
haOpen = ((Open[1]+High[1]+Low[1]+Close[1])/4 + (Open[2]+High[2]+Low[2]+Close[2])/4)/2
Thanks.
Well, I don’t remember now but I think I’ve translated it correctly from its own original code… may I ask you to make a small verification on the web? 🙂
From here:
http://traders.com/documentation/feedbk_docs/2010/05/TradersTips.html
haOpen = 0.5 * ( AvgPrice + haOpen[1] ) ;
So haOpen = ((Open[1]+High[1]+Low[1]+Close[1])/4 + (Open[2]+High[2]+Low[2]+Close[2]))/2 is probably wrong.
With this formula, if you try to plot haOpen, it is significantly shifted up from the price, which probably does not make sense.
But haOpen = ((Open[1]+High[1]+Low[1]+Close[1])/4 + (Open[2]+High[2]+Low[2]+Close[2])/4)/2 is probably wrong too…
How can we implement a formula which refers to its previous value in ProRealTime?
I made verification and all formulas on the TraderTips page refer to the previous candlestick for the haOpen calculation. This is how S.VERVOORT made this indicator.
To refer to a previous state of a value, just add offset in brackets : myvalue[20]
So the correct formula should be something like:
haOpen = ((Open[1]+High[1]+Low[1]+Close[1])/4 + haOpen[1])/2
However, this does not seem to work. Any idea why?
Because haOpen doesn’t exist at the very first bar, so the calculation can’t be made correctly (while Open/High/Low/Close do exist in the data serie). You should give haOpen a dummy value one time at first code read, like this:
ONCE haOpen = medianprice
Unfortunately, this still does not work:
ONCE haOpen = medianprice
haOpen = ((Open[1]+High[1]+Low[1]+Close[1])/4 + haOpen[1])/2
ProRealTime does not plot anything with the above formula.
What are we missing here?
Force calculation to wait 1 bar of history already loaded:
ONCE haOpen = medianprice
if barindex>1 then
haOpen = ((Open[1]+High[1]+Low[1]+Close[1])/4 + haOpen[1])/2
endif
Now it works.
Thanks a lot Nicolas!
Here is the full code:
// variables :
// period = 18
// TeAv = 8
afwh = 1.6
afwl = 1.6
afwper = 63
once haOpen = medianprice
if barindex>1 then
haOpen = ((Open[1]+High[1]+Low[1]+Close[1])/4 + haOpen[1])/2
endif
haC = ((Open+High+Low+Close)/4 + haOpen + Max(high,haOpen) + Min(low,haOpen)) /4
TMA1 = tema[TeAv](haC)
TMA2 = tema[TeAv](TMA1)
Diff = TMA1-TMA2
ZlHA = TMA1+Diff
percb = (tema[TeAv](ZLHA)+2*STD[period](tema[TeAv](ZLHA))-weightedaverage[period](tema[TeAv](ZLHA))) / (4*STD[period](tema[TeAv](ZLHA)))*100
hi = 50+afwh*STD[afwper](percb)
lo = 50-afwl*STD[afwper](percb)
RETURN percb as “SVE BB %b”, hi as “upper band”, lo as “lower band”, 50 as “middle”