/********************************************************* 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. **********************************************************/ var fpArray = new Array(); function preMain(){ setPriceStudy(true) setStudyTitle("Corrected Moving Average"); setCursorLabelName("CMA"); setPlotType(PLOTTYPE_LINE); setDefaultBarFgColor(Color.blue); var x=0 fpArray[x] = new FunctionParameter("Length", FunctionParameter.NUMBER); with(fpArray[x++]){ setLowerLimit(1); setDefault(10); } fpArray[x] = new FunctionParameter("Source", FunctionParameter.STRING); with(fpArray[x++]){ addOption("open"); addOption("high"); addOption("low"); addOption("close"); addOption("hl2"); addOption("hlc3"); addOption("ohlc4"); setDefault("close"); } 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 xCMA = null; function main(Length,Source,Interval,Params){ if(bInit==false){ if(Interval == null) Interval = getInterval(); vInterval = Interval; xCMA = getSeries(efsInternal("calcCA",Length,eval(Source)(inv(vInterval)))); bInit = true; } return xCMA; } var xInit = false; var SA = null; var x1 = null; var CA = null; var CA1 = null; function calcCA(period,source){ var K = 0; if(xInit==false){ SA = sma(period,source); x1 = efsInternal("StdDev",period,source); xInit=true; } if(SA.getValue(-period)==null) return; if(getBarState()==BARSTATE_NEWBAR){ CA1 = CA; } var v1 = Math.pow(x1.getValue(0),2); var v2 = Math.pow((CA1-SA.getValue(0)),2); if(v1==0 || v2==0) return CA; if (v2