/********************************************************* Alexis C. Montenegro © June 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. **********************************************************/ // NOTE: // This efs requires amFunctions.efsLib in the FunctionLibrary folder. // If you do not have this file you can download it at the link below. // http://share.esignal.com/groupcontents.jsp?folder=Formulas-Libraries&groupid=10 var fpArray = new Array(); function preMain(){ setPriceStudy(false); setStudyTitle("Chande Adaptive Stochastic"); setCursorLabelName("Stoch",0); setCursorLabelName("StochMA",1); setDefaultBarFgColor(Color.blue,0); setDefaultBarFgColor(Color.red,1); var x=0; fpArray[x] = new FunctionParameter("MaxLen", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Max Length"); setLowerLimit(1); setDefault(28); } fpArray[x] = new FunctionParameter("MinLen", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Min Length"); setLowerLimit(1); setDefault(7); } fpArray[x] = new FunctionParameter("StdDevLen", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Std Dev Length"); setLowerLimit(1); setDefault(20); } fpArray[x] = new FunctionParameter("AvgLen", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Average Length"); setLowerLimit(1); setDefault(3); } fpArray[x] = new FunctionParameter("Symbol", FunctionParameter.STRING); with(fpArray[x++]){ setDefault(); } fpArray[x] = new FunctionParameter("Interval", FunctionParameter.STRING); with(fpArray[x++]){ setDefault(); } fpArray[x] = new FunctionParameter("Upper", FunctionParameter.NUMBER); with(fpArray[x++]){ setLowerLimit(0); setDefault(80); } fpArray[x] = new FunctionParameter("Lower", FunctionParameter.NUMBER); with(fpArray[x++]){ setLowerLimit(0); setDefault(20); } fpArray[x] = new FunctionParameter("Params", FunctionParameter.BOOLEAN); with(fpArray[x++]){ setName("Show Parameters"); setDefault(false); } } var xStoch = null; var xStochMA = null; var bInit = false; function main(MaxLen,MinLen,StdDevLen,AvgLen,Symbol,Interval,Upper,Lower,Params){ if(bInit==false){ if(Symbol == null) Symbol = getSymbol(); if(Interval == null) Interval = getInterval(); var vSymbol = Symbol+","+Interval; xStoch = getSeries(efsInternal("calctemp",MaxLen,MinLen,StdDevLen,sym(vSymbol))); xStochMA = getSeries(ema(AvgLen,xStoch)); addBand( Upper, PS_SOLID, 1, Color.black,"Upper"); addBand( Lower, PS_SOLID, 1, Color.black,"Lower"); bInit = true; } return new Array (xStoch, xStochMA); } var amLib = addLibrary("amFunctions.efsLib"); var xStdDev = null; var xHHStdDev = null; var xLLStdDev = null; var xInit = false; function calctemp(_maxLen,_minLen,_stddevLen,_source){ if(xInit==false){ xStdDev = amLib.amStdDev(_stddevLen); xHHStdDev = upperDonchian(_stddevLen, xStdDev); xLLStdDev = lowerDonchian(_stddevLen, xStdDev); xInit = true; } var nStdDev = xStdDev.getValue(0); var nHHStdDev = xHHStdDev.getValue(0); var nLLStdDev = xLLStdDev.getValue(0); if(nStdDev==null || nHHStdDev==null || nLLStdDev==null) return; if((nHHStdDev-nLLStdDev) > 0){ var temp = ((nStdDev - nLLStdDev)/(nHHStdDev-nLLStdDev)); }else{ var temp = 0 ; } var adaptiveLength = parseInt(_minLen + (_maxLen-_minLen)*(1-temp)) ; var vHH = upperDonchian(adaptiveLength,0); var vLL = lowerDonchian(adaptiveLength,0); if(vHH==null || vLL==null) return; if ((vHH-vLL) > 0){ var stoch = ((close(0) - vLL)/(vHH - vLL)) * 100 ; } return stoch; }