| File Name: TEMA.efs, ZeroLag_TEMA.efs, HA_ZeroLag_TEMA.efs, ZeroLag_HA_Tema_Cross.efs
Description: These studies are based on the May 2008 article, The Quest For Reliable Cross-overs, by Sylvain Vervoort.
Formula Parameters: TEMA.efs: Periods: 10 Price Source: Close [Close, HL/2, HLC/3, OHLC/4]
ZeroLag_TEMA.efs: Periods: 10 Price Source: Close [Close, HL/2, HLC/3, OHLC/4]
HA_ZeroLag_TEMA.efs: Periods: 10
ZeroLag_HA_Tema_Cross.efs: Periods: 55 Zero Lag TEMA Price Source: HLC/3 [Close, HL/2, HLC/3, OHLC/4] Long Only: false Notes: The Zero Lag EMA study mentioned in the article can be found in the Feb. 2008 EFS KnowledgeBase article published here. The original Heiken-Ashi study mentioned in the article can be found in the Feb 2004 EFS KnowledgeBase article here. Also, the ZeroLag_HA_Tema_Cross.efs contains a formula parameter (Long Only) to force the strategy to allow only long trades, which is also configured for back testing with the Strategy Analyzer. The related article is copyrighted material. If you are not a subscriber of Stocks & Commodities, please visit www.traders.com.
Download Files: TEMA.efs ZeroLag_TEMA.efs HA_ZeroLag_TEMA.efs ZeroLag_HA_Tema_Cross.efs


EFS Code:
TEMA.efs
/*********************************Provided By: eSignal (Copyright ) 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: The Quest For Reliable Crossovers by Sylvain VervoortVersion: 1.0 3/11/2008Notes:* May 2008 Issue of Stocks and Commodities Magazine* Study requires version 8.0 or later.Formula Parameters: Defaults:Periods 10Price Source Close [Close, HL/2, HLC/3, OHLC/4]**********************************/function preMain() { setPriceStudy(true); setStudyTitle("TEMA "); setCursorLabelName("TEMA", 0); setDefaultBarFgColor(Color.blue, 0); setDefaultBarThickness(2, 0); var fp1 = new FunctionParameter("nPeriods", FunctionParameter.NUMBER); fp1.setName("Periods"); fp1.setLowerLimit(0); fp1.setDefault(10); var fp2 = new FunctionParameter("sSource", FunctionParameter.STRING); fp2.setName("Price Source"); fp2.addOption("Close"); fp2.addOption("HA Close"); fp2.setDefault("Close");}// Global Variablesvar bVersion = null; // Version flagvar bInit = false; // Initialization flagvar xTema = null;var xHaOpen = null;var xHaClose = null;function main(nPeriods, sSource) { if (bVersion == null) bVersion = verify(); if (bVersion == false) return; if (bInit == false) { xHaOpen = efsInternal("calcHaOpen"); xHaClose = efsInternal("calcHaClose", xHaOpen); if (sSource == "Close") { xSource = close(); } else { xSource = xHaClose; } xTema = efsInternal("calcTEMA", nPeriods, xSource); bInit = true; } var nTema = xTema.getValue(0); if (nTema == null) return; return nTema; }// HaOpen globalsvar nHaOpen = null;var nHaOpen_1 = null;function calcHaOpen() { if (nHaOpen_1 == null && open(-1) != null) { nHaOpen_1 = open(-1); } else if (nHaOpen != null) { nHaOpen_1 = nHaOpen; } if (nHaOpen_1 == null) return; var nC_1 = sma(1, ohlc4(), -1); if (nC_1 == null) return; nHaOpen = (nC_1 + nHaOpen_1) / 2; return nHaOpen;}function calcHaClose(xHaO) { var n4 = sma(1, ohlc4(), 0); var nHaO = xHaO.getValue(0); if (n4 == null || nHaO == null) return; var nHaCl = (n4 + nHaO + Math.max(n4, high(0), nHaO) + Math.min(n4, low(0), nHaO ) ) / 4; return nHaCl;}// TEMA globalsvar xAvg1 = null;var xAvg2 = null;var xAvg3 = null;var bInit2 = false;function calcTEMA(nLength, xSrc){ if(bInit2 == false){ xAvg1 = ema(nLength, xSrc); xAvg2 = ema(nLength,xAvg1); xAvg3 = ema(nLength,xAvg2); bInit2 = true; } var nAvg1 = xAvg1.getValue(0); var nAvg2 = xAvg2.getValue(0); var nAvg3 = xAvg3.getValue(0); if (nAvg1 == null || nAvg2 == null || nAvg3 == null) return; var nTEMA = (3*nAvg1)-(3*nAvg2)+nAvg3; return nTEMA;}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;} |
ZeroLag_TEMA.efs
/*********************************Provided By: eSignal (Copyright ) 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: The Quest For Reliable Crossovers by Sylvain VervoortVersion: 1.0 3/11/2008Notes:* May 2008 Issue of Stocks and Commodities Magazine* Study requires version 8.0 or later.Formula Parameters: Defaults:Periods 10Price Source Close [Close, HL/2, HLC/3, OHLC/4]**********************************/function preMain() { setPriceStudy(true); setStudyTitle("Zero Lag TEMA "); setCursorLabelName("ZTEMA", 0); setDefaultBarFgColor(Color.red, 0); setDefaultBarThickness(2, 0); var fp1 = new FunctionParameter("nPeriods", FunctionParameter.NUMBER); fp1.setName("Periods"); fp1.setLowerLimit(1); fp1.setDefault(10); var fp2 = new FunctionParameter("sSource", FunctionParameter.STRING); fp2.setName("Price Source"); fp2.addOption("Close"); fp2.addOption("HL/2"); fp2.addOption("HLC/3"); fp2.addOption("OHLC/4"); fp2.setDefault("Close");}// Global Variablesvar bVersion = null; // Version flagvar bInit = false; // Initialization flagvar xTema1 = null;var xTema2 = null;var xSource = null;function main(nPeriods, sSource) { if (bVersion == null) bVersion = verify(); if (bVersion == false) return; if (bInit == false) { if (sSource == "Close") { xSource = close(); } else if (sSource == "HL/2") { xSource = hl2(); } else if (sSource == "HLC/3") { xSource = hlc3(); } else if (sSource == "OHLC/4") { xSource = ohlc4(); } xTema1 = efsInternal("calcTEMA", nPeriods, xSource); xTema2 = efsInternal("calcTEMA", nPeriods, xTema1); bInit = true; } var nZEma = null; var nTema1 = xTema1.getValue(0); var nTema2 = xTema2.getValue(0); if (nTema1 == null || nTema2 == null) return; nZTEma = nTema1 + (nTema1 - nTema2); return nZTEma; }// TEMA globalsvar xAvg1 = null;var xAvg2 = null;var xAvg3 = null;var bInit2 = false;function calcTEMA(nLength,xSource){ if(bInit2 == false){ xAvg1 = ema(nLength,xSource); xAvg2 = ema(nLength,xAvg1); xAvg3 = ema(nLength,xAvg2); bInit2 = true; } var nAvg1 = xAvg1.getValue(0); var nAvg2 = xAvg2.getValue(0); var nAvg3 = xAvg3.getValue(0); if (nAvg1 == null || nAvg2 == null || nAvg3 == null) return; var nTEMA = (3*nAvg1)-(3*nAvg2)+nAvg3; return nTEMA;}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;} |
HA_ZeroLag_TEMA.efs
/*********************************Provided By: eSignal (Copyright ) 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: The Quest For Reliable Crossovers by Sylvain VervoortVersion: 1.0 3/11/2008Notes:* May 2008 Issue of Stocks and Commodities Magazine* Study requires version 8.0 or later.Formula Parameters: Defaults:Periods 10**********************************/function preMain() { setPriceStudy(true); setStudyTitle("HA Zero Lag TEMA "); setCursorLabelName("HA ZTEMA", 0); setDefaultBarFgColor(Color.green, 0); setDefaultBarThickness(2, 0); var fp1 = new FunctionParameter("nPeriods", FunctionParameter.NUMBER); fp1.setName("Periods"); fp1.setLowerLimit(1); fp1.setDefault(10);}// Global Variablesvar bVersion = null; // Version flagvar bInit = false; // Initialization flagvar xTema1 = null;var xTema2 = null;var xHaOpen = null;var xHaClose = null;function main(nPeriods) { if (bVersion == null) bVersion = verify(); if (bVersion == false) return; if (bInit == false) { xHaOpen = efsInternal("calcHaOpen"); xHaClose = efsInternal("calcHaClose", xHaOpen); xTema1 = efsInternal("calcTEMA", nPeriods, xHaClose); xTema2 = efsInternal("calcTEMA", nPeriods, xTema1); bInit = true; } var nHAZEma = null; var nTema1 = xTema1.getValue(0); var nTema2 = xTema2.getValue(0); if (nTema1 == null || nTema2 == null) return; nHAZTEma = nTema1 + (nTema1 - nTema2); return nHAZTEma; }// HaOpen globalsvar nHaOpen = null;var nHaOpen_1 = null;function calcHaOpen() { if (nHaOpen_1 == null && open(-1) != null) { nHaOpen_1 = open(-1); } else if (nHaOpen != null) { nHaOpen_1 = nHaOpen; } if (nHaOpen_1 == null) return; var nC_1 = sma(1, ohlc4(), -1); if (nC_1 == null) return; nHaOpen = (nC_1 + nHaOpen_1) / 2; return nHaOpen;}function calcHaClose(xHaO) { var n4 = sma(1, ohlc4(), 0); var nHaO = xHaO.getValue(0); if (n4 == null || nHaO == null) return; var nHaCl = (n4 + nHaO + Math.max(n4, high(0), nHaO) + Math.min(n4, low(0), nHaO ) ) / 4; return nHaCl;}// TEMA globalsvar xAvg1 = null;var xAvg2 = null;var xAvg3 = null;var bInit2 = false;function calcTEMA(nLength,xSource){ if(bInit2 == false){ xAvg1 = ema(nLength,xSource); xAvg2 = ema(nLength,xAvg1); xAvg3 = ema(nLength,xAvg2); bInit2 = true; } var nAvg1 = xAvg1.getValue(0); var nAvg2 = xAvg2.getValue(0); var nAvg3 = xAvg3.getValue(0); if (nAvg1 == null || nAvg2 == null || nAvg3 == null) return; var nTEMA = (3*nAvg1)-(3*nAvg2)+nAvg3; return nTEMA;}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;} |
ZeroLag_HA_Tema_Cross.efs
/*********************************Provided By: eSignal (Copyright ) 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: The Quest For Reliable Crossovers by Sylvain VervoortVersion: 1.0 3/11/2008Notes:* May 2008 Issue of Stocks and Commodities Magazine* Study requires version 8.0 or later.* Study requires ZeroLag_TEMA.efs and HA_ZeroLag_TEMA.efs to be located in the same folder as this formula.Formula Parameters: Defaults:Periods 55Zero Lag TEMA Price Source HLC/3 [Close, HL/2, HLC/3, OHLC/4]Long Only false**********************************/function preMain() { setPriceStudy(true); setStudyTitle("Zero Lag HA TEMA Crossover "); setCursorLabelName("ZTEMA", 0); setDefaultBarFgColor(Color.red, 0); setDefaultBarThickness(2, 0); setCursorLabelName("HA ZTEMA", 1); setDefaultBarFgColor(Color.green, 1); setDefaultBarThickness(2, 1); var fp1 = new FunctionParameter("nPeriods", FunctionParameter.NUMBER); fp1.setName("Periods"); fp1.setLowerLimit(0); fp1.setDefault(55); var fp2 = new FunctionParameter("sSource", FunctionParameter.STRING); fp2.setName("Zero Lag TEMA Price Source"); fp2.addOption("Close"); fp2.addOption("HL/2"); fp2.addOption("HLC/3"); fp2.addOption("OHLC/4"); fp2.setDefault("HLC/3"); var fp3 = new FunctionParameter("bLong", FunctionParameter.BOOLEAN); fp3.setName("Long Only"); fp3.setDefault(false);}// Global Variablesvar bVersion = null; // Version flagvar bInit = false; // Initialization flagvar xZTema = null;var xHaZTema = null;var vPosition = 0; // 0=Flat, 1=long, -1=Shortfunction main(nPeriods, sSource, bLong) { if (bVersion == null) bVersion = verify(); if (bVersion == false) return; if (bInit == false) { xZTema = efsExternal("ZeroLag_TEMA.efs", nPeriods, sSource); xHaZTema = efsExternal("HA_ZeroLag_TEMA.efs", nPeriods); bInit = true; } var nState = getBarState(); var nZTema_0 = xZTema.getValue(0); var nZTema_1 = xZTema.getValue(-1); var nZTema_2 = xZTema.getValue(-2); var nHaZTema_0 = xHaZTema.getValue(0); var nHaZTema_1 = xHaZTema.getValue(-1); var nHaZTema_2 = xHaZTema.getValue(-2); // Check for proper amount of bar data. if ((nZTema_0 == null || nHaZTema_0 == null) && getCurrentBarIndex() >= -1) { drawTextPixel(20, 40, "Formula requires more bar data.", Color.red, Color.lightgrey, Text.FRAME|Text.BOLD|Text.RELATIVETOBOTTOM, null, 14, "dataError"); } else { removeText("dataError"); } if (nZTema_2 == null || nHaZTema_2 == null) return; // Cross-over var bBT = true; if (getCurrentBarIndex() == 0) bBT = false; if (nState == BARSTATE_NEWBAR) { if (vPosition != 1 ) { if (nZTema_1 >= nHaZTema_1 && nZTema_2 < nHaZTema_2) { // Long Cross vPosition = 1; Strategy.doLong("Long Cross", Strategy.MARKET, Strategy.THISBAR); drawShape(Shape.UPARROW, BelowBar1, Color.blue, rawtime(0)); } } else if (vPosition != -1) { if (nZTema_1 <= nHaZTema_1 && nZTema_2 > nHaZTema_2) { // Short Cross if (bLong == true) { vPosition = 0; Strategy.doSell("Long Exit", Strategy.MARKET, Strategy.THISBAR); } else { vPosition = -1; Strategy.doShort("Long Cross", Strategy.MARKET, Strategy.THISBAR); } drawShape(Shape.DOWNARROW, AboveBar1, Color.blue, rawtime(0)); } } } return new Array(nZTema_0, nHaZTema_0); }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;} |
|