I am using wilder's simple RSI formula (Eup/Eup+Edown) where E=summation here is my simple code rsi() is an array, it's size is dependent on period, in this case is 14, it samples price every minute, not SMAed nor EMAed, not averaged. could this be a problem? Do If rsi(i - 1) - rsi(i) > 0 Then cu = cu + (rsi(i - 1) - rsi(i)) End If If rsi(i - 1) - rsi(i) < 0 Then cd = cd + (rsi(i) - rsi(i - 1)) End If i = i - 1 Loop Until i = 0 rsi=cu/cu+cd the problem with this code/formula is inherent, when price change is very small, the RSI swings can be extreme from 0 to 100, How can I smooth my RSI without much lag. any help appreciated.
I personally like the RSI as a momentum indicator. The best RSI that I have seen (low lag and smooth) is the Jurik RSI. You can smooth a regular RSI with weighted, exponential or regular averages but they won't be nearly as good as the Jurik RSI. You can come fairly close using the regular RSI smoothed with a more adaptive average such as the T3Average.
googled on jurik RSI, no formula or pseudo code. could you provide the published formula if it's ok to do so. also is the adaptive average based on previous RSI delta? if not, I don't see how it can help with the lag.
Look into the Ehlers Optimized RSI. He uses digital signal processing methods and applies it to the RSI. Less momemtum is used with the indicator and there is greater emphasis on changes in phase cycles. The other thing I can recomend is identifying support levels in normal RSIs and adapting the oversold and overbought conditions to bear or bull markets.
Mark Jurik sells proprietary tools. You have to buy to use those. There is no free code posted for these anywhere. His JMA average and RSI are the best I've seen in terms of smoothness and low lag. You originally asked about smoothing an RSI. Anytime you apply smoothing to a number series you have a tradeoff between lag and smoothness. The raw RSI is lag free, but isn't very smooth. An average of the RSI will smooth the RSI, but will introduce some lag into the equation. Adaptive averages will lessen the lag while giving more smoothness. If you want to find the T3Average, do a search in the TradeStation archives (choose ARCHIVE SEARCH) on the keyword "T3Average" all years, and look for the code posted by Bob Fulks. http://purebytes.com/archives/
In addition I recently coded up the T3Average in VB based on the code provided by Bob Fulks. I'll post the code here in case you're interested. Code: Public Function T3Average_Double(Price() As Double, ByVal Period As Long, Indicator() As Double) Dim ctr&, ub&, LB& Dim E1#, E2#, E3#, E4#, E5#, E6# Dim XAlpha#, XBeta#, OldPeriod& Dim Damp&, b#, aa#, aaa#, c1#, c2#, c3#, c4# LB = Period - 1 ub = UBound(Price) ReDim Indicator(ub) Damp = -70 b = Damp * -0.01 aa = b * b aaa = b * b * b c1 = -aaa c2 = 3 * aa + 3 * aaa c3 = -6 * aa - 3 * b - 3 * aaa c4 = 1 + 3 * b + aaa + 3 * aa E1 = Price(LB) E2 = Price(LB) E3 = Price(LB) E4 = Price(LB) E5 = Price(LB) E6 = Price(LB) If Period > 0 Then For ctr = LB To ub If Period <> OldPeriod Then XAlpha = (2 / (Period + 1)) XBeta = 1 - XAlpha OldPeriod = Period End If E1 = E1 * XBeta + Price(ctr) * XAlpha E2 = E2 * XBeta + E1 * XAlpha E3 = E3 * XBeta + E2 * XAlpha E4 = E4 * XBeta + E3 * XAlpha E5 = E5 * XBeta + E4 * XAlpha E6 = E6 * XBeta + E5 * XAlpha Indicator(ctr) = c1 * E6 + c2 * E5 + c3 * E4 + c4 * E3 Next ctr End If End Function
Great! I'll get on the VB code right away... I'll compare T3Avergage & Ehler's optimized (SMA) RSI and post my findings here. Ehler's Optimized RSI method can be find on Oct issue of TA of stocks and commodities.
http://www.mesasoftware.com/pub/index.html has a link to a Word document by Ehlers on RSI smoothing. It includes EasyLanguage code. Paul