File Name: SuperTrend.efs

Description:
Based on SuperTrend indicator by Olivier Seban.

Formula Parameters:
Numbers of Period 10
Multiplier 3.0

Notes:
NA


Download File:
SuperTrend.efs



EFS Code:
PHP 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

Notes:


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(20);

    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(gNbrPeriodsgMultiplier,gColorUpgColorDn)
{
    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>0setBarFgColor(gColorUp);
    else 
setBarFgColor(gColorDn);

    var 
nUp 0nDn =0nTrendDir 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,xATRxMPr)
{
    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,xATRxMPr)
{
    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<curTrendValuenDn1 curTrendValue;
        else 
curTrendValue nDn1;
    }
    else
    {
        if (
nUp1>curTrendValuenUp1 curTrendValue;
        else 
curTrendValue nUp1;
    }
 
    if (
nCls>nUp1) {nTrendDir 1curTrendValue nDn1}
    else if (
nCls<nDn1) {nTrendDir=-1curTrendValue nUp1}
    else if (
nTrendDir1==1nTrendDir 1;
    else if (
nTrendDir1==-1nTrendDir = -1;
    
    return 
nTrendDir;
}

function 
calcTrend(xTrendDirxUp,xDn,xCls)
{
    var 
nTrend 0;
    var 
nTDir xTrendDir.getValue(0);
    var 
nTDir1 xTrendDir.getValue(-1);
    var 
nUp xUp.getValue(0);
    var 
nUp1 xUp.getValue(-1);
    var 
nDn xDn.getValue(0);
    var 
nDn1 xDn.getValue(-1);
    var 
nCls xCls.getValue(0);
    if (
nTDir==null && nTDir1==null && nUp==null && nUp1==null && nDn==null && nDn1==null) return;

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

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