Trend_OHLC.efs
EFSLibrary - Discussion Board
File Name: Trend_OHLC.efs
Description:
Trend OHLC
Formula Parameters:
- MA Length : 60
- Moving Average : SMA
Notes:
Download File:
Trend_OHLC.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: Trend OHLC Version: 1.0 07/19/2009 Formula Parameters: Default: MA Length 60 Moving Average SMA Notes: **********************************/ var fpArray = new Array(); var bInit = false; function preMain(){ setPriceStudy(true); setShowCursorLabel(true); setShowTitleParameters(false); setStudyTitle("Trend OHLC"); setCursorLabelName("Mode 0", 0); setDefaultBarFgColor(Color.red, 0); setPlotType(PLOTTYPE_SQUAREWAVE, 0); setDefaultBarThickness(1, 0); setCursorLabelName("Mode 1", 1); setDefaultBarFgColor(Color.blue, 1); setPlotType(PLOTTYPE_SQUAREWAVE, 1); setDefaultBarThickness(1, 1); setCursorLabelName("Mode 2", 2); setDefaultBarFgColor(Color.red, 2); setPlotType(PLOTTYPE_SQUAREWAVE, 2); setDefaultBarThickness(2, 2); setCursorLabelName("Mode 3", 3); setDefaultBarFgColor(Color.blue, 3); setPlotType(PLOTTYPE_SQUAREWAVE, 3); setDefaultBarThickness(2, 3); var x = 0; fpArray[x] = new FunctionParameter("MALength", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("MA Length"); setLowerLimit(1); setDefault(60); } fpArray[x] = new FunctionParameter("MAType", FunctionParameter.STRING); with(fpArray[x++]){ setName("Moving Average"); addOption("sma"); addOption("ema"); addOption("wma"); addOption("vwma"); setDefault("sma"); } } var xTrend_H = null; var xTrend_L = null; var xTrend_O = null; var xTrend_C = null; function main(MALength, MAType) { var nBarState = getBarState(); var nTH = 0; var nTL = 0; var nTO = 0; var nTC = 0; if (nBarState == BARSTATE_ALLBARS) { if(MAType == null) MAType = "sma"; if(MALength == null) MALength = 60; } if (bInit == false) { xTrend_L = efsInternal("Calc_TrendOHLC", MALength, MAType); xTrend_H = getSeries(xTrend_L, 1); xTrend_O = getSeries(xTrend_L, 2); xTrend_C = getSeries(xTrend_L, 3); bInit = true; } nTO = xTrend_O.getValue(0); nTH = xTrend_H.getValue(0); nTL = xTrend_L.getValue(0); nTC = xTrend_C.getValue(0); if (nTO == null || nTH == null || nTL == null || nTC == null) return; if (nTL < nTH) { setBarBgColor(Color.lightgrey,0,nTL,nTH) } else { setBarBgColor(Color.grey,0,nTL,nTH) } if (nTO < nTC) { setBarBgColor(Color.lime,1,nTO,nTC) } else { setBarBgColor(Color.red,1,nTO,nTC) } return new Array(nTL, nTH, nTO, nTC); } var bSecondInit = false; var xmaOpen = null; var xmaClose = null; var xmaLow = null; var xmaHigh = null; var haOpen1 = 0; var haOpen = 0; function Calc_TrendOHLC(MALength, MAType) { var nBarState = getBarState(); var nmaOpen = 0; var nmaClose = 0; var nmaLow = 0; var nmaHigh = 0; var nmaOpen1 = 0; var nmaClose1 = 0; var nmaLow1 = 0; var nmaHigh1 = 0; var haHigh = 0; var haLow = 0; var haClose = 0; var haClose = 0; var nResLow = 0; var nResHigh = 0; if (bSecondInit == false) { xmaOpen = efsInternal("CalcMA", MALength, MAType, "open"); xmaClose = efsInternal("CalcMA", MALength, MAType, "close"); xmaLow = efsInternal("CalcMA", MALength, MAType, "low"); xmaHigh = efsInternal("CalcMA", MALength, MAType, "high"); haOpen = open(0); haOpen1 = haOpen; bSecondInit = true; } nmaOpen = xmaOpen.getValue(0); nmaClose= xmaClose.getValue(0); nmaLow = xmaLow.getValue(0); nmaHigh = xmaHigh.getValue(0); nmaOpen1 = xmaOpen.getValue(-1); nmaClose1= xmaClose.getValue(-1); nmaLow1 = xmaLow.getValue(-1); nmaHigh1 = xmaHigh.getValue(-1); if (nmaOpen1 == null || nmaHigh1 == null || nmaLow1 == null || nmaClose1 == null) return; if (nBarState == BARSTATE_NEWBAR) { haOpen1 = haOpen; } haClose = (nmaOpen + nmaHigh + nmaLow + nmaClose) /4; haOpen = (haOpen1 + (nmaOpen1 + nmaHigh1 + nmaLow1 + nmaClose1) / 4) / 2; haHigh = Math.max(nmaHigh, Math.max(haOpen, haClose)); haLow = Math.min(nmaLow, Math.min(haOpen, haClose)); if (haOpen < haClose) { nResLow = haLow; nResHigh = haHigh; } else { nResLow = haHigh; nResHigh = haLow; } return new Array(nResLow, nResHigh, haOpen, haClose); } var bThirdInit = false; var xTMPMA1 = null; var xTMPMA2 = null; function CalcMA(MALength, MAType, Source) { var nRes = 0; var nTMPMA1 = 0; var nTMPMA2 = 0; if (bThirdInit == false) { xTMPMA1 = eval(MAType)(Math.round(MALength/2), eval(Source)()); xTMPMA2 = eval(MAType)(MALength, eval(Source)()); bThirdInit = true; } nTMPMA1 = xTMPMA1.getValue(0); nTMPMA2 = xTMPMA2.getValue(0); if (nTMPMA1 == null || nTMPMA2 == null) return; nRes = nTMPMA1 * 2 - nTMPMA2; return nRes; }