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; }