QCharts_Keltner.efs

ICE Data Services -

QCharts_Keltner.efs  
EFSLibrary - Discussion Board  

File Name: QCharts_Keltner.efs

Description:
This is the Keltner study with the same parameter options as the Keltner study from QCharts with the exception of the Volume source.

Formula Parameters:

  • Length: 8
  • Source: AvgHLC
    __ [Open, High, Low, Close, AvgHL, AvgHLC, AvgOHLC, AvgOC, AvgHLC]
  • Exponential: true
  • Bands Color: blue
  • Bands Thickness: 1
  • Bands Multiplier: 1.3
  • Basis Color: red
  • Basis Thickness: 1
  • Display Basis Line: true

Notes:
The bands are based on the average of the High-Low for the same number of periods as specified by the Length parameter multiplied by the Bands Multiplier.

Download File:
QCharts_Keltner.efs


EFS Code:

/*****************************************************************
Provided By : eSignal. (c) Copyright 2006
*****************************************************************/

function preMain() {
    setPriceStudy(true);
    setStudyTitle("QCharts Keltner");
    setShowTitleParameters(false);
    
    setCursorLabelName("K-Upper", 0);
    setCursorLabelName("K-Basis", 1);
    setCursorLabelName("K-Lower", 2);

    setDefaultBarFgColor(Color.blue, 0); // upper
	setDefaultBarFgColor(Color.red, 1);  // basis
	setDefaultBarFgColor(Color.blue, 2); // lower
	
	var fp1 = new FunctionParameter("nLength", FunctionParameter.NUMBER);
        fp1.setName("Length");
        fp1.setLowerLimit(1);
        fp1.setDefault(8);
	var fp2 = new FunctionParameter("Source", FunctionParameter.STRING);
        fp2.setName("Source");
        fp2.addOption("Open");
        fp2.addOption("High");
        fp2.addOption("Low");
        fp2.addOption("Close");
        fp2.addOption("AvgHL");
        fp2.addOption("AvgHLC");
        fp2.addOption("AvgOHLC");
        fp2.addOption("AvgOC");
        fp2.setDefault("AvgHLC");
	var fp3 = new FunctionParameter("bExp", FunctionParameter.BOOLEAN);
        fp3.setName("Exponential");
        fp3.setDefault(true);
	var fp4 = new FunctionParameter("cBands", FunctionParameter.COLOR);
        fp4.setName("Bands Color");
        fp4.setDefault(Color.blue);
	var fp5 = new FunctionParameter("nBandThick", FunctionParameter.NUMBER);
        fp5.setName("Bands Thickness");
        fp5.setLowerLimit(1);
        fp5.setDefault(1);
	var fp6 = new FunctionParameter("nMult", FunctionParameter.NUMBER);
        fp6.setName("Bands Multiplier");
        fp6.setLowerLimit(0);
        fp6.setDefault(1.3);
	var fp7 = new FunctionParameter("cBasis", FunctionParameter.COLOR);
        fp7.setName("Basis Color");
        fp7.setDefault(Color.red);
	var fp8 = new FunctionParameter("nBasisThick", FunctionParameter.NUMBER);
        fp8.setName("Basis Thickness");
        fp8.setLowerLimit(1);
        fp8.setDefault(1);
	var fp9 = new FunctionParameter("bDisplay", FunctionParameter.BOOLEAN);
        fp9.setName("Display Basis Line");
        fp9.setDefault(true);
}

var bInit = false;
var xKeltner = null;

function main(nLength, Source, bExp, cBands, nBandThick, nMult, cBasis, nBasisThick, bDisplay) {
    if (bInit == false) {
        xKeltner = efsInternal("calcKeltner", nLength, Source, bExp, nMult);
        setStudyTitle("QCharts Keltner ("+ nLength + ", " + Source + ", " + bExp + ", " + nMult + ")");
        setDefaultBarFgColor(cBands, 0);
        setDefaultBarFgColor(cBasis, 1);
        setDefaultBarFgColor(cBands, 2);
        setDefaultBarThickness(nBandThick, 0);
        setDefaultBarThickness(nBasisThick, 1);
        setDefaultBarThickness(nBandThick, 2);
        bInit = true;
    }
    
    var nUpper = getSeries(xKeltner, 0);
    var nBasis = getSeries(xKeltner, 1);
    var nLower = getSeries(xKeltner, 2);
    
    if (bDisplay == false) nBasis = nBasis.toFixed(2);
    
    return new Array(nUpper, nBasis, nLower);
}


var xSource  = null;
var xBasis   = null;
var xBands   = null;
var xBandSrc = null;

function calcKeltner(nLen, src, b, n) {
    var nU, nB, nL, nAvgR
    
    if (xSource == null) {
        switch (src) {
            case "Open": 
                xSource = open();
                break;
            case "High": 
                xSource = high();
                break;
            case "Low": 
                xSource = low();
                break;
            case "Close": 
                xSource = close();
                break;
            case "AvgHL": 
                xSource = hl2();
                break;
            case "AvgOHLC": 
                xSource = ohlc4();
                break;
            case "AvgOC": 
                xSource = efsInternal("calcOC");
                break;
            default:
                xSource = hlc3();
        }
    }
    
    if (xBasis == null) {
        xBandSrc = efsInternal("calcAvgRange");
        if (b) {
            xBasis   = ema(nLen, xSource);
            xBands   = ema(nLen, xBandSrc);
        } else {
            xBasis   = sma(nLen, xSource);
            xBands   = sma(nLen, xBandSrc);
        }
    }
    
    nAvgR = xBands.getValue(0);
    nB    = xBasis.getValue(0);
    if (nB == null || nAvgR == null) return;
    
    nU = nB + (n * nAvgR);
    nL = nB - (n * nAvgR);
    
    return new Array(nU, nB, nL);
}


function calcOC() {
    return (open(0) + close(0)) / 2;
}

function calcAvgRange() {
    return (high(0) - low(0));
}