StepSto

ICE Data Services -

StepSto.efs                                                                                                           EFSLibrary - Discussion Board

File Name: StepSto.efs


Description:
StepSto

 

Formula Parameters:
Length ATR : 10
K Slow : 1
K Fast : 1
TopBand : 70
LowBand : 30

 

Notes:

Download File:
StepSto.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:        
    StepSto
Version:            1.0  09/17/2009
 
Formula Parameters:                     Default:
    Length ATR                          10
    K Slow                              1
    K Fast                              1
    TopBand                             70
    LowBand                             30
    
Notes:
    
**********************************/
var fpArray = new Array();
var bInit = false;

function preMain(){
    setPriceStudy(false);
    setShowCursorLabel(true);
    setShowTitleParameters(false);
    setStudyTitle("StepSto");
    setCursorLabelName("StepSto Slow", 0);
    setPlotType(PLOTTYPE_LINE, 0);
    setDefaultBarFgColor(Color.red, 0);
    setCursorLabelName("StepSto Fast", 1);
    setPlotType(PLOTTYPE_LINE, 1);
    setDefaultBarFgColor(Color.green, 1);
    setStudyMax(101);
    setStudyMin(-1);
    var x = 0;
    fpArray[x] = new FunctionParameter("Kfast", FunctionParameter.NUMBER);
    with(fpArray[x++]) {
        setName("K Fast");
        setLowerLimit(1);
        setDefault(1);
    }    
    fpArray[x] = new FunctionParameter("Kslow", FunctionParameter.NUMBER);
    with(fpArray[x++]) {
        setName("K Slow");
        setLowerLimit(1);
        setDefault(1);
    }    
    fpArray[x] = new FunctionParameter("LengthATR", FunctionParameter.NUMBER);
    with(fpArray[x++]) {
        setName("Length ATR");
        setLowerLimit(1);
        setDefault(10);
    }        
    fpArray[x] = new FunctionParameter("TopBand", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setLowerLimit(1);		
        setDefault(70);
    }
    fpArray[x] = new FunctionParameter("LowBand", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setLowerLimit(0);		
        setDefault(30);
    }
}

var xATR = null;
var xClose = null;
var nATRmax = 0;
var nATRmin = 110;
var SminMin1 = 99999;
var SmaxMin1 = 99999;
var SminMax1 = 0;
var SmaxMax1 = 0;
var SminMid1 = 0;
var SmaxMid1 = 0;
var SminMin0 = 99999;
var SmaxMin0 = 99999;
var SminMax0 = 0;
var SmaxMax0 = 0;
var SminMid0 = 0;
var SmaxMid0 = 0;

function main(LengthATR, Kfast, Kslow, TopBand, LowBand) {
var nBarState = getBarState();
var nATR = 0;
var linemin = 0;
var linemax = 0;
var linemid = 0;
var Sto1 = 0;
var Sto2 = 0;
var bsmin = 0;
var bsmax = 0;
var StepSizeMin = 0;
var StepSizeMax = 0;
var StepSizeMid = 0; 
var nClose = 0;
    if (nBarState == BARSTATE_ALLBARS) {
        if(LengthATR == null) LengthATR = 10;
        if(Kslow == null) Kslow = 1;
        if(Kfast == null) Kfast = 1;
        if(TopBand == null) TopBand = 70;
        if(LowBand == null) LowBand = 30;
        nATRmax = 0;
        nATRmin = 99999;
	}
	if (bInit == false) {
        addBand(TopBand, PS_SOLID, 1, Color.grey, "TopBand");
        addBand(LowBand, PS_SOLID, 1, Color.grey, "LowBand");        
        xClose = close();
        xATR = atr(LengthATR);
        bInit = true;
	}
	nATR = xATR.getValue(-1);
	if (nATR == null) return;
	if (nBarState == BARSTATE_NEWBAR) {
        SminMin1 = SminMin0;
        SmaxMin1 = SmaxMin0;
        SminMax1 = SminMax0;
        SmaxMax1 = SmaxMax0;
        SminMid1 = SminMid0;
        SmaxMid1 = SmaxMid0;
	}
	nClose = xClose.getValue(-1);
	nATRmax = Math.max(nATR, nATRmax);
    nATRmin = Math.min(nATR, nATRmin);
    StepSizeMin = (Kfast * nATRmin);
    StepSizeMax = (Kfast * nATRmax);
    StepSizeMid = (Kfast * 0.5 * Kslow * (nATRmax + nATRmin));
    SmaxMin0 = nClose + 2 * StepSizeMin;
    SminMin0 = nClose - 2 * StepSizeMin;
    SmaxMax0 = nClose + 2 * StepSizeMax;
    SminMax0 = nClose - 2 * StepSizeMax;
    SmaxMid0 = nClose + 2 * StepSizeMid;
    SminMid0 = nClose - 2 * StepSizeMid;
    if (nClose > SmaxMin1) TrendMin = 1;
    if (nClose < SminMin1) TrendMin = -1;
    if (nClose > SmaxMax1) TrendMax = 1;
    if (nClose < SminMax1) TrendMax = -1;
    if (nClose > SmaxMid1) TrendMid = 1;
    if (nClose < SminMid1) TrendMid = -1;
    if (TrendMin > 0 && SminMin0 < SminMin1) SminMin0 = SminMin1;
    if (TrendMin < 0 && SmaxMin0 > SmaxMin1) SmaxMin0 = SmaxMin1;
    if (TrendMax > 0 && SminMax0 < SminMax1) SminMax0 = SminMax1;
    if (TrendMax < 0 && SmaxMax0 > SmaxMax1) SmaxMax0 = SmaxMax1;
    if (TrendMid > 0 && SminMid0 < SminMid1) SminMid0 = SminMid1;
    if (TrendMid < 0 && SmaxMid0 > SmaxMid1) SmaxMid0 = SmaxMid1;
    if (TrendMin > 0) linemin = SminMin0 + StepSizeMin;
    if (TrendMin < 0) linemin = SmaxMin0 - StepSizeMin;
    if (TrendMax > 0) linemax = SminMax0 + StepSizeMax;
    if (TrendMax < 0) linemax = SmaxMax0 - StepSizeMax;
    if (TrendMid > 0) linemid = SminMid0 + StepSizeMid;
    if (TrendMid < 0) linemid = SmaxMid0 - StepSizeMid;
    bsmin = linemax - StepSizeMax;
    bsmax = linemax + StepSizeMax;
    Sto1 = ((linemin - bsmin) / (bsmax - bsmin)) * 100;
    Sto2 = ((linemid - bsmin) / (bsmax - bsmin)) * 100;
    return new Array(Sto1, Sto2);
}