2010 May: Smoothing The Bollinger %b

ICE Data Services -

SmoothBollingerB.efs  

EFSLibrary - Discussion Board  

 

File Name: SmoothBollingerB.efs

Description:
Smoothing The Bollinger %b

 

Formula Parameters:

  • %b Period : 18
  • Tema Average : 8
  • Standard Deviation High : 1.6
  • Standard Deviation Low : 1.6
  • Standard Deviation Period : 63

Notes:
The related article is copyrighted material. If you are not a subscriber of Stocks & Commodities, please visit www.traders.com.

 

Download File:
SmoothBollingerB.efs



EFS Code:

/*********************************
Provided By:  
    eSignal (Copyright c eSignal), a division of Interactive Data 
    Corporation. 2010. 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:        
    Smoothing The Bollinger %b
    
Version:            1.00  03/11/2010

Formula Parameters:                     Default:
    %b Period                           18
    Tema Average                        8
    Standard Deviation High             1.6
    Standard Deviation Low              1.6
    Standard Deviation Period           63
    
Notes:
    The related article is copyrighted material. If you are not a subscriber
    of Stocks & Commodities, please visit www.traders.com.

**********************************/
var fpArray = new Array();
var bInit = false;
var bVersion = null;

function preMain() {
    setPriceStudy(false);
    setShowCursorLabel(true);
    setShowTitleParameters(false);
    setStudyTitle("Smoothing The Bollinger %b");
    setCursorLabelName("SVE BB%b", 0);
    setDefaultBarFgColor(Color.blue, 0);
    setPlotType(PLOTTYPE_LINE, 0);
    setDefaultBarThickness(2, 0);
    setCursorLabelName("UP Level", 1);
    setDefaultBarFgColor(Color.red, 1);
    setPlotType(PLOTTYPE_LINE, 1);
    setDefaultBarThickness(1, 1);
    setCursorLabelName("Down Level", 2);
    setDefaultBarFgColor(Color.red, 2);
    setPlotType(PLOTTYPE_LINE, 2);
    setDefaultBarThickness(1, 2);
    var x=0;
    fpArray[x] = new FunctionParameter("Period", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setName("%b Period");
        setLowerLimit(1);		
        setUpperLimit(100);		
        setDefault(18);
    }    
    fpArray[x] = new FunctionParameter("TeAv", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setName("Tema Average");
        setLowerLimit(1);		
        setUpperLimit(30);		
        setDefault(8);
    }        
    fpArray[x] = new FunctionParameter("afwh", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setName("Standard Deviation High");
        setLowerLimit(0.1);		
        setUpperLimit(5);		
        setDefault(1.6);
    }        
    fpArray[x] = new FunctionParameter("afwl", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setName("Standard Deviation Low");
        setLowerLimit(0.1);		
        setUpperLimit(5);		
        setDefault(1.6);
    }        
    fpArray[x] = new FunctionParameter("afwper", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setName("Standard Deviation Period");
        setLowerLimit(1);		
        setUpperLimit(200);		
        setDefault(63);
    }            
}

var xSVE_BB = null;
var xStdev_SVE_BB = null;

function main(Period, TeAv, afwh, afwl, afwper) {
var nBarState = getBarState();
var nSVE_BB = 0;
var nStdev_SVE_BB = 0;
var nHLevel = 0;
var nLLevel = 0;
    if (bVersion == null) bVersion = verify();
    if (bVersion == false) return;   
    if (nBarState == BARSTATE_ALLBARS) {
        if (Period == null) Period = 18;
        if (TeAv == null) TeAv = 8;
        if (afwh == null) afwh = 1.6;
        if (afwl == null) afwl = 1.6;
        if (afwper == null) afwper = 63;        
    }    
    if (!bInit) { 
        addBand(50, PS_SOLID, 1, Color.blue, "Middle Line");    
        xSVE_BB = efsInternal("Calc_SVE_BB", Period, TeAv);
        xStdev_SVE_BB = efsInternal("StdDev", xSVE_BB, afwper);
        bInit = true; 
    }
    nSVE_BB = xSVE_BB.getValue(0);
    nStdev_SVE_BB = xStdev_SVE_BB.getValue(0);
    if (nSVE_BB == null || nStdev_SVE_BB == null) return;
    nHLevel = 50 + afwh * nStdev_SVE_BB;
    nLLevel = 50 - afwl * nStdev_SVE_BB;;
    return new Array(nSVE_BB, nHLevel, nLLevel);
}

var bSecondInit = false;
var xOHLC4 = null;
var xhaClose = null;
var xhaC = null;
var xTMA1 = null;
var xTMA2 = null;
var xDiff = null;
var xZlHA = null;
var xTemaZlHA = null;
var xStdevTemaZlHA = null;
var xWMATemaZlHA = null;

function Calc_SVE_BB(Period, TeAv) {
var nTemaZlHA = 0;
var nStdevTemaZlHA = 0;
var nWMATemaZlHA = 0;
var nRes = 0;
    if (bSecondInit == false) {
        xOHLC4 = ohlc4();
        xhaOpen = efsInternal("Calc_haOpen", xOHLC4);
        xhaC = efsInternal("Calc_haC", xOHLC4, xhaOpen);
        xTMA1 = efsInternal("TEMA", xhaC, TeAv);
        xTMA2 = efsInternal("TEMA", xTMA1, TeAv);
        xDiff = efsInternal("Calc_Diff", xTMA1, xTMA2);
        xZlHA = efsInternal("Calc_ZlHA", xTMA1, xDiff);
        xTemaZlHA = efsInternal("TEMA", xZlHA, TeAv);
        xStdevTemaZlHA = efsInternal("StdDev", xTemaZlHA, Period);
        xWMATemaZlHA = wma(Period, xTemaZlHA);
        bSecondInit = true;
    }
    nTemaZlHA = xTemaZlHA.getValue(0);
    nStdevTemaZlHA = xStdevTemaZlHA.getValue(0);
    nWMATemaZlHA = xWMATemaZlHA.getValue(0);
    nRes = (nTemaZlHA + 2 * nStdevTemaZlHA - nWMATemaZlHA) / (4 * nStdevTemaZlHA) * 100;
    if (nRes == null) return;
    return nRes;
}

var xEMA1 = null;
var xEMA2 = null;
var xEMA3 = null;
var bInitTEMA = false; 
        
function TEMA(xPrice, Length) {
var nTEMA = 0;
    if ( bInitTEMA == false ) { 
        xEMA1 = ema(Length, xPrice);
        xEMA2 = ema(Length, xEMA1);
        xEMA3 = ema(Length, xEMA2);        
        bInitTEMA = true; 
    } 
    if (xEMA1.getValue(0) == null || xEMA2.getValue(0) == null || xEMA3.getValue(0) == null) return;
    nTEMA = 3 * xEMA1.getValue(0) - 3 * xEMA2.getValue(0) + xEMA3.getValue(0);
    return nTEMA;
}

function Calc_haOpen(xOHLC4) {
var nRes1 = 0;
var nRef = ref(-1);
    if (nRef == null) nRef = 1;
    nRes1 = (nRef + xOHLC4.getValue(-1)) / 2 ;
    if (nRes1 == null) return;
    return nRes1;
}

function Calc_haC(xOHLC4, xhaOpen) {
var nRes2 = 0;
    nRes2 = (xOHLC4.getValue(0) + xhaOpen.getValue(0) + Math.max(high(0), xhaOpen.getValue(0)) + Math.min(low(0), xhaOpen.getValue(0))) / 4;
    if (nRes2 == null) return;
    return nRes2;
}

function Calc_Diff(xTMA1, xTMA2) {
var nRes = 0;
    nRes = xTMA1.getValue(0) - xTMA2.getValue(0);
    if (nRes == null) return;
    return nRes;
}

function Calc_ZlHA(xTMA1, xDiff) {
var nRes = 0;
    nRes = xTMA1.getValue(0) + xDiff.getValue(0);
    if (nRes == null) return;
    return nRes;
}

function StdDev(DataArray, Period) {
 var sum = 0;
 var avg = 0;
 var nRes = 0;
    for (var barsBack = Period-1; barsBack >= 0; barsBack--) {
     sum += DataArray.getValue(-barsBack);
   }
    avg = sum / Period;
    sum = 0;
    for (var barsBack = Period - 1; barsBack >= 0; barsBack--) {
      sum += (DataArray.getValue(-barsBack) - avg) * (DataArray.getValue(-barsBack) - avg);
    }
    nRes = Math.sqrt(sum / Period);
    return nRes; 
}

function verify() {
    var b = false;
    if (getBuildNumber() < 779) {
        drawTextAbsolute(5, 35, "This study requires version 8.0 or later.", 
            Color.white, Color.blue, Text.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT,
            null, 13, "error");
        drawTextAbsolute(5, 20, "Click HERE to upgrade.@URL=http://www.esignal.com/download/default.asp", 
            Color.white, Color.blue, Text.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT,
            null, 13, "upgrade");
        return b;
    } else {
        b = true;
    }
    return b;
}