Proj Bandwith

ICE Data Services -

ProjBandwith.efs  
EFSLibrary - Discussion Board  

File Name: ProjBandwith.efs

Description:
This Indicator plots the Projected Bandwidth

Formula Parameters:

  • Length : 14

Notes:

Projection bands, a new method using trading bands, projects market data forward along the data trend with the maxima and minima of the projections defining the band. The method provides another means of signaling potential changes for market direction relative to the trend.

This is an useful oscillator, the third component of the new method, the projection bandwidth indicator which is computed as the width compared with the average of the bands expressed as a percentage:

PB = 200 x (PU - PL)/(PU + PL)

Download File:
ProjBandwith.efs


EFS Code:

/*********************************
Provided By:  
    eSignal (Copyright c eSignal), a division of Interactive Data 
    Corporation. 2009. All rights reserved. This sample eSignal 
    Formula Script (EFS) is for educational purposes only and may be 
    modified and saved under a new file name.  eSignal is not responsible
    for the functionality once modified.  eSignal reserves the right 
    to modify and overwrite this EFS file with each new release.

Description:        
    This Indicator plots the Projected Bandwidth

Version:            1.0  03/18/2009

Formula Parameters:                     Default:
    Length                              14
 
Notes:
    Projection bands, a new method using trading bands, projects market 
    data forward along the data trend with the maxima and minima of the 
    projections defining the band. The method provides another means of 
    signaling potential changes for market direction relative to the trend.

    This is an useful oscillator, the third component of the new method, the 
    projection bandwidth indicator which is computed as the width compared 
    with the average of the bands expressed as a percentage:
    PB = 200 x (PU - PL)/(PU + PL)

**********************************/

var fpArray = new Array();
var bInit = false;

function preMain() {
    setPriceStudy(false);
    setShowTitleParameters(false);    
    setStudyTitle("Proj Bandwith");
    setCursorLabelName("PB");
    askForInput();
    var x=0;
    fpArray[x] = new FunctionParameter("Length", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setLowerLimit(1);		
        setDefault(14);
    }
}

var xPB = null;

function main(Length) {
var nState = getBarState();
var nPB = 0;
    if (nState == BARSTATE_ALLBARS) {
        if (Length == null) Length = 14;
    }    
    if (bInit == false) {
        xPB = efsInternal("Calc_PB", Length);
        bInit = true;
    }
    nPB = xPB.getValue(0);
    if (getCurrentBarCount() < Length || nPB == null) return;
    return nPB;
}

function Calc_PB(Length) {
    var SL = 0;
    var SH = 0;
    var SumBars = Length * (Length - 1) * 0.5;
    var SumSqrBars = (Length - 1) * Length * (2 * Length - 1) / 6;
    var Sum1_1 = 0;
    var Sum1_2 = 0;
    var SumY1 = 0;
    var SumY2 = 0;
    var i = 0;
    for (i = 0; i < Length; i++)  {
        Sum1_1 += i * low(-i);
        Sum1_2 += i * high(-i);
        SumY1 += low(-i);
        SumY2 += high(-i);
    }
    var Sum2_1 = SumBars * SumY1;
    var Sum2_2 = SumBars * SumY2;
    var Num1_1 = Length * Sum1_1 - Sum2_1;
    var Num1_2 = Length * Sum1_2 - Sum2_2;
    var Num2 = SumBars * SumBars - Length * SumSqrBars;
    SL = Num1_1 / Num2;
    SH = Num1_2 / Num2;
    var Value2 = 0;
    var Value3 = 0;
    var PL = 0;
    var PU = 0;
    for (i = 1; i <= Length; i++) {
        Value2=low(-i + 1) + (SL * i - 1);
        Value3=high(-i + 1) + (SH * i - 1);
        if (i == 1) {
            PL=Value2;
            PU=Value3;
        };
        if (Value2 < PL) PL = Value2;
        if (Value3 > PU) PU = Value3;
    }
    var PB=200 * (PU - PL) / (PU + PL);
    return PB;
}