TripleExponentialAverage.efs EFSLibrary - Discussion Board
File Name: TripleExponentialAverage.efs
Description:
Triple Exponential Average
Formula Parameters:
Color line null: Green
Length: 9
Gradient Color: 200
Display Title Value: False
Notes:
The Triple Exponential Average (TRIX) indicator is an oscillator used
to identify oversold and overbought markets and it can also be used
as a momentum indicator. As is common with many oscillators, TRIX
oscillates around a zero line. When used as an oscillator, a positive
value indicates an overbought market while a negative value indicates
an oversold market. As a momentum indicator, a positive value suggests
momentum is increasing while a negative value suggests momentum is
decreasing.
Download File:
TripleExponentialAverage.efs
EFS Code:
/*********************************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: Triple Exponential Average Version: 1.0 08/08/2008Notes: The Triple Exponential Average (TRIX) indicator is an oscillator used to identify oversold and overbought markets and it can also be used as a momentum indicator. As is common with many oscillators, TRIX oscillates around a zero line. When used as an oscillator, a positive value indicates an overbought market while a negative value indicates an oversold market. As a momentum indicator, a positive value suggests momentum is increasing while a negative value suggests momentum is decreasing.Formula Parameters: Default: * Color line null Green * Length 9 * Gradient Color 200 * Display Title Value False**********************************/ var fpArray = new Array(); var bInit = false; var myTRIX = null; var Max = 1; var Min = -1; function preMain() { setPriceStudy(false); setShowCursorLabel(false); setShowTitleParameters(false); setStudyTitle("Triple Exponential Average"); setCursorLabelName("TRIX", 0); setCursorLabelName("NULL", 1); setDefaultBarFgColor(Color.blue, 0); setDefaultBarFgColor(Color.green, 1); setPlotType(PLOTTYPE_LINE, 0); setPlotType(PLOTTYPE_LINE, 1); setDefaultBarThickness(1, 0); setDefaultBarThickness(1, 1); askForInput(); var x = 0; fpArray[x] = new FunctionParameter("LineColor", FunctionParameter.COLOR); with (fpArray[x++]) { setName("Color line null"); setDefault(Color.green); } fpArray[x] = new FunctionParameter("Length", FunctionParameter.NUMBER); with (fpArray[x++]) { setLowerLimit(1); setDefault(9); } fpArray[x] = new FunctionParameter("ViewValue", FunctionParameter.BOOLEAN); with (fpArray[x++]) { setName("Display Title Value"); setDefault(false); } fpArray[x] = new FunctionParameter("GradientColor", FunctionParameter.NUMBER); with (fpArray[x++]) { setName("Color Gradient"); addOption(0); addOption(50); addOption(100); addOption(150); addOption(200); addOption(250); setDefault(200); } } function main(LineColor, ViewValue, Length, GradientColor) { var nmyTRIX; var nmyTRIX2; var Rez; var inc; if (getCurrentBarCount() < Length) return; if (bInit == false) { myTRIX = efsInternal("TRIXLog", close(), Length); myTRIX = ema(Length, myTRIX); myTRIX = ema(Length, myTRIX); myTRIX = ema(Length, myTRIX); setDefaultBarFgColor(LineColor, 1); bInit = true; } nmyTRIX = myTRIX.getValue(0); nmyTRIX2 = myTRIX.getValue(-1); if (nmyTRIX2 == null) nmyTRIX2 = 0; Rez = (nmyTRIX - nmyTRIX2) * 10000; inc = Math.round(Rez); if (inc > Max) Max = inc; if (inc < Min) Min = inc; inc = RGB_G(inc, Max, Min); if (inc == null) inc = 0; setDefaultBarFgColor(Color.RGB(GradientColor, inc, 0), 0); return new Array(Rez, 0); } function TRIXLog(DataArray, Length) { var tmp; tmp = DataArray.getValue(0); return Math.log(tmp); } function RGB_G(Val, Max, Min) { var tmpG = 0; var Perc1 = 0; if (Val > 0) { Perc1 = (Val * 100) / Max; tmpG = 255 - (Perc1 * 255) / 100; return Math.round(tmpG); } else { Perc1 = (Val * -1 * 100) / (Min * -1); tmpG = 255 - (Perc1 * 255) / 100; return Math.round(tmpG); } return tmpG; }