Kaufman Moving Average Adaptive (KAMA)

ICE Data Services -


KAMA.efs  EFSLibrary - Discussion Board
  

File Name: KAMA.efs


Description:
Kaufman Moving Average Adaptive (KAMA)


Formula Parameters:
Length: 21
Price: Close

Notes:
Everyone wants a short-term, fast trading trend that works without large
losses. That combination does not exist. But it is possible to have fast
trading trends in which one must get in or out of the market quickly, but
these have the distinct disadvantage of being whipsawed by market noise
when the market is volatile in a sideways trending market. During these
periods, the trader is jumping in and out of positions with no profit-making
trend in sight. In an attempt to overcome the problem of noise and still be
able to get closer to the actual change of the trend, Kaufman developed an
indicator that adapts to market movement. This indicator, an adaptive moving
average (AMA), moves very slowly when markets are moving sideways but moves
swiftly when the markets also move swiftly, change directions or break out of
a trading range.

Download File:
KAMA.efs




EFS Code:






/*********************************Provided By:      eSignal (Copyright c eSignal), a division of Interactive Data     Corporation. 2008. 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:            Kaufman Moving Average Adaptive (KAMA)Version:            1.0  09/23/2008Notes:    Everyone wants a short-term, fast trading trend that works without large    losses. That combination does not exist. But it is possible to have fast    trading trends in which one must get in or out of the market quickly, but    these have the distinct disadvantage of being whipsawed by market noise    when the market is volatile in a sideways trending market. During these    periods, the trader is jumping in and out of positions with no profit-making    trend in sight. In an attempt to overcome the problem of noise and still be    able to get closer to the actual change of the trend, Kaufman developed an    indicator that adapts to market movement. This indicator, an adaptive moving    average (AMA), moves very slowly when markets are moving sideways but moves    swiftly when the markets also move swiftly, change directions or break out of    a trading range.Formula Parameters:                     Default:    Length                                  21    Price                                 Close**********************************/var fpArray = new Array();var bInit = false;function preMain(){    setStudyTitle("KAMA");    setCursorLabelName("KAMA", 0);    setDefaultBarFgColor(Color.red, 0);    setPlotType(PLOTTYPE_LINE,0);    setDefaultBarThickness(1,0);    setPriceStudy(true);        var x=0;    fpArray[x] = new FunctionParameter("Length", FunctionParameter.NUMBER);	with(fpArray[x++]){        setLowerLimit(1);		        setDefault(21);    }    fpArray[x] = new FunctionParameter("Price", FunctionParameter.STRING);    with(fpArray[x++]){        addOption("open");         addOption("high");        addOption("low");        addOption("close");        addOption("hl2");        addOption("hlc3");        addOption("ohlc4");         setDefault("close");     }}var xvnoise = null;var xMyPrice = null;var xAMA = null;function main(Length, Price) {var nAMA = 0;	    if (Length == null) Length = 21;    if(Price == null) Price= "close";    if ( bInit == false ) {         xMyPrice = eval(Price)();        xvnoise = efsInternal("Calc_avnoise", xMyPrice);        xAMA = efsInternal("Calc_AMA",xvnoise, xMyPrice, Length);        bInit = true;     } 	nAMA = xAMA.getValue(0);		    return nAMA;}function Calc_AMA(xvnoise, xMyPrice, Length){	var nefratio = 1;	var nAMA = 0;	var nfastend = 0.666;	var nslowend = 0.0645;	var nnoise = 0;	var nsignal = 0;	var nsmooth = 0;    var nAMA_Ref = ref(-1);	    var nBarCount = getCurrentBarCount();    if (xMyPrice.getValue(-1) == null) return 0;    if (nAMA_Ref == null) nAMA_Ref = 1;	if(nBarCount > Length){		nsignal = Math.abs(xMyPrice.getValue(0) - xMyPrice.getValue(-Length));		for(var i = 0; i < Length; i++)			nnoise += xvnoise.getValue(-i);		if(nnoise != 0)			nefratio = nsignal / nnoise;	} 		nsmooth = Math.pow(nefratio * (nfastend - nslowend) + nslowend, 2); 	if(nBarCount > Length){        nAMA = nAMA_Ref + nsmooth * (xMyPrice.getValue(0) - nAMA_Ref);    }    else if (nBarCount == Length){        nAMA = xMyPrice.getValue(0);     } else {        return;    }		return nAMA;}function Calc_avnoise(xMyPrice) {var nRes = 0;    nRes = Math.abs(xMyPrice.getValue(0) - xMyPrice.getValue(-1));    if (nRes == null) nRes = 1;    return nRes;}