EMA Predictive

ICE Data Services -

EMAPredictive.efs  
EFSLibrary - Discussion Board  

File Name: EMAPredictive.efs

Description:
EMA Predictive

Formula Parameters:

  • Long Period : 25
  • Short Period : 8
  • Extra Time Forward : 1

Notes:
Traditional moving averages, as simple-minded linear filters, have significant group delay.
In engineering that isn't so important as nobody cares if your sound from your iPod is delayed
a few milliseconds after it is first processed. But in markets, you can't trade on the smoothed price, only the actual noisy, market price now. Hence you ought to estimate better.
This statistic (what math/science people call what technical analysts call an 'indicator') may be useful as the "fast" moving average in a moving average crossover trading system.
It could also be useful for the slow moving average as well.

Download File:
EMAPredictive.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:        
    EMA Predictive
    
Version:            1.0  09/15/2009
 
Formula Parameters:                     Default:
    Long Period                         25
    Short Period                        8
    Extra Time Forward                  1
   
Notes:
    Traditional moving averages, as simple-minded linear filters, have significant group delay.
    In engineering that isn't so important as nobody cares if your sound from your iPod is delayed
    a few milliseconds after it is first processed.  But in markets, you can't
    trade on the smoothed price, only the actual noisy, market price now.   Hence you 
    ought to estimate better.
    This statistic (what math/science people call what technical analysts call an 'indicator')
    may be useful as the "fast" moving average in a moving average crossover trading system.
    It could also be useful for the slow moving average as well.    
**********************************/
var fpArray = new Array();
var bInit = false;

function preMain(){
    setPriceStudy(true);
    setShowCursorLabel(true);
    setShowTitleParameters(false);
    setStudyTitle("EMA Predictive");
    setCursorLabelName("EMAP", 0);
    setPlotType(PLOTTYPE_LINE, 0);
    setDefaultBarThickness(2, 0);
    setDefaultBarFgColor(Color.green, 0);
    var x = 0;
    fpArray[x] = new FunctionParameter("LongPeriod", FunctionParameter.NUMBER);
    with(fpArray[x++]) {
        setName("Long Period");
        setLowerLimit(1);
        setDefault(25);
    }    
    fpArray[x] = new FunctionParameter("ShortPeriod", FunctionParameter.NUMBER);
    with(fpArray[x++]) {
        setName("Short Period");
        setLowerLimit(1);
        setDefault(8);
    }    
    fpArray[x] = new FunctionParameter("ExtraTimeForward", FunctionParameter.NUMBER);
    with(fpArray[x++]) {
        setName("Extra Time Forward");
        setLowerLimit(0.000001);
        setDefault(1);
    }        
}

var xEMAPredictive = null;

function main(LongPeriod, ShortPeriod, ExtraTimeForward) {
var nBarState = getBarState();
var nEMAPredictive = 0;
    if (nBarState == BARSTATE_ALLBARS) {
        if(LongPeriod == null) LongPeriod = 25;
        if(ShortPeriod == null) ShortPeriod = 8;
        if(ExtraTimeForward == null) ExtraTimeForward = 1;
	}
	if (bInit == false) {
        xEMAPredictive = efsInternal("Calc_EMAPredictive", LongPeriod, ShortPeriod, ExtraTimeForward);
        bInit = true;
	}
	nEMAPredictive = xEMAPredictive.getValue(0);
    if (nEMAPredictive == null) return;
    return nEMAPredictive;
}

var bSecondInit = false;
var xFma = null;
var xSma = null;

function Calc_EMAPredictive(LongPeriod, ShortPeriod, ExtraTimeForward) {
var nRes = 0;
	if (bSecondInit == false) {
        xFma = ema(ShortPeriod);
        xSma = ema(LongPeriod);
        bSecondInit = true;
	}
	var nFma = xFma.getValue(0);
	var nSma = xSma.getValue(0);
    if (nSma == null) return;
    var t1 = (LongPeriod - 1.0) / 2.0;
    var t3 = (ShortPeriod - 1.0) / 2.0;
    var t = ShortPeriod + ExtraTimeForward;
    var slope1 = (nFma - nSma) / (t1-t3);
    nRes = nFma + slope1 * t;
    return nRes;
}