2004 Feb: eSignal_HeikinAshi.efs

ICE Data Services -


eSignal_HeikinAshi.efs  EFSLibrary - Discussion Board
  

File Name: eSignal_HeikinAshi.efs


Description:
Based on Using The Heikin-Ashi Technique by Dan Valcu. This article appeared in the February 2004 issue of Stock & Commodities. The main formula is eSignal_HeikinAshi.efs. There are two other indicators from the article, which are also included below (eSignal_HA_OC.efs and eSignal_HADiffCO.efs).


Formula Parameters:
eSignal_HeikinAshi_v2_1.efs
Bullish Candles (Color): lime
Bearish Candles (Color): red
Wick (Color): grey
Smoothing: None
T3 Periods: 3
T3 V Factor: 0.5
KAMA Periods: 2

eSignal_HA_OC.efs
HA-Open Color: Red
HA-Close Color: Blue
HA-Open Thickness: 2
HA-Close Thickness: 2
Enable Alerts: true
Enable Forex Conversion: false
Forex Conversion Factor: 100000

eSignal_HADiffCO.efs
SMA Periods: 3
HA-DiffCO Color: Blue
SMA HA-DiffCO Color: Red
HA-DiffCO Thickness: 2
SMA HA-DiffCO Thickness: 2
Enable Alerts: true
Enable Forex Conversion: false
Forex Conversion Factor: 100000

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

7/28/2004 - eSignal_HA_OC.efs and eSignal_HA_DiffCO.efs Versions 1.1 now include alert arrows for crosses and Edit Studies options for disabling alerts as well as Forex price conversion and the Forex conversion factor.06/29/2011 - eSignal_HeikinAshi_v1_1.efs added option to change wick color

Download File:
eSignal_HeikinAshi.efs
eSignal_HeikinAshi_v1_1.efs Version 1.1 06/29/2011
eSignal_HeikinAshi_v2_1.efs Version 2.1 07/19/2011
eSignal_HA_OC.efsVersion 1.1  7/28/2004
eSignal_HA_DiffCO.efs Version 1.1  7/28/2004




EFS Code:






//eSignal_HeikinAshi_v2_1.efs/*********************************Provided By:      Interactive Data Corporation (Copyright ? 2010)     All rights reserved. This sample eSignal Formula Script (EFS)    is for educational purposes only. Interactive Data Corporation    reserves the right to modify and overwrite this EFS file with     each new release. 	Description:        	Heikin-Ashi with smoothingVersion:            2.1  07/19/2011Formula Parameters:                     Default:Bullish Candles                         Color.limeBearish Candles                         Color.redWick                                    Color.greySmoothing                               NoneT3 Periods                              3T3 V Factor                             0.5KAMA Periods                            2Notes:    In  version 2.1- is deleted the limitation on visible bar quantities- add possibility to change wick color - is deleted the possibility to change efsTitle from main, because this functionality is not supported- is corrected "Division by zero" mistake for KAMA Smoothing with Period = 2 (when current and previous closes are the same)**********************************/function preMain() {    setStudyTitle("Heikin-Ashi");    setCursorLabelName("HA-High", 0);    setCursorLabelName("HA-Low", 1);    setCursorLabelName("HA-Open", 2);    setCursorLabelName("HA-Close", 3);    setDefaultBarFgColor(Color.black, 0);    setDefaultBarFgColor(Color.black, 1);    setDefaultBarFgColor(Color.black, 2);    setDefaultBarFgColor(Color.black, 3);    setPlotType(PLOTTYPE_DOT, 0);    setPlotType(PLOTTYPE_DOT, 1);    setPlotType(PLOTTYPE_DOT, 2);    setPlotType(PLOTTYPE_DOT, 3);    setDefaultBarThickness(0, 0);    setDefaultBarThickness(0, 1);    setDefaultBarThickness(0, 2);    setDefaultBarThickness(0, 3);        setShowTitleParameters(true);    var fp1 = new FunctionParameter("cBull", FunctionParameter.COLOR);    fp1.setName("Bullish Candles");    fp1.setDefault(Color.green);    var fp2 = new FunctionParameter("cBear", FunctionParameter.COLOR);    fp2.setName("Bearish Candles");    fp2.setDefault(Color.red);        var fp3 = new FunctionParameter("cWick", FunctionParameter.COLOR);    fp3.setName("Wick");    fp3.setDefault(Color.grey);        var fp4 = new FunctionParameter("sSmooth", FunctionParameter.STRING);    fp4.setName("Smoothing");    fp4.addOption("None");    fp4.addOption("T3");    fp4.addOption("KAMA");    fp4.setDefault("None");        var fp5 = new FunctionParameter("nT3Periods", FunctionParameter.NUMBER);    fp5.setName("T3 Periods");    fp5.setLowerLimit(1);    fp5.setDefault(3);    var fp6 = new FunctionParameter("vFactor", FunctionParameter.NUMBER);    fp6.setName("T3 V Factor");    fp6.setLowerLimit(0);    fp6.setDefault(0.5);    var fp7 = new FunctionParameter("nKAMAPeriods", FunctionParameter.NUMBER);    fp7.setName("KAMA Periods");    fp7.setLowerLimit(2);    fp7.setDefault(2);}var haClose = null;var haOpen = null;var haClose1 = null;var haOpen1 = null;var iCntr = 0;// T3 varsvar b  = null;var b2 = null;var b3 = null;var c1 = null;var c2 = null;var c3 = null;var c4 = null;var f1 = null;var f2 = null;var e1 = null;var e2 = null;var e3 = null;var e4 = null;var e5 = null;var e6 = null;var e1_1 = 0;var e2_1 = 0;var e3_1 = 0;var e4_1 = 0;var e5_1 = 0;var e6_1 = 0;var Price = null;var bInit = false;// KAMA varsvar nBarCounter = 0;var aAMA = null;var aFPArray = new Array();var bInitialized = false;var bPrimed = false;function main(cBull, cBear, cWick, sSmooth, nT3Periods, vFactor, nKAMAPeriods) {    var nState = getBarState();        if (nState == BARSTATE_NEWBAR)     {        if ((haClose == null || haOpen == null) && close(-1) != null)         {            haClose = close(-1);            haOpen = open(-1);        }        haClose1 = haClose;        haOpen1 = haOpen;    }    if (haClose1 == null || haOpen1 == null) return;        haOpen = (haOpen1 + haClose1) / 2;    haClose = (open(0) + high(0) + low(0) + close(0)) / 4;        if (sSmooth == "T3") haClose = T3Avg(nT3Periods, vFactor, haClose);    else if (sSmooth == "KAMA") haClose = KAMA(nKAMAPeriods, haClose);    if (haClose == null) return;    var haHigh = Math.max(high(), haOpen, haClose);    var haLow = Math.min(low(), haOpen, haClose);    var vColor = Color.black;    if (haClose > haOpen) vColor = cBull;    if (haClose < haOpen) vColor = cBear;    setBarFgColor(cWick, 0);    setBarFgColor(cWick, 1);    setBarFgColor(vColor, 2);    setBarFgColor(vColor, 3);    drawLineRelative(0, haHigh, 0, haLow, PS_SOLID, 1, cWick, "Shadow"+(iCntr++));       drawLineRelative(0, haOpen, 0, haClose, PS_SOLID, 3, vColor, "Body"+(iCntr++));        var retArray = new Array(4);    retArray[0] = haHigh.toFixed(2)*1;    retArray[1] = haLow.toFixed(2)*1;    retArray[2] = haOpen.toFixed(2)*1;    retArray[3] = haClose.toFixed(2)*1;        return retArray; }//*** T3 ****var counter = 0;function T3Avg(nPeriods, vFactor, vPrice) {        if (bInit == false) {        b  = vFactor;        b2 = b * b;        b3 = b * b * b;        c1 = -b3;        c2 = 3 * b2 + 3 * b3;        c3 = -6 * b2 - 3 * b - 3 * b3;        c4 = 1 + 3 * b + b3 + 3 * b2;        f1 = 2 / (nPeriods + 1);        f2 = 1 - f1;        bInit = true;	}		if (getBarState() == BARSTATE_NEWBAR) {        e1_1 = e1;        e2_1 = e2;        e3_1 = e3;        e4_1 = e4;        e5_1 = e5;        e6_1 = e6;    }	e1 = f1 * vPrice + f2 * e1_1;	e2 = f1 * e1 + f2 * e2_1;	e3 = f1 * e2 + f2 * e3_1;	e4 = f1 * e3 + f2 * e4_1;	e5 = f1 * e4 + f2 * e5_1;	e6 = f1 * e5 + f2 * e6_1;    if ((counter++)<=nPeriods ) return null;     var T3Average = c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3;        	return T3Average;}    //*** END of T3 Functions ****//*** KAMA ****function KAMA(Period, vClose) {    var x;    var nNoise;    var nSignal;    var nSmooth;		if (bInitialized == false) {		Period = Math.round(Period);		aAMA = new Array(Period);		for ( x = 0; x < Period; x++ ) {			aAMA[x] = 0.0;		}		bInitialized = true;	}	if ( getBarState() == BARSTATE_NEWBAR ) {		aAMA.pop();		aAMA.unshift(0);		nBarCounter++;	}		if (nBarCounter < Period) return null;		    if (bPrimed == false) {        aAMA[0] = (open(0)+close(0)) / 2 + ( ( (close(0)-open(0)) / (high(0)-low(0)) ) * Math.abs( (close(0)-open(0)) / 2) );        bPrimed = true;        return aAMA[0];    } else {        aAMA[0] = vClose;    }    	nSignal = Math.abs( close(0) - close(-Period) );    	x=0;	nNoise = 0;	while(x < Period) {		nNoise += Math.abs( close(-x)-close(-(x+1)) );		x++;	}		nSmooth = Math.pow( ( nSignal/(nNoise+0.0001) ) * ( 0.6667 - 0.0645 ) + 0.0645, 2 );		aAMA[0] = aAMA[1] + nSmooth * ( close(0) - aAMA[1] );	return aAMA[0];}//*** END of KAMA ****/*********************************Provided By : eSignal. (c) Copyright 2003EFS Formula : Heikin-Ashi Open Close IndicatorVersion 1.1     7/28/20041.1* Added Alert Arrows on MA cross.* Added Option to disable Alerts* Added Option for Forex Price Conversion and Conversion FactorNotes:* Non-price study* Formula Parameters    - HA-Open Color             Default: Red    - HA-Close Color            Default: Blue    - HA-Open Thickness         Default: 2    - HA-Close Thickness        Default: 2    - Enable Alerts             Default: true    - Enabel Forex Conversion   Default: false    - Forex Conversion Factor   Default: 100000*********************************/function preMain() {    setStudyTitle("Heikin-Ashi Open Close Indicator ");    setCursorLabelName("HA-Open", 0);    setCursorLabelName("HA-Close", 1);    setShowTitleParameters(false);    var fp1 = new FunctionParameter("cOpen", FunctionParameter.COLOR);    fp1.setName("HA-Open Color");    fp1.setDefault(Color.red);    var fp2 = new FunctionParameter("cClose", FunctionParameter.COLOR);    fp2.setName("HA-Close Color");    fp2.setDefault(Color.blue);        var fp3 = new FunctionParameter("nOThickness", FunctionParameter.NUMBER);    fp3.setName("HA-Open Thickness");    fp3.setLowerLimit(1);    fp3.setDefault(2);    var fp4 = new FunctionParameter("nCThickness", FunctionParameter.NUMBER);    fp4.setName("HA-Close Thickness");    fp4.setLowerLimit(1);    fp4.setDefault(2);    var fp5 = new FunctionParameter("bAlerts", FunctionParameter.BOOLEAN);    fp5.setName("Enable Alerts");    fp5.setDefault(true);    var fp6 = new FunctionParameter("bForex", FunctionParameter.BOOLEAN);    fp6.setName("Enable Forex Conversion");    fp6.setDefault(false);    var fp7 = new FunctionParameter("nFactor", FunctionParameter.NUMBER);    fp7.setName("Forex Conversion Factor");    fp7.setLowerLimit(1);    fp7.setDefault(100000);}var haClose = null;var haOpen = null;var haClose1 = null;var haOpen1 = null;var bEdit = true;var cntr = 0;function main(cOpen, cClose, nOThickness, nCThickness, bAlerts,              bForex, nFactor) {    var nState = getBarState();        if (bEdit == true) {        setDefaultBarFgColor(cOpen, 0);        setDefaultBarFgColor(cClose, 1);        setDefaultBarThickness(nOThickness, 0);        setDefaultBarThickness(nCThickness, 1);        bEdit = false;    }        if (nState == BARSTATE_NEWBAR) {        cntr++;        if ((haClose == null || haOpen == null) && close(-1) != null) {            haClose = close(-1);            haOpen = open(-1);        }        haClose1 = haClose;        haOpen1 = haOpen;    }    if (haClose1 == null || haOpen1 == null) return;        haOpen = (haOpen1 + haClose1) / 2;    haClose = (open() + high() + low() + close()) / 4;        if (bForex == false || bForex == "false") nFactor = 1;    var retArray = new Array(2);    retArray[0] = (haOpen*nFactor).toFixed(2)*1;    retArray[1] = (haClose*nFactor).toFixed(2)*1;    // Alerts    if (haClose1 != null && haOpen1 != null && (bAlerts == true || bAlerts == "true") ) {        if (haClose1 < haOpen1 && haClose > haOpen) { // Up Arrow            drawShapeRelative(0, haClose1*nFactor, Shape.UPARROW, null, Color.lime,                Shape.TOP|Shape.ONTOP, "arrow"+cntr);        } else if (haClose1 > haOpen1 && haClose < haOpen) {  // Down Arrow            drawShapeRelative(0, haClose1*nFactor, Shape.DOWNARROW, null, Color.maroon,                Shape.BOTTOM|Shape.ONTOP, "arrow"+cntr);        } else {            removeShape("arrow"+cntr);        }    }    return retArray; } //eSignal_HADiffCO.efs/*********************************Provided By : eSignal. (c) Copyright 2003EFS Formula : Heikin-Ashi DiffCO IndicatorVersion 1.1     7/28/20041.1* Added Alert Arrows on MA cross.* Added Option to disable Alerts* Added Option for Forex Price Conversion and Conversion FactorNotes:* Non-price study* Formula Parameters    - SMA Periods               Default: 3    - HA-DiffCO Color           Default: Blue    - SMA HA-DiffCO Color       Default: Red    - HA-DiffCO Thickness       Default: 2    - SMA HA-DiffCO Thickness   Default: 2    - Enable Alerts             Default: true    - Enable Forex Conversion   Default: false    - Forex Conversion Factor   Default: 100000*********************************/function preMain() {    setStudyTitle("Heikin-Ashi DiffCO Indicator ");    setCursorLabelName("HA-DiffCO", 0);    setCursorLabelName("SMA HA-DiffCO", 1);    setShowTitleParameters(false);    var fp0 = new FunctionParameter("nLength", FunctionParameter.NUMBER);    fp0.setName("SMA Periods");    fp0.setLowerLimit(1);    fp0.setDefault(3);    var fp1 = new FunctionParameter("cDiffCO", FunctionParameter.COLOR);    fp1.setName("HA-DiffCO Color");    fp1.setDefault(Color.blue);    var fp2 = new FunctionParameter("cMADiffCO", FunctionParameter.COLOR);    fp2.setName("SMA HA-DiffCO Color");    fp2.setDefault(Color.red);        var fp3 = new FunctionParameter("nDThickness", FunctionParameter.NUMBER);    fp3.setName("HA-DiffCO Thickness");    fp3.setLowerLimit(1);    fp3.setDefault(2);    var fp4 = new FunctionParameter("nMAThickness", FunctionParameter.NUMBER);    fp4.setName("SMA HA-DiffCO Thickness");    fp4.setLowerLimit(1);    fp4.setDefault(2);    var fp5 = new FunctionParameter("bAlerts", FunctionParameter.BOOLEAN);    fp5.setName("Enable Alerts");    fp5.setDefault(true);    var fp6 = new FunctionParameter("bForex", FunctionParameter.BOOLEAN);    fp6.setName("Enable Forex Conversion");    fp6.setDefault(false);    var fp7 = new FunctionParameter("nFactor", FunctionParameter.NUMBER);    fp7.setName("Forex Conversion Factor");    fp7.setLowerLimit(1);    fp7.setDefault(100000);}var haClose = null;var haOpen = null;var haClose1 = null;var haOpen1 = null;var bEdit = true;var aDiffCO = null;var haDiffCO = null;var haDiffCO_1 = null;var vMA = null;var vMA_1 = null;var cntr = 0;function main(nLength, cDiffCO, cMADiffCO, nDThickness, nMAThickness, bAlerts,              bForex, nFactor) {    var nState = getBarState();    var i = 0;    var dSum = 0;        if (bEdit == true) {        setDefaultBarFgColor(cDiffCO, 0);        setDefaultBarFgColor(cMADiffCO, 1);        setDefaultBarThickness(nDThickness, 0);        setDefaultBarThickness(nMAThickness, 1);        aDiffCO = new Array(nLength);        bEdit = false;    }        if (nState == BARSTATE_NEWBAR) {        cntr++;        if ((haClose == null || haOpen == null) && close(-1) != null) {            haClose = close(-1);            haOpen = open(-1);        }        haClose1 = haClose;        haOpen1 = haOpen;        if (haDiffCO != null) {            aDiffCO.pop();            aDiffCO.unshift(haDiffCO);            haDiffCO_1 = haDiffCO;        }        vMA_1 = vMA;    }    if (haClose1 == null || haOpen1 == null) return;        haOpen = (haOpen1 + haClose1) / 2;    haClose = (open() + high() + low() + close()) / 4;        haDiffCO = (haClose - haOpen);    aDiffCO[0] = haDiffCO;        vMA = null;        if (aDiffCO[nLength-1] != null) {        for (i = 0; i < nLength; ++i) {            dSum += aDiffCO[i];        }        vMA = (dSum / nLength);    }        if (bForex == false || bForex == "false") nFactor = 1;    var retArray = new Array(2);    retArray[0] = (haDiffCO*nFactor).toFixed(2)*1;    retArray[1] = vMA*nFactor;    // Alerts    if (haDiffCO_1 != null && vMA_1 != null && (bAlerts == true || bAlerts == "true") ) {        if (haDiffCO_1 < vMA_1 && haDiffCO > vMA) { // Up Arrow            drawShapeRelative(0, haDiffCO_1*nFactor, Shape.UPARROW, null, Color.lime,                Shape.TOP|Shape.ONTOP, "arrow"+cntr);        } else if (haDiffCO_1 > vMA_1 && haDiffCO < vMA) {  // Down Arrow            drawShapeRelative(0, haDiffCO_1*nFactor, Shape.DOWNARROW, null, Color.maroon,                Shape.BOTTOM|Shape.ONTOP, "arrow"+cntr);        } else {            removeShape("arrow"+cntr);        }    }        return retArray; }