/*********************************Provided By: eSignal (Copyright c eSignal), a division of Interactive Data Corporation. 2016. 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 responsiblefor the functionality once modified. eSignal reserves the right to modify and overwrite this EFS file with each new release.Description: Exponential Standard Deviation Bands by Vitali ApirineVersion: 1.00 12/07/2016Formula Parameters: Default:Length 20# of EStdDev 2Notes:The related article is copyrighted material. If you are not a subscriberof Stocks & Commodities, please visit www.traders.com.**********************************/var fpArray = new Array();function preMain(){ setPriceStudy(true); setCursorLabelName("Upper", 0); setCursorLabelName("Middle", 1); setCursorLabelName("Lower", 2); setDefaultBarFgColor(Color.#ff6a00,1); var x = 0; fpArray[x] = new FunctionParameter("Length", FunctionParameter.INTEGER) with(fpArray[x++]){ setLowerLimit(1); setDefault(20); setName("Length"); } fpArray[x] = new FunctionParameter("MFactor", FunctionParameter.NUMBER) with(fpArray[x++]){ setLowerLimit(1); setDefault(2); setName("# of EStdDev"); }}var bInit = false;var bVersion = null;var xClose = null;var xEMA = null;var xStdDev = null;var xUpBand = null;var xLwBand = null;var bUpFlag = false;var bLwFlag = true;function main(Length, MFactor){ if (bVersion == null) bVersion = verify(); if (bVersion == false) return; if (getBarState() == BARSTATE_ALLBARS) bInit = false; if (!bInit){ xClose = close(); xEMA = ema(Length, xClose); xStdDev = efsInternal("ExpStdDev", xClose, xEMA, Length); xUpBand = efsInternal("UpperLower", xEMA, xStdDev, MFactor, bUpFlag); xLwBand = efsInternal("UpperLower", xEMA, xStdDev, MFactor, bLwFlag); bInit = true; } nUpBand = xUpBand.getValue(0); nMidBand = xEMA.getValue(0); nLwBand = xLwBand.getValue(0); if ((!isNull(nUpBand)) && (!isNull(nMidBand)) && (!isNull(nLwBand))) return [nUpBand, nMidBand, nLwBand];}function ExpStdDev(xClose, xEMA, len){ var nSum = 0; var nEMA = xEMA.getValue(0); for (var i = 0; i < len; i++){ var nClose = xClose.getValue(-i); if (!isNull(nClose) && !isNull(nEMA)){ nSum += Math.pow((nClose - nEMA), 2); } } return (Math.sqrt(nSum/len));}function UpperLower(xEMA, xStdDev, MFactor, bFlag){ var nEMA = xEMA.getValue(0); var nStdDev = xStdDev.getValue(0); nStdDev *= MFactor; if (bFlag == bLwFlag) nStdDev = -nStdDev; return (nEMA + nStdDev);}function verify(){ var b = false; if (getBuildNumber() < 779){ drawTextAbsolute(5, 35, "This study requires version 10.6 or later.", Color.white, Color.blue, Text.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT, null, 13, "error"); drawTextAbsolute(5, 20, "Click HERE to upgrade.@URL=http://www.esignal.com/download/default.asp", Color.white, Color.blue, Text.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT, null, 13, "upgrade"); return b; } else b = true; return b;} |