Trend Intensity Index (TII)

ICE Data Services -

TII.efs  
EFSLibrary - Discussion Board  

File Name: TII.efs

Description:
Trend Intensity Index (TII)

Formula Parameters:

  • Length TII : 30
  • Length MA : 60
  • Upper Band : 80
  • Lower Band : 20
  • Source of TII : Close

Notes:
The Trend Intensity Index indicator is used to indicate the strength of a current trend in the market. The stronger the trend, the more likely the market will continue moving in this direction insetad of changing course.

Download File:
TII.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:        
    Trend Intensity Index
    
Version:            1.0  05/20/2009
     
Formula Parameters:                     Default:
    Length TII                          30
    Length MA                           60
    Upper Band                          80
    Lower Band                          20
    Source of TII                       Close
    
Notes:
    The Trend Intensity Index indicator is used to indicate the strength 
    of a current trend in the market. The stronger the trend, the more likely 
    the market will continue moving in this direction insetad of changing course.

**********************************/
var fpArray = new Array();
var bInit = false;

function preMain() {
	setStudyTitle("Trend Intensity Index");
	setCursorLabelName("TII");
    setShowTitleParameters(false);	
	setStudyMin(-1);
	setStudyMax(101);
    var x = 0;
    fpArray[x] = new FunctionParameter("nLengthMA", FunctionParameter.NUMBER);
    with(fpArray[x++]) {
        setName("Length MA");
        setLowerLimit(1);
        setDefault(60);
    }    
    fpArray[x] = new FunctionParameter("nLengthTII", FunctionParameter.NUMBER);
    with(fpArray[x++]) {
        setName("Length TII");
        setLowerLimit(1);
        setDefault(30);
    }    
    fpArray[x] = new FunctionParameter("UpperBand", FunctionParameter.NUMBER);
    with(fpArray[x++]) {
        setName("Upper Band");
        setLowerLimit(1);
        setDefault(80);
    }    
    fpArray[x] = new FunctionParameter("LowerBand", FunctionParameter.NUMBER);
    with(fpArray[x++]) {
        setName("Lower Band");
        setLowerLimit(1);
        setDefault(20);
    }    
    fpArray[x] = new FunctionParameter("sPrice", FunctionParameter.STRING);
	with(fpArray[x++]){
        setName("Source of TII");
        addOption("open"); 
        addOption("high");
        addOption("low");
        addOption("close");
        addOption("hl2");
        addOption("hlc3");
        addOption("ohlc4"); 
        setDefault("close"); 
    }    
}

var xTII = null;

function main(sPrice, nLengthMA, nLengthTII, UpperBand, LowerBand) {
var bBarState = getBarState();
var nTII = 0;
    if (bBarState == BARSTATE_ALLBARS) {
        if (nLengthMA == null) nLengthMA = 60;
        if (nLengthTII == null) nLengthTII = 30;
        if (sPrice == null) sPrice = "close";
        if (UpperBand == null) UpperBand = 80;
        if (LowerBand == null) LowerBand = 20;
    }
    if (bInit == false) {
        addBand(LowerBand, PS_SOLID, 1, Color.red, "Lower Band");
        addBand(UpperBand, PS_SOLID, 1, Color.green, "Upper Band");
        xTII = efsInternal("Calc_TII", sPrice, nLengthMA, nLengthTII);
        bInit = true;
    }
    nTII = xTII.getValue(0);
    if (nTII == null) return;
    return nTII;
}

var bSecondInit = false;
var xMA = null;
var xSeries = null;

function Calc_TII(sPrice, nLengthMA, nLengthTII) {
var nRes = 0;
var i = 0;
var dSDP = 0;
var dSDM = 0;
var nValue = 0;
var nMA = 0;
    if (bSecondInit == false) {
        xSeries = eval(sPrice)();
        xMA = sma(nLengthMA, xSeries);
        bSecondInit = true;
    }
    nMA = xMA.getValue(0);
    if (nMA == null) return;
	for(i = 0; i < nLengthTII; i++) {
        nValue = xSeries.getValue(-i);
        if(nValue > nMA) {
            dSDP += nValue - nMA;
        } else if(nValue < nMA) {
            dSDM += nMA - nValue;
        }
	}
	nRes = (dSDP / (dSDP + dSDM)) * 100;
    return nRes;
}