Smoothed RSI

ICE Data Services -

SmoothedRSI.efs  

EFSLibrary - Discussion Board  

File Name: SmoothedRSI.efs

Description:
Smoothed RSI

Formula Parameters:

  • Length : 10

Notes:
This is new version of RSI oscillator indicator, developed by John Ehlers.
The main advantage of his way of enhancing the RSI indicator is smoothing with minimum of lag penalty.

Download File:
SmoothedRSI.efs


EFS Code:

/*********************************
Provided By:  
    eSignal (Copyright c eSignal), a division of Interactive Data 
    Corporation. 2009. All rights reserved. This sample eSignal 
    Formula Script (EFS) is for educational purposes only and may be 
    modified and saved under a new file name.  eSignal is not responsible
    for the functionality once modified.  eSignal reserves the right 
    to modify and overwrite this EFS file with each new release.

Description:        
    Smoothed RSI
    
Version:            1.0  05/04/2009
    
Formula Parameters:                     Default:
    Length                              10

Notes:
    This is new version of RSI oscillator indicator, developed by John Ehlers. 
    The main advantage of his way of enhancing the RSI indicator is smoothing 
    with minimum of lag penalty. 
**********************************/
var fpArray = new Array();
var bInit = false;

function preMain() {
	setPriceStudy(false);
	setStudyTitle("SRSI");
	setCursorLabelName("SRSI", 0);
	setDefaultBarFgColor(Color.blue, 0);
    setStudyMax(1.1);
    setStudyMin(-0.1);
    var x = 0;
    fpArray[x] = new FunctionParameter("Length", FunctionParameter.NUMBER);
    with(fpArray[x++]) {
        setLowerLimit(1);
        setDefault(10);
    }
}

Smooth23 = new Array();
var xSRSI = null;

function main(Length) {
var nBarState = getBarState();
var nSRSI = 0;
    if (nBarState == BARSTATE_ALLBARS) {
        if (Length == null)	Length = 10;
    } 
    if (bInit == false) {
        xSRSI = efsInternal("Calc_SRSI", Length);
        bInit = true;
    }
    nSRSI = xSRSI.getValue(0);
    if (nSRSI == null) return;
    return nSRSI;
}

var bSecondInit = false;
var xValue = null;

function Calc_SRSI(Length){
var nRes = 0;
var i = 0;
var	CU23 = 0;
var	CD23 = 0;
    if (bSecondInit == false) {
        xValue = efsInternal("Calc_Value");
        bSecondInit = true;
    }
    if (xValue.getValue(-Length) == null) return;
	for(i = 0; i < Length - 1; i++){
		if(xValue.getValue(-i) > xValue.getValue(-(i + 1)))
			CU23 += xValue.getValue(-i) - xValue.getValue(-(i + 1));
		if(xValue.getValue(-i) < xValue.getValue(-(i + 1)))
			CD23 += xValue.getValue(-(i + 1)) - xValue.getValue(-i);
	}
	if(CU23 + CD23 != 0)
	nRes = CU23/(CU23 + CD23);
	return nRes;    
}

var xClose = null;

function Calc_Value() {
var nRes = 0;
    if (xClose == null) xClose = close();
    if (xClose.getValue(-3) == null) return;
    nRes = (xClose.getValue(0) + 2 * xClose.getValue(-1) + 2 * xClose.getValue(-2) + xClose.getValue(-3) ) / 6
    return nRes;
}