Sat05252013

Last update12:00:00 AM

BackHomeS&C MagazineDepartmentsTraders' Tips eSIGNAL: HEIKIN-ASHI CANDLES OSCILLATOR LONG TERM (HACOLT)

eSIGNAL: HEIKIN-ASHI CANDLES OSCILLATOR LONG TERM (HACOLT)

For this month’s Traders’ Tip, we’ve provided a formula named “HACOLT.efs” based on Sylvain Vervoort’s article in this issue, “Long-Term Trading Using Exchange Traded Funds.”

The HACOLT study contains formula parameters to set the TEMA, shorting LT average, and candle size factor, which may be configured through the Edit Chart window.

To discuss this study or download a complete copy of the formula code, please visit the EFS library discussion board forum under the forums link from the support menu at www.esignal.com or visit our EFS KnowledgeBase at www.esignal.com/support/kb/efs/. The eSignal formula script (EFS) is also available for copying & pasting below, and can be downloaded here.

/*********************************
Provided By:  
Interactive Data Corporation (Copyright © 2012) 
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:        
Long-Term Trading Using Exchange Traded Funds by Sylvain Vervoort
Version:            1.0  14/05/2012
Formula Parameters:                     Default:
TEMA Average                        55
Shorting LT Average                 60
Candle Size Factor                  1.1
Notes:
The related article is copyrighted material. If you are not
a subscriber of Stocks & Commodities, please visit www.traders.com.
**********************************/
var fpArray = new Array();
function preMain() {
setPriceStudy(false);
setStudyTitle("Heikin-Ashi Candelstick Oscillator Long-Term");
var x = 0;
fpArray[x] = new FunctionParameter("g_nAvgPeriod", FunctionParameter.NUMBER);
with(fpArray[x++])
{
setName("TEMA Average");
setLowerLimit(1);
setUpperLimit(100);     
setDefault(55);
}
fpArray[x] = new FunctionParameter("g_nLTAvgPeriod", FunctionParameter.NUMBER);
with(fpArray[x++])
{
setName("Shorting LT Average");
setLowerLimit(1);
setUpperLimit(200);     
setDefault(60);
}
fpArray[x] = new FunctionParameter("g_nCandleSize", FunctionParameter.NUMBER);
with(fpArray[x++])
{
setName("Candle Size Factor");
setLowerLimit(0.01);
setUpperLimit(5);		
setDefault(1.1);
}
}
var xhaOpen = null;
var xhaC = null;
var xTEMA1_haC = null;
var xTEMA2_haC = null;
var xTEMA1_hl2 = null;
var xTEMA2_hl2 = null;
var xEMA_LT = null;
var bKeeping = false;
var bKeepall = false;
var bKeeping_ref = false;
var bKeepall_ref = false;
var bKeeping_2 = false;
var bKeepall_2 = false;
var bKeeping_2_ref = false;
var bKeepall_2_ref = false;
var bDtr = false;
var bUtr = false;
var bDtr_ref = false;
var bUtr_ref = false;
var nValueWhen = 0;
var nLTRes = 0;
var nLTRes_ref = 0;
var nResult = 0;
var nResult_ref = 0;
var bInit = false;
var bVersion = null;
function main(g_nAvgPeriod, g_nLTAvgPeriod, g_nCandleSize) 
{
if (bVersion == null) bVersion = verify();
if (bVersion == false) return;    
var nState = getBarState(); 
if (!bInit)
{ 
xhaOpen = efsInternal("Calc_haOpen", ohlc4());
xhaC = efsInternal("Calc_haC", ohlc4(), xhaOpen);
xTEMA1_haC = efsInternal("TEMA", g_nAvgPeriod, xhaC);
xTEMA2_haC = efsInternal("TEMA", g_nAvgPeriod, xTEMA1_haC);
xTEMA1_hl2 = efsInternal("TEMA", g_nAvgPeriod, hl2());
xTEMA2_hl2 = efsInternal("TEMA", g_nAvgPeriod, xTEMA1_hl2);
xEMA_LT = ema(g_nLTAvgPeriod, close()); 
bInit = true; 
} 
if (nState == BARSTATE_NEWBAR) 
{
bKeeping_ref = bKeeping;
bKeepall_ref = bKeepall;
bKeeping_2_ref = bKeeping_2;
bKeepall_2_ref = bKeepall_2;
bDtr_ref = bDtr;
bUtr_ref = bUtr;
nLTRes_ref = nLTRes;
nResult_ref = nResult
} 
else if (nState == BARSTATE_ALLBARS)
{
bKeeping_ref = bKeeping = false;
bKeepall_ref = bKeepall = false;
bKeeping_2_ref = bKeeping_2 = false;
bKeepall_2_ref = bKeepall_2 = false;
bDtr_ref = bDtr = false;
bUtr_ref = bUtr = false;
nValueWhen = 0;
nLTRes_ref = nLTRes = 0;
nResult_ref = nResult = 0;
}
var nhaOpen = xhaOpen.getValue(0);
var nhaC = xhaC.getValue(0);
var nTEMA1_haC = xTEMA1_haC.getValue(0);
var nTEMA2_haC = xTEMA2_haC.getValue(0);
var nTEMA1_hl2 = xTEMA1_hl2.getValue(0);
var nTEMA2_hl2 = xTEMA2_hl2.getValue(0);
var nEMA_LT = xEMA_LT.getValue(0);
if (nTEMA2_haC == null || nTEMA2_hl2 == null || nEMA_LT == null)
return;
var nZIHa = nTEMA1_haC + (nTEMA1_haC - nTEMA2_haC);
var nZICl = nTEMA1_hl2 + (nTEMA1_hl2 - nTEMA2_hl2);
// bKeep1 section
var fExpression1 = function(i)
{
if (xhaC.getValue(-i) == null || xhaOpen.getValue(-i) == null)
return false;
return xhaC.getValue(-i) >= xhaOpen.getValue(-i);
}
var bExp1 = Alert(fExpression1, 2);   
var bExp2 = close(0) >= nhaC;
var bExp3 = high(0) > high(-1);
var bExp4 = low(0) > low(-1);
var bKeep1 = bExp1 || bExp2 || bExp3 || bExp4;
// end of bKeep1 section
var bKeep2 = (nZICl - nZIHa) >= 0;
var bKeep3 = (Math.abs(close(0) - open(0)) < (high(0) - low(0)) * g_nCandleSize) && (high(0) >= low(-1));
bKeeping = bKeep1 || bKeep2;
bKeepall = bKeeping || (bKeeping_ref && (close(0) >= 0) || (close(0) >= close(-1)));
bUtr = bKeepall || (bKeepall_ref && bKeep3);
// bKeep1_2 section
var fExpression2 = function(i)
{
if (xhaC.getValue(-i) == null || xhaOpen.getValue(-i) == null)
return false;
return xhaC.getValue(-i) < xhaOpen.getValue(-i);
}
var bKeep1_2 = Alert(fExpression2, 2);
// end of bKeep1_2 section
var bKeep2_2 = (nZICl - nZIHa) < 0;
var bKeep3_2 = (Math.abs(close(0) - open(0)) < (high(0) - low(0)) * g_nCandleSize) && (low(0) <= high(-1));
bKeeping_2 = bKeep1_2 || bKeep2_2;
bKeepall_2 = bKeeping_2 || (bKeeping_2_ref && (close(0) < open(0)) || (close(0) < close(-1)));
bDtr = bKeepall_2 || (bKeepall_2_ref && bKeep3_2);
bUpw = (!bDtr && bDtr_ref && bUtr);
bDnw = (!bUtr && bUtr_ref && bDtr);
nRes = bUpw ? 1 : (bDnw ? 0 : nValueWhen);
if (bUpw || bDnw)
{
if (bUpw)
nValueWhen = 1;
else
nValueWhen = 0;
}
var bLTSell = (close(0) < nEMA_LT);
nLTRes = (nRes == 1) ? 1 : (bLTSell ? 0 : nLTRes_ref);
nResult = (nRes == 1) ? 100 : ((nLTRes == 1) ? 50 : 0);
BackTesting();
return nResult;
}
function BackTesting()
{
// Back Testing formulas are not for real time analysis.
// Therefore, prevent processing and exit at bar 0.
if (getCurrentBarIndex() == 0) return;    
// Exit Strategy
if (Strategy.isInTrade())
{
// Exit Long
if (Strategy.isLong() && (nResult_ref == 100) && (nResult < 100))
{
Strategy.doSell("Long Exit Signal", Strategy.CLOSE, Strategy.THISBAR);
}
// Exit Short
else if (Strategy.isShort() && (nResult_ref < 100) && (nResult == 100))
{
Strategy.doCover("Short Exit Signal", Strategy.CLOSE, Strategy.THISBAR);
}
}
// Entry Strategy
if (!Strategy.isInTrade())
{
// Enter Long
if ((nResult_ref < 100) && (nResult == 100))
{
Strategy.doLong("Long signal", Strategy.CLOSE, Strategy.THISBAR);
}
// Enter Short
else if ((nResult_ref > 0) && (nResult == 0))
{
Strategy.doShort("Short signal", Strategy.CLOSE, Strategy.THISBAR);
}
}
}
function Calc_haOpen(xOHLC4) 
{
var nRef = ref(-1);
var nOHLC1 = xOHLC4.getValue(-1);
if (nOHLC1 == null) 
return;
if (nRef == null) 
nRef = nOHLC1;
return (nOHLC1 + nRef) / 2;
}
function Calc_haC(xOHLC4, xhaOpen) 
{
var nOHLC = xOHLC4.getValue(0);
var nhaOpen = xhaOpen.getValue(0);
if (nhaOpen == null) 
return;
return (nOHLC + nhaOpen + Math.max(high(0), nhaOpen) + Math.min(low(0), nhaOpen)) / 4;
}
// MetaStock Alert function 
function Alert(fExpression, nPeriod)
{
for (var i = 0; i < nPeriod; i++)
if(fExpression(i)) return true;
return false;
}
var bInitTEMA = false;
var xEma1 = null;
var xEma2 = null;
var xEma3 = null;
// Triple Exponential Moving Average
function TEMA(period, series)
{   
if(!bInitTEMA)
{
xEma1 = ema(period, series);
xEma2 = ema(period, xEma1);
xEma3 = ema(period, xEma2);
bInitTEMA = true;    
}   
var vEma1 = xEma1.getValue(0);
var vEma2 = xEma2.getValue(0);
var vEma3 = xEma3.getValue(0);
if (vEma3 == null) 
return null;
return 3 * vEma1 - 3 * vEma2 + vEma3;
}
// verify version
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;
}

A sample chart is shown in Figure 3.

Image 1

FIGURE 3: eSIGNAL, HEIKIN-ASHI CANDLES OSCILLATOR LONG TERM (HACOLT). The HACOLT study contains formula parameters to set the TEMA, shorting LT average, and candle size factor.

—Jason Keck
eSignal, an Interactive Data company
800 779-6555, www.eSignal.com


To read the entire issue click here and subscribe today!

PTSK — The Professional Traders' Starter Kit
Home| Working Money Magazine | S&C Magazine | Traders.com Advantage | Online Store | Traders’ Resource
Add a Product to Traders’ Resource | Message Boards | Subscribe/Renew | Free Trial Issue | Article Code | Search

DEPARTMENTS: Advertising | Editorial | Circulation | Employment | Contact Us | BY PHONE: (206) 938-0570

Join us on Facebook     Follow us on Twitter     Follow Us on StockTwits

Bookmark and ShareCopyright © 1996-2013 Technical Analysis, Inc. All rights reserved. Read our disclaimer & privacy statement.

SUBSCRIBE TO OUR FREE
EMAIL NEWSLETTER!