/*********************************Provided By : eSignal. (c) Copyright 2003*********************************/function preMain() { setPriceStudy(true); setStudyTitle("Price And Stochastics "); setCursorLabelName("%K", 0); setCursorLabelName("%D", 1); setDefaultBarThickness(1, 0); setDefaultBarThickness(1, 1); setDefaultBarFgColor(Color.blue, 0); setDefaultBarFgColor(Color.red, 1); var fp1 = new FunctionParameter("nKlength", FunctionParameter.NUMBER); fp1.setName("%K Length"); fp1.setLowerLimit(1); fp1.setDefault(14); var fp2 = new FunctionParameter("nKsmooth", FunctionParameter.NUMBER); fp2.setName("%K Smoothing"); fp2.setLowerLimit(1); fp2.setDefault(1); var fp3 = new FunctionParameter("nDlength", FunctionParameter.NUMBER); fp3.setName("%D Length"); fp3.setLowerLimit(1); fp3.setDefault(3); var fp4 = new FunctionParameter("nScaleLength", FunctionParameter.NUMBER); fp4.setName("Length for Scaling"); fp4.setLowerLimit(1); fp4.setDefault(50);}var aHighs = null;var aLows = null;var study = null;var vHH = null;var vLL = null;function main(nKlength, nKsmooth, nDlength, nScaleLength) { var nState = getBarState(); var vK = null; var vD = null; if (study == null) { study = new StochStudy(nKlength, nKsmooth, nDlength); aHighs = new Array(nScaleLength); aLows = new Array(nScaleLength); } if (nState == BARSTATE_NEWBAR) { aHighs.pop(); aLows.pop(); aHighs.unshift(high()); aLows.unshift(low()); } else { aHighs[0] = high(); aLows[0] = low(); } if (aHighs[nScaleLength-1] == null) return; // arrays are not filled yet vK = study.getValue(StochStudy.FAST); vD = study.getValue(StochStudy.SLOW); if (vK == null || vD == null) return; //define price scale from Highest High and Lowest Low from the last nScaleLength bars. vHH = high(); vLL = low(); for (i = 0; i < nScaleLength; ++i) { vHH = Math.max(vHH, aHighs[i]); vLL = Math.min(vLL, aLows[i]); } /*** convert stochastics to price scale (rsy equation: old stock value * ((price scale max - price scale min) / 100) + price scale min ************/ vK = ( vK * (( vHH - vLL )/100) ) + vLL; vD = ( vD * (( vHH - vLL )/100) ) + vLL; return new Array(vK, vD);} |