/*********************************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: Directional Trend Index (DTI)Version: 1.0 09/26/2008Formula Parameters: Default: r 14 s 10 u 5 OB 25 OS -25Notes: This technique was described by William Blau in his book "Momentum, Direction and Divergence" (1995). His book focuses on three key aspects of trading: momentum, direction and divergence. Blau, who was an electrical engineer before becoming a trader, thoroughly examines the relationship between price and momentum in step-by-step examples. From this grounding, he then looks at the deficiencies in other oscillators and introduces some innovative techniques, including a fresh twist on Stochastics. On directional issues, he analyzes the intricacies of ADX and offers a unique approach to help define trending and non-trending periods. Directional Trend Index is an indicator similar to DM+ developed by Welles Wilder. The DM+ (a part of Directional Movement System which includes both DM+ and DM- indicators) indicator helps determine if a security is "trending." William Blau added to it a zeroline, relative to which the indicator is deemed positive or negative. A stable uptrend is a period when the DTI value is positive and rising, a downtrend when it is negative and falling. **********************************/var fpArray = new Array();var bInit = false;function preMain() { setPriceStudy(false); setStudyTitle("Directional Trend Index"); setCursorLabelName("DTI", 0); setCursorLabelName("OB", 1); setCursorLabelName("OS", 2); setCursorLabelName("ZeroLine", 3); setDefaultBarFgColor(Color.brown, 0); setDefaultBarFgColor(Color.blue, 1); setDefaultBarFgColor(Color.red, 2); setDefaultBarFgColor(Color.green, 3); var x=0; fpArray[x] = new FunctionParameter("r", FunctionParameter.NUMBER); with(fpArray[x++]){ setLowerLimit(1); setDefault(14); } fpArray[x] = new FunctionParameter("s", FunctionParameter.NUMBER); with(fpArray[x++]){ setLowerLimit(1); setDefault(10); } fpArray[x] = new FunctionParameter("u", FunctionParameter.NUMBER); with(fpArray[x++]){ setLowerLimit(1); setDefault(5); } fpArray[x] = new FunctionParameter("OB", FunctionParameter.NUMBER); with(fpArray[x++]){ setDefault(25); } fpArray[x] = new FunctionParameter("OS", FunctionParameter.NUMBER); with(fpArray[x++]){ setDefault(-25); }}var xHMU = null;var xLMD = null;var xPrice = null;var xPriceAbs = null;var xuXA = null;var xuXAAbs = null;function main(r, s, u, OB, OS) { if ( bInit == false ) { xHMU = efsInternal("Calc_HMU"); xLMD = efsInternal("Calc_LMD"); xPrice = efsInternal("Calc_Price", xHMU, xLMD); xPriceAbs = efsInternal("Calc_PriceAbs", xPrice); xuXA = ema(u, ema(s, ema(r, xPrice))); xuXAAbs = ema(u, ema(s, ema(r, xPriceAbs))); bInit = true; } if (getCurrentBarCount() < Math.max(Math.max(r, s), u)) return; var Val1 = 100 * xuXA.getValue(0); var Val2 = xuXAAbs.getValue(0); var DTI = 0; if (Val2 != 0) DTI = Val1 / Val2; else DTI = 0; return new Array(DTI, OB, OS, 0);}function Calc_PriceAbs(xPrice) {var nRes = 0; nRes = Math.abs(xPrice.getValue(0)); if (nRes == null) nRes = 1; return nRes;}function Calc_Price(xHMU, xLMD) {var nRes = 0; nRes = xHMU.getValue(0) - xLMD.getValue(0); if (nRes == null) nRes = 1; return nRes;}function Calc_HMU() {var nRes = 0; if ((high(0) - high(-1)) > 0) { nRes = high(0) - high(-1); } else nRes = 0; if (nRes == null) nRes = 1; return nRes;}function Calc_LMD() {var nRes = 0; if ((low(0) - low(-1)) < 0) { nRes = -(low(0) - low(-1)); } else nRes = 0; return nRes;} |