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:
Description:
StepSto
Formula Parameters:
Length ATR : 10
K Slow : 1
K Fast : 1
TopBand : 70
LowBand : 30
Notes:
Download File:
StepSto.efs
EFS Code:
PHP 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);
}