/*[[ Name := RSI MACD Author := Copyright © 2004, FostarFX Link := fostar_fx@yahoo.com Separate Window := Yes First Color := silver First Draw Type := histogram First Symbol := 217 Use Second Data := yes Second Color := Red Second Draw Type := Line Second Symbol := 218 ]]*/ inputs : RsiPeriod(14), Fast(13), Slow(26), Signal(9), BarsCount(180); Variable : shift(0), sum(0), MA1(0), MA2(0), MA3(0), n(0), rsi(0), bars_(0); var: smconst1(0), smconst2(0), prev(0), old_ma1(0), old_ma2(0); var: arr_index1(0), arr_index2(0), arr_index3(0); Array: Arr_Value_1[100](0); Array: Arr_Value_2[100](0); Array: Arr_Value_3[100](0); SetLoopCount(0); arr_index1 = Fast; arr_index2 = Slow; arr_index3 = Signal; smconst1 = 2 / (1 + fast); smconst2 = 2 / (1 + slow); old_ma1 = 0; old_ma2 = 0; if BarsCount > 0 then { if BarsCount > Bars then {bars_ = Bars;} else {bars_ = BarsCount;} } else {bars_ = Bars;}; For shift=bars_ Downto 0 Begin rsi = iRSIex(RsiPeriod, 0, price_close, MODE_FIRST, shift); if shift < (bars_ - (fast + slow)) then begin prev = old_ma1; MA1 = smconst1 * (rsi - prev) + prev; old_ma1 = MA1; prev = old_ma2; MA2 = smconst2 * (rsi - prev) + prev; old_ma2 = MA2; if shift < (bars_ - (fast + slow)) then SetIndexValue(shift, MA1 - MA2); Arr_Value_3[arr_index3] = MA1 - MA2; if arr_index3 = 1 then arr_index3 = signal else arr_index3 = arr_index3 - 1; sum = 0; for n = 1 to signal begin sum = sum + Arr_Value_3[n]; end; MA3 = sum/signal; if shift < (bars_ - (fast + slow + signal)) then SetIndexValue2(shift, MA3); end; End;