/********************************************************* Alexis C. Montenegro © March 2006 Use and/or modify this code freely. If you redistribute it please include this and/or any other comment blocks and a description of any changes you make. **********************************************************/ var fpArray = new Array(); function preMain(){ setPriceStudy(true); setStudyTitle("Acceleration Bands"); setCursorLabelName("Upper",0); setCursorLabelName("Mid",1); setCursorLabelName("Lower",2); setDefaultBarFgColor(Color.blue,0); setDefaultBarFgColor(Color.black,1); setDefaultBarFgColor(Color.red,2); var x=0; fpArray[x] = new FunctionParameter("Length", FunctionParameter.NUMBER); with(fpArray[x++]){ setLowerLimit(1); setDefault(20); } fpArray[x] = new FunctionParameter("Interval", FunctionParameter.STRING); with(fpArray[x++]){ setDefault(); } fpArray[x] = new FunctionParameter("Params", FunctionParameter.BOOLEAN); with(fpArray[x++]){ setName("Show Parameters"); setDefault(false); } } var bInit = false; var vInterval = null; var xBands = null; var xBasis = null; var xUpper = null; var xLower = null; function main(Length,Interval,Params){ if(bInit==false){ if(Interval == null) Interval = getInterval(); var vInterval = Interval; xBands = efsInternal("calcBands",Length,inv(vInterval)); xBasis = getSeries(xBands,0); xUpper = getSeries(sma(Length,getSeries(xBands,1))); xLower = getSeries(sma(Length,getSeries(xBands,2))); setShowTitleParameters(eval(Params)); bInit=true; } return new Array (xUpper,xBasis,xLower); } var xInit = false; var xAvg = null; var xHigh = null; var xLow = null; function calcBands(length,interval){ if(xInit==false){ xAvg = sma(length); xHigh = high(); xLow = low(); xInit=true; } var vH = xHigh.getValue(0); var vL = xLow.getValue(0); if(vH == null || vL == null) return; var vCalc1 = ((vH*(1+2*(((vH-vL)/((vH+vL)/2))*1000)*.001))); var vCalc2 = ((vL*(1-2*(((vH-vL)/((vH+vL)/2))*1000)*.001))); return new Array (xAvg.getValue(0),vCalc1,vCalc2); }