StochOfCCI.efs
EFSLibrary - Discussion Board
File Name: StochOfCCI.efs
Description:
This study is based on The CCI Stochastic by Barbara Star, PH.D., which appeared in the September 2004 issue of Active Trader Magazine.
Formula Parameters:
- nCCILength - 14
- CCISource - Close - [Close, High, Low, Open, HL/2, HLC/3, OHLC/4]
- Stoch2 %K Length - 5
- Stoch2 %K Smoothing - 3
- Stoch2 %D Length - 3
- Upper Band - 80
- Lower Band - 20
- Band's Color - Black
- Display Bands - True - [True, False]
- Line Thickness - 2
- Line Color - Blue
- Arrow Size - 10
- Display Arrows - True - [True, False]
Notes:
The related article is copyrighted material. If you are not a subscriber of Active Trader Magazine, please visit www. activetradermag.com.
Download File:
StochOfCCI.efs
EFS Code:
/***************************************************************** Provided By : eSignal. (c) Copyright 2004 Study: Stochastic of CCI - Barbara Star *****************************************************************/ function preMain() { setStudyTitle("Stochastic of CCI"); setCursorLabelName("SoCCI \%K", 0); setDefaultBarFgColor(Color.blue, 0); setStudyMax(110); setStudyMin(-5); // Study Parameters var sp1 = new FunctionParameter("nCCILength", FunctionParameter.NUMBER); sp1.setLowerLimit(1); sp1.setDefault(14); //Edit this value to set a new default var sp2 = new FunctionParameter("nCCISource", FunctionParameter.STRING); sp2.setName("CCISource"); sp2.addOption("Close"); sp2.addOption("High"); sp2.addOption("Low"); sp2.addOption("Open"); sp2.addOption("HL/2"); sp2.addOption("HLC/3"); sp2.addOption("OHLC/4"); sp2.setDefault("Close"); //Edit this value to set a new default var sp4 = new FunctionParameter("nKlength2", FunctionParameter.NUMBER); sp4.setName("Stoch2 \%K Length"); sp4.setLowerLimit(1); sp4.setDefault(5); var sp5 = new FunctionParameter("nKsmooth2", FunctionParameter.NUMBER); sp5.setName("Stoch2 \%K Smoothing"); sp5.setLowerLimit(1); sp5.setDefault(3); var sp6 = new FunctionParameter("nDlength2", FunctionParameter.NUMBER); sp6.setName("Stoch2 \%D Length"); sp6.setLowerLimit(1); sp6.setDefault(3); // Formula Parameters var fp1 = new FunctionParameter("nBand1", FunctionParameter.NUMBER); fp1.setName("Upper Band"); fp1.setDefault(80); var fp2 = new FunctionParameter("nBand2", FunctionParameter.NUMBER); fp2.setName("Lower Band"); fp2.setDefault(20); var fp3 = new FunctionParameter("cBands", FunctionParameter.COLOR); fp3.setName("Band's Color"); fp3.setDefault(Color.black); var fp4 = new FunctionParameter("bBands", FunctionParameter.STRING); fp4.setName("Display Bands"); fp4.addOption("True"); fp4.addOption("False"); fp4.setDefault("True"); var fp5 = new FunctionParameter("nThickness", FunctionParameter.NUMBER); fp5.setName("Line Thickness"); fp5.setLowerLimit(1); fp5.setDefault(2); var fp6 = new FunctionParameter("cLineColor", FunctionParameter.COLOR); fp6.setName("Line Color"); fp6.setDefault(Color.blue); var fp7 = new FunctionParameter("nArrowSize", FunctionParameter.NUMBER); fp7.setName("Arrow Size"); fp7.setLowerLimit(1); fp7.setDefault(10); var fp4 = new FunctionParameter("bArrows", FunctionParameter.STRING); fp4.setName("Display Arrows"); fp4.addOption("True"); fp4.addOption("False"); fp4.setDefault("True"); } var bEdit = true; var study = null; var vCCI = null; var vK2 = null; var vK2_1 = null; var vD2 = null; var aCCI = null; var aStochK2 = null; var cntr = 0; function main(nCCILength, nCCISource, nKlength2, nKsmooth2, nDlength2, nBand1, nBand2, cBands, bBands, nThickness, cLineColor, nArrowSize, bArrows) { var nState = getBarState(); if (bEdit == true) { addBand(nBand1, PS_SOLID, 1, cBands, "SoS Upper"); addBand(nBand2, PS_SOLID, 1, cBands, "SoS Lower"); setDefaultBarThickness(nThickness); setDefaultBarFgColor(cLineColor); if (bBands == "False") { removeBand("SoS Upper"); removeBand("SoS Lower"); } if (aCCI == null) aCCI = new Array((Math.round(nKlength2) + Math.round(nKsmooth2) -1)); if (aStochK2 == null) aStochK2 = new Array(Math.round(nDlength2)); bEdit = false; } if (nState == BARSTATE_NEWBAR) { cntr += 1; if (cntr == 300) cntr = 0; if (vCCI != null) { aCCI.pop(); aCCI.unshift(vCCI); } if (vK2 != null) { vK2_1 = vK2; aStochK2.pop(); aStochK2.unshift(vK2); } } if (study == null) study = new CCIStudy(Math.round(nCCILength), nCCISource); if (study == null) return; vCCI = study.getValue(CCIStudy.CCI); if (vCCI == null) return; aCCI[0] = vCCI; if (aCCI[Math.round(nKlength2) - 1] == null) return; vK2 = StochK2(Math.round(nKlength2), Math.round(nKsmooth2)); if (vK2 == null) return; aStochK2[0] = vK2; if (bArrows == "True") { // Short signal if (vK2_1 > nBand1 && vK2 < nBand1) { drawTextRelative(0,vK2+10,"ê",Color.red,null, Text.BOTTOM|Text.CENTER|Text.BOLD, "Wingdings",Math.round(nArrowSize),"S"+cntr); } // Long signal if (vK2_1 < nBand2 && vK2 > nBand2) { drawTextRelative(0,vK2-10,"é",Color.green,null, Text.TOP|Text.CENTER|Text.BOLD, "Wingdings",Math.round(nArrowSize),"B"+cntr); } } return vK2; } /*********************/ /***** Functions *****/ /*********************/ function StochHH(nInputOffset, nInputLength) { var nOffset = nInputOffset; var nLength = nInputLength; var hh = 0; var i = 0; for(i = 0; i < nLength; i++) { if(i == 0) { hh = aCCI[i+nOffset]; } else { hh = Math.max(hh, aCCI[i+nOffset]); } } return hh; } function StochLL(nInputOffset, nInputLength) { var nOffset = nInputOffset; var nLength = nInputLength; var ll = 0; var i = 0; for(i = 0; i < nLength; i++) { if(i == 0) { ll = aCCI[i+nOffset]; } else { ll = Math.min(ll, aCCI[i+nOffset]); } } return ll; } function StochK2(inputLength, inputSmoothing) { var percentK; var StochK; var ll, hh; var sum = 0; var i = 0; var nOffset = 0; var nDO; var nLength = inputLength; var nSmoothing = inputSmoothing; for(i = 0; i < nSmoothing; i++) { nDO = i + nOffset; StochK = aCCI[nDO]; ll = StochLL(nDO, nLength); if(ll == null) return null; hh = StochHH(nDO, nLength); if(hh == null) return null; percentK = ((StochK - ll) / (hh - ll)) * 100; sum += percentK; } sum /= nSmoothing; return sum; }