2004 Sept: StochOfCCI.efs

ICE Data Services -


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 2004Study:  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;}