SuperTrend

ICE Data Services -

SuperTrend.efs                                                                                   EFSLibrary - Discussion Board

File Name: SuperTrend.efs


Description:
Based on SuperTrend indicator by Olivier Seban.

 

Formula Parameters:
Numbers of Period : 10
Multiplier: 3.0

 

Notes:

Download File:
SuperTrend.efs




EFS Code:

/*********************************
Provided By:  
    Interactive Data Corporation (Copyright © 2010) 
    All rights reserved. This sample eSignal Formula Script (EFS)
    is for educational purposes only. Interactive Data Corporation
    reserves the right to modify and overwrite this EFS file with 
    each new release. 
	
Description:        
	Based on SuperTrend indicator by Olivier Seban.

Version:            1.0  1/10/2010


Formula Parameters:                     Default:
    Numbers of Period                      10
    Multiplier                             3.0 

**********************************/

var fpArray = new Array();
function preMain()
{
    setPlotType(PLOTTYPE_INSTANTCOLORLINE);
    setPriceStudy(true);
    setStudyTitle("SuperTrend");
    setCursorLabelName("SuperTrend", 0);
    setDefaultBarThickness(2, 0);

    var x=0;
    fpArray[x] = new FunctionParameter("gNbrPeriods", FunctionParameter.NUMBER);
    with(fpArray[x++])
    {
	setName("Number of Periods");
	setLowerLimit(1);
        setDefault(10);
    }
    fpArray[x] = new FunctionParameter("gMultiplier", FunctionParameter.NUMBER);
    with(fpArray[x++])
    {
	setName("Multiplier");
        setLowerLimit(0);
        setDefault(3.0);
    }
    fpArray[x] = new FunctionParameter("gColorUp", FunctionParameter.COLOR);
    with(fpArray[x++])
    {    
        setName("Up Color");
        setDefault(Color.lime);
    }
    fpArray[x] = new FunctionParameter("gColorDn", FunctionParameter.COLOR);
    with (fpArray[x++])
    {
        setName("Down Color");
        setDefault(Color.red);
    }
}

var xTrend = null;
var xTrendDir = null;
var xUP = null;
var xDn = null;
var xATR = null;
var xMPr = null;
var xCls = null;
var bMainInit = false;
var curTrendValue = 0;
function main(gNbrPeriods, gMultiplier,gColorUp, gColorDn)
{
    if(!bMainInit)
    {
        xATR = atr(gNbrPeriods);
        xMPr = hl2();
        xCls = close();
        xUp = efsInternal("calcUp",gMultiplier,xATR,xMPr);
        xDn = efsInternal("calcDn",gMultiplier,xATR,xMPr);
        xTrendDir = efsInternal("calcTrendDir",xCls,xUp,xDn);
        xTrend = efsInternal("calcTrend",xTrendDir,xUp,xDn,xCls);
        bMainInit = true; 
    }

    var nCls = xCls.getValue(0);
    var nTrendDir = xTrendDir.getValue(0);
    var nTrendDir1 = xTrendDir.getValue(-1);
    var nUp1 = xUp.getValue(-1);
    var nDn1 = xDn.getValue(-1);

    var vTrendDir = xTrendDir.getValue(0);
    var vTrendDir1 = xTrendDir.getValue(-1);
    if (vTrendDir>0) setBarFgColor(gColorUp);
    else setBarFgColor(gColorDn);

    var nUp = 0, nDn =0, nTrendDir = 0;
    nUp = xUp.getValue(0);
    nDn = xDn.getValue(0);
    var vTrend = xTrend.getValue(0);
    if (nUp == null && nDn == null && nTrend) return;

    return vTrend;
}

function calcUp(numMult,xATR, xMPr)
{
    var nATR = 0;
    var nMPr = 0;
    var nUp = 0;
    nATR = xATR.getValue(0);
    nMPr = xMPr.getValue(0);
    if (nATR == null && nMPr == null) return;
    nUp = nMPr + numMult*nATR;
    return nUp;
}

function calcDn(numMult,xATR, xMPr)
{
    var nATR = 0;
    var nMPr = 0;
    var nDn = 0;
    nATR = xATR.getValue(0);
    nMPr = xMPr.getValue(0);
    if (nATR == null && nMPr == null) return;
    nDn = nMPr - numMult*nATR;
    return nDn;
}

function calcTrendDir(xCls,xUp,xDn)
{
    var nTrendDir = 0;
    var nUp1 = xUp.getValue(-1);
    var nDn1 = xDn.getValue(-1);
    var nCls = xCls.getValue(0);
    if (getCurrentBarCount()==1)
    {
        var nTrendDir1 = 1;
        curTrendValue = nDn1;
    }
    else var nTrendDir1=ref(-1);
    if (nUp1 == null && nDn1 == null && nCls == null) return;

    if (nTrendDir1>0)
    {
        if (nDn1<curtrendvalue) ndn1="curTrendValue;" else="" curtrendvalue="nDn1;" }="" {="" if="" (nup1="">curTrendValue) nUp1 = curTrendValue;
        else curTrendValue = nUp1;
    }
 
    if (nCls>nUp1) {nTrendDir = 1; curTrendValue = nDn1}
    else if (nCls<ndn1) {ntrenddir="-1;" curtrendvalue="nUp1}" else="" if="" (ntrenddir1="=1)" ntrenddir="1;" return="" ntrenddir;="" }="" function="" calctrend(xtrenddir,="" xup,xdn,xcls)="" {="" var="" ntrend="0;" ntdir="xTrendDir.getValue(0);" ntdir1="xTrendDir.getValue(-1);" nup="xUp.getValue(0);" nup1="xUp.getValue(-1);" ndn="xDn.getValue(0);" ndn1="xDn.getValue(-1);" ncls="xCls.getValue(0);" (ntdir="=null" &&="" return;="" if(getcurrentbarcount()="=0)">0) curTrendValue = nDn;
        else curTrendValue = nUp;
    }
    else
    {
        if (nTDir>0)
        {
            if (nDn0) nTrend=curTrendValue;
            else {curTrendValue = nDn; nTrend = nDn;}
        }

        if (nTDir<0)
        {
            if (nUp>curTrendValue && nTDir*nTDir1>0) nTrend=curTrendValue;
            else {curTrendValue = nUp; nTrend = nUp;}
        }
    }
    
    return nTrend;
}