ReversingMACD.efs, ReversingMACD_Indicator.efs
EFSLibrary - Discussion Board
File Name: ReversingMACD.efs, ReversingMACD_Indicator.efs
Description:
Reversing MACD by Johnny Dough
Formula Parameters:
ReversingMACD.efs
- Price Source: Close
- Period Fast: 12
- Period Slow: 26
- Period Signal: 9
- Plot Chart: PMACD
ReversingMACD_Indicator.efs
- Price Source: Close
- Period Fast: 12
- Period Slow: 26
- Period Signal: 9
- Plot Chart: PMACD
- Bollinger Bands Period: 10
Notes:
The related article is copyrighted material. If you are not a subscriber of Stocks & Commodities, please visit www.traders.com.
Download File:
ReversingMACD.efs
ReversingMACD_Indicator.efs
ReversingMACD.efs, ReversingMACD_Indicator.efs
EFS Code:
ReversingMACD.efs
/********************************* Provided By: Interactive Data Corporation (Copyright © 2010) 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: Reversing MACD Version: 1.00 14/11/2011 Formula Parameters: Default: Price Source Close Period Fast 12 Period Slow 26 Period Signal 9 Plot Chart PMACD Notes: The related article is copyrighted material. If you are not a subscriber of Stocks & Commodities, please visit www.traders.com. **********************************/ // predefined constants var BBPERIOD = 10; var BBSTDEV = 1; var fpArray = new Array(); function preMain() { setPriceStudy(true); setStudyTitle("Reversing MACD"); var x=0; fpArray[x] = new FunctionParameter("priceSource", FunctionParameter.STRING); with(fpArray[x++]) { setName("Price Source"); addOption("Open"); addOption("Close"); addOption("Low"); addOption("High"); addOption("HL/2"); addOption("HLC/3"); addOption("OHLC/4"); setDefault("Close"); } fpArray[x] = new FunctionParameter("pFast", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("Period Fast"); setLowerLimit(1); setUpperLimit(24); setDefault(12); } fpArray[x] = new FunctionParameter("pSlow", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("Period Slow"); setLowerLimit(2); setUpperLimit(52); setDefault(26); } fpArray[x] = new FunctionParameter("pSignal", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("Period Signal"); setLowerLimit(0); setUpperLimit(18); setDefault(9); } fpArray[x] = new FunctionParameter("pPlotChart", FunctionParameter.STRING); with(fpArray[x++]) { setName("Plot Chart"); addOption("PMACD"); addOption("PMACD_HLC"); addOption("PMACD_BB"); addOption("PMACD_MTF"); setDefault("PMACD"); } } var bInit = false; var bVersion = null; var xSource = null; var xPMACD_0 = null; function main(priceSource, pFast, pSlow, pSignal, pPlotChart) { if (bVersion == null) bVersion = verify(); if (bVersion == false) return; if(!bInit) { switch (priceSource) { case 'Open': xSource = open(); break; case 'Close': xSource = close(); break; case 'High': xSource = high(); break; case 'Low': xSource = low(); break; case 'HL/2': xSource = hl2(); break; case 'HLC/3': xSource = hlc3(); break; case 'OHLC/4': xSource = ohlc4(); break; default : return; } xPMACD_0 = efsInternal("PMACDzero", pFast, pSlow, xSource); setCursorLabelName("PMACDzero", 0); setDefaultBarThickness(3, 0); } var resultArr = null; switch (pPlotChart) { case "PMACD" : resultArr = calc_PMACD(xSource, pFast, pSlow, pSignal); break; case "PMACD_HLC" : resultArr = calc_PMACD_HLC(pFast, pSlow); break; case "PMACD_BB" : resultArr = calc_PMACD_BB(xSource, pFast, pSlow); break; case "PMACD_MTF" : resultArr = calc_PMACD_MTF(xSource, pFast, pSlow); break; default : bInit = true; return; } var nPMACD_0 = xPMACD_0.getValue(0); var nSource = xSource.getValue(0); // PMACD_0 vs price selected if(nPMACD_0 < nSource) setDefaultBarFgColor(Color.darkgreen, 0); else setDefaultBarFgColor(Color.maroon, 0); resultArr.unshift(nPMACD_0); return resultArr; } // calc_PMACD var xPMACD = null; var xEMA = null; function calc_PMACD(xSource, pFast, pSlow, pSignal) { if(!bInit) { xPMACD = efsInternal("PMACDeq", pFast, pSlow, xSource); xEMA = ema(pSignal, xPMACD); setCursorLabelName("PMACDeq", 1); setCursorLabelName("EMA(PMACDeq)", 2); setDefaultBarThickness(2, 1); setDefaultBarThickness(1, 2); setDefaultBarFgColor(Color.RGB(0, 100, 255) , 1); setDefaultBarFgColor(Color.RGB(255, 100, 0), 2); bInit = true; } var nPMACD = xPMACD.getValue(0); var nEMA = xEMA.getValue(0); return new Array(nPMACD, nEMA); } // calc_PMACD_HLC var xPMACD_H = null; var xPMACD_C = null; var xPMACD_L = null; function calc_PMACD_HLC(pFast, pSlow) { if(!bInit) { xPMACD_H = efsInternal("PMACDeq", pFast, pSlow, high()); xPMACD_C = efsInternal("PMACDeq", pFast, pSlow, close()); xPMACD_L = efsInternal("PMACDeq", pFast, pSlow, low()); setCursorLabelName("PMACDeq(High)", 1); setCursorLabelName("PMACDeq(Close)", 2); setCursorLabelName("PMACDeq(Low)", 3); setDefaultBarThickness(1, 1); setDefaultBarThickness(2, 2); setDefaultBarThickness(1, 3); setDefaultBarFgColor(Color.lime, 1); setDefaultBarFgColor(Color.RGB(0, 100, 255), 2); setDefaultBarFgColor(Color.RGB(255, 100, 0), 3); bInit = true; } var nPMACD_H = xPMACD_H.getValue(0); var nPMACD_C = xPMACD_C.getValue(0); var nPMACD_L = xPMACD_L.getValue(0); return new Array(nPMACD_H, nPMACD_C, nPMACD_L); } // calc_PMACD_BB var xPMACD_BB = null; var xPMACD_bTop = null; var xPMACD_bBot = null; function calc_PMACD_BB(xSource, pFast, pSlow) { if(!bInit) { xPMACD_BB = efsInternal("PMACDeq", pFast, pSlow, xSource); xPMACD_bTop = upperBB(BBPERIOD, BBSTDEV, xPMACD_BB); xPMACD_bBot = lowerBB(BBPERIOD, BBSTDEV, xPMACD_BB); setCursorLabelName("PMACDeq", 1); setCursorLabelName("BBTop", 2); setCursorLabelName("BBBot", 3); setDefaultBarThickness(2, 1); setDefaultBarThickness(1, 2); setDefaultBarThickness(1, 3); setDefaultBarFgColor(Color.RGB(0, 100, 255), 1); setDefaultBarFgColor(Color.lime, 2); setDefaultBarFgColor(Color.RGB(255, 100, 0), 3); bInit = true; } var nPMACD_BB = xPMACD_BB.getValue(0); var nPMACD_bTop = xPMACD_bTop.getValue(0); var nPMACD_bBot = xPMACD_bBot.getValue(0); return new Array(nPMACD_BB, nPMACD_bTop, nPMACD_bBot); } // calc_PMACD_MTF var xPMACD_MTF = null; var xPMACD_MTF5 = null; var xPMACD_MTF21 = null; function calc_PMACD_MTF(xSource, pFast, pSlow) { if(!bInit) { xPMACD_MTF = efsInternal("PMACDeq", pFast, pSlow, xSource); xPMACD_MTF5 = efsInternal("PMACDeq", 5 * pFast, 5 * pSlow, xSource); xPMACD_MTF21 = efsInternal("PMACDeq", 21 * pFast, 21 * pSlow, xSource); setCursorLabelName("PMACDeq", 1); setCursorLabelName("5*PMACDeq", 2); setCursorLabelName("21*PMACDeq", 3); setDefaultBarThickness(2, 1); setDefaultBarThickness(1, 2); setDefaultBarThickness(1, 3); setDefaultBarFgColor(Color.RGB(0, 100, 255), 1); setDefaultBarFgColor(Color.lime, 2); setDefaultBarFgColor(Color.RGB(255, 100, 0), 3); bInit = true; } var nPMACD_MTF = xPMACD_MTF.getValue(0); var nPMACD_MTF5 = xPMACD_MTF5.getValue(0); var nPMACD_MTF21 = xPMACD_MTF21.getValue(0); return new Array(nPMACD_MTF, nPMACD_MTF5, nPMACD_MTF21); } /************************************************* SUPPORT FUNCTIONS **************************************************/ // PMACDeq - calculates what the next bar price needs to be for the MACD value to be the same. var alphaX_eq = null; var alphaY_eq = null; var xEMAx_eq = null; var xEMAy_eq = null; var PMACDeq_Init = false; function PMACDeq(periodX, periodY, xSeries) { if(!PMACDeq_Init) { alphaX_eq = 2 / (1 + periodX); alphaY_eq = 2 / (1 + periodY); xEMAx_eq = ema(periodX, xSeries); xEMAy_eq = ema(periodY, xSeries); PMACDeq_Init = true; } var nEMAx = xEMAx_eq.getValue(-1); var nEMAy = xEMAy_eq.getValue(-1); if (nEMAx == null || nEMAy == null) return; var result = (alphaX_eq * nEMAx - alphaY_eq * nEMAy) / (alphaX_eq - alphaY_eq); return result; } // PMACDLevel - calculates what the price needs to be for the MACD value to be particular constant value. var alphaX_lev = null; var alphaY_lev = null; var xEMAx_lev = null; var xEMAy_lev = null; var PMACDLevel_Init = false; function PMACDLevel(periodX, periodY, level, xSeries) { if(!PMACDLevel_Init) { alphaX_lev = 2 / (1 + periodX); alphaY_lev = 2 / (1 + periodY); xEMAx_lev = ema(periodX, xSeries); xEMAy_lev = ema(periodY, xSeries); PMACDLevel_Init = true; } var nEMAx = xEMAx_lev.getValue(-1); var nEMAy = xEMAy_lev.getValue(-1); if (nEMAx == null || nEMAy == null) return; var result = (level + (1 - alphaY_lev) * nEMAy - (1 - alphaX_lev) * nEMAx) / (alphaX_lev - alphaY_lev); return result; } // PMACDzero function PMACDzero(periodX, periodY, xSeries) { return PMACDLevel(periodX, periodY, 0, xSeries); } // 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; }
ReversingMACD_Indicator.efs
/********************************* Provided By: Interactive Data Corporation (Copyright © 2010) 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: Reversing MACD Indicator Version: 1.00 14/11/2011 Formula Parameters: Default: Price Source Close Period Fast 12 Period Slow 26 Period Signal 9 Plot Chart PMACD Bollinger Bands Period 10 Notes: The related article is copyrighted material. If you are not a subscriber of Stocks & Commodities, please visit www.traders.com. **********************************/ // predefined constants var BBSTDEV = 1; var fpArray = new Array(); function preMain() { setPriceStudy(false); setStudyTitle("Reversing MACD Indicator"); var x=0; fpArray[x] = new FunctionParameter("priceSource", FunctionParameter.STRING); with(fpArray[x++]) { setName("Price Source"); addOption("Open"); addOption("Close"); addOption("Low"); addOption("High"); addOption("HL/2"); addOption("HLC/3"); addOption("OHLC/4"); setDefault("Close"); } fpArray[x] = new FunctionParameter("pFast", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("Period Fast"); setLowerLimit(1); setUpperLimit(24); setDefault(12); } fpArray[x] = new FunctionParameter("pSlow", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("Period Slow"); setLowerLimit(2); setUpperLimit(52); setDefault(26); } fpArray[x] = new FunctionParameter("pSignal", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("Period Signal"); setLowerLimit(1); setUpperLimit(18); setDefault(9); } fpArray[x] = new FunctionParameter("pPlotIndicator", FunctionParameter.STRING); with(fpArray[x++]) { setName("Plot Indicator"); addOption("MACD"); addOption("MACD_HLC"); addOption("MACD_BB"); addOption("MACD_MTF"); setDefault("MACD"); } fpArray[x] = new FunctionParameter("pBBPeriod", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("Bollinger Bands Period"); setLowerLimit(2); setUpperLimit(20); setDefault(10); } } var bInit = false; var bVersion = null; var xSource = null; var xMACD_0 = null; var xMACDeq = null; function main(priceSource, pFast, pSlow, pSignal, pPlotIndicator, pBBPeriod) { if (bVersion == null) bVersion = verify(); if (bVersion == false) return; if(!bInit) { switch (priceSource) { case 'Open': xSource = open(); break; case 'Close': xSource = close(); break; case 'High': xSource = high(); break; case 'Low': xSource = low(); break; case 'HL/2': xSource = hl2(); break; case 'HLC/3': xSource = hlc3(); break; case 'OHLC/4': xSource = ohlc4(); break; default : return; } } var resultArr = null; switch (pPlotIndicator) { case "MACD" : resultArr = calc_MACD(xSource, pFast, pSlow, pSignal); break; case "MACD_HLC" : resultArr = calc_MACD_HLC(pFast, pSlow); break; case "MACD_BB" : resultArr = calc_MACD_BB(xSource, pFast, pSlow, pSignal, pBBPeriod); break; case "MACD_MTF" : resultArr = calc_MACD_MTF(xSource, pFast, pSlow, pSignal); break; default : bInit = true; return; } return resultArr; } // calc_MACD var xMACD = null; var xEMA = null; function calc_MACD(xSource, pFast, pSlow, pSignal) { if(!bInit) { xMACD = macd(pFast, pSlow, 1, xSource); xEMA = ema(pSignal, xMACD); xMACDeq = efsInternal("PMACDeq", pFast, pSlow, xSource); xMACD_0 = efsInternal("PMACDzero", pFast, pSlow, xSource); setCursorLabelName("MACD", 0); setCursorLabelName("Signal", 1); setCursorLabelName("MACD Histogram", 2); setCursorLabelName("PMACDeq", 3); setCursorLabelName("PMACDzero", 4); setDefaultBarThickness(2, 0); setDefaultBarThickness(1, 1); setDefaultBarThickness(1, 2); setDefaultBarThickness(1, 3); setDefaultBarThickness(1, 4); setShowCursorLabel(false, 2); setPlotType(PLOTTYPE_HISTOGRAM, 2); setShowSeries(false, 3); setShowSeries(false, 4); setDefaultBarFgColor(Color.RGB(0, 100, 255) , 0); setDefaultBarFgColor(Color.RGB(255, 100, 0), 1); setDefaultBarFgColor(Color.purple, 2); setDefaultBarFgColor(Color.aqua, 3); setDefaultBarFgColor(Color.yellow, 4); bInit = true; } var nMACD = xMACD.getValue(0); var nEMA = xEMA.getValue(0); if(nEMA == null) return; var nMACDeq = xMACDeq.getValue(0); var nMACD_0 = xMACD_0.getValue(0); return new Array(nMACD, nEMA, nMACD - nEMA, nMACDeq, nMACD_0); } // calc_MACD_HLC var xMACD_H = null; var xMACD_C = null; var xMACD_L = null; function calc_MACD_HLC(pFast, pSlow) { if(!bInit) { xMACD_H = macd(pFast, pSlow, 1, high()); xMACD_C = macd(pFast, pSlow, 1, close()); xMACD_L = macd(pFast, pSlow, 1, low()); setCursorLabelName("MACD(High)", 0); setCursorLabelName("MACD(Close)", 1); setCursorLabelName("MACD(Low)", 2); setCursorLabelName("zero level", 3); setShowCursorLabel(false, 3); setDefaultBarThickness(1, 0); setDefaultBarThickness(2, 1); setDefaultBarThickness(1, 2); setDefaultBarThickness(1, 3); setDefaultBarFgColor(Color.lime, 0); setDefaultBarFgColor(Color.RGB(0, 100, 255), 1); setDefaultBarFgColor(Color.RGB(255, 100, 0), 2); setDefaultBarFgColor(Color.grey, 3); bInit = true; } var nMACD_H = xMACD_H.getValue(0); var nMACD_C = xMACD_C.getValue(0); var nMACD_L = xMACD_L.getValue(0); if(nMACD_H == null || nMACD_C == null || nMACD_L == null) return; return new Array(nMACD_H, nMACD_C, nMACD_L, 0); } // calc_MACD_BB var xMACD_BB = null; var xEMA_BB = null; var xMACD_bTop = null; var xMACD_bBot = null; function calc_MACD_BB(xSource, pFast, pSlow, pSignal, pBBPeriod) { if(!bInit) { xMACD_BB = macd(pFast, pSlow, 1, xSource); xEMA_BB = ema(pSignal, xMACD_BB); xMACD_bTop = upperBB(pBBPeriod, BBSTDEV, xMACD_BB); xMACD_bBot = lowerBB(pBBPeriod, BBSTDEV, xMACD_BB); setCursorLabelName("MACD", 0); setCursorLabelName("MACD Histogram", 1); setCursorLabelName("BBTop", 2); setCursorLabelName("BBBot", 3); setCursorLabelName("(BBTop + BBBot)/2", 4); setDefaultBarThickness(2, 0); setDefaultBarThickness(1, 1); setDefaultBarThickness(1, 2); setDefaultBarThickness(1, 3); setDefaultBarThickness(1, 4); setShowCursorLabel(false, 1); setShowCursorLabel(false, 4); setPlotType(PLOTTYPE_HISTOGRAM, 1); setDefaultBarFgColor(Color.darkgreen, 2); setDefaultBarFgColor(Color.maroon, 3); setDefaultBarFgColor(Color.grey, 4); bInit = true; } var nMACD_BB = xMACD_BB.getValue(0); var nnMACD_BB = xMACD_BB.getValue(-1); if(nMACD_BB < 0 && nMACD_BB > nnMACD_BB) setDefaultBarFgColor(Color.RGB(200, 255, 0), 0); else if (nMACD_BB > 0 && nMACD_BB > nnMACD_BB) setDefaultBarFgColor(Color.RGB(70, 255, 0), 0); else if (nMACD_BB > 0 && nMACD_BB < nnMACD_BB) setDefaultBarFgColor(Color.RGB(255, 100, 0), 0); else setDefaultBarFgColor(Color.red, 0); var nEMA_BB = xEMA_BB.getValue(0); var nHist = nMACD_BB - nEMA_BB; if(nHist > 0) setDefaultBarFgColor(Color.purple, 1); else setDefaultBarFgColor(Color.RGB(0, 100, 255), 1); var nMACD_bTop = xMACD_bTop.getValue(0); var nMACD_bBot = xMACD_bBot.getValue(0); if (nEMA_BB == null || nMACD_bTop == null || nMACD_bBot == null) return; return new Array(nMACD_BB, nHist, nMACD_bTop, nMACD_bBot, (nMACD_bTop + nMACD_bBot) / 2); } // calc_MACD_MTF var xMACD_MTF = null; var xMACD_MTF5 = null; var xMACD_MTF21 = null; function calc_MACD_MTF(xSource, pFast, pSlow, pSignal) { if(!bInit) { xMACD_MTF = macd(pFast, pSlow, xSource); xMACD_MTF5 = macd(5 * pFast, 5 * pSlow, xSource); xMACD_MTF21 = macd(21 * pFast, 21 * pSlow, xSource); xMACDeq = efsInternal("PMACDeq", pFast, pSlow, xSource); xMACD_0 = efsInternal("PMACDzero", pFast, pSlow, xSource); setCursorLabelName("MACD", 0); setCursorLabelName("5*MACD", 1); setCursorLabelName("21*MACD", 2); setCursorLabelName("PMACDeq", 3); setCursorLabelName("PMACDzero", 4); setCursorLabelName("zero level", 5); setDefaultBarThickness(2, 0); setDefaultBarThickness(1, 1); setDefaultBarThickness(1, 2); setDefaultBarThickness(1, 3); setDefaultBarThickness(1, 4); setDefaultBarThickness(1, 5); setShowSeries(false, 3); setShowSeries(false, 4); setShowCursorLabel(false, 5); setDefaultBarFgColor(Color.RGB(0, 100, 255), 0); setDefaultBarFgColor(Color.lime, 1); setDefaultBarFgColor(Color.RGB(255, 100, 0), 2); setDefaultBarFgColor(Color.aqua, 3); setDefaultBarFgColor(Color.yellow, 4); setDefaultBarFgColor(Color.grey, 5); bInit = true; } var nMACD_MTF = xMACD_MTF.getValue(0); var nMACD_MTF5 = xMACD_MTF5.getValue(0); var nMACD_MTF21 = xMACD_MTF21.getValue(0); if(nMACD_MTF == null) return; var nMACDeq = xMACDeq.getValue(0); var nMACD_0 = xMACD_0.getValue(0); return new Array(nMACD_MTF, nMACD_MTF5, nMACD_MTF21, nMACDeq, nMACD_0, 0); } /************************************************* SUPPORT FUNCTIONS **************************************************/ // PMACDeq - calculates what the next bar price needs to be for the MACD value to be the same. var alphaX_eq = null; var alphaY_eq = null; var xEMAx_eq = null; var xEMAy_eq = null; var PMACDeq_Init = false; function PMACDeq(periodX, periodY, xSeries) { if(!PMACDeq_Init) { alphaX_eq = 2 / (1 + periodX); alphaY_eq = 2 / (1 + periodY); xEMAx_eq = ema(periodX, xSeries); xEMAy_eq = ema(periodY, xSeries); PMACDeq_Init = true; } var nEMAx = xEMAx_eq.getValue(-1); var nEMAy = xEMAy_eq.getValue(-1); if (nEMAx == null || nEMAy == null) return; var result = (alphaX_eq * nEMAx - alphaY_eq * nEMAy) / (alphaX_eq - alphaY_eq); return result; } // PMACDLevel - calculates what the price needs to be for the MACD value to be particular constant value. var alphaX_lev = null; var alphaY_lev = null; var xEMAx_lev = null; var xEMAy_lev = null; var PMACDLevel_Init = false; function PMACDLevel(periodX, periodY, level, xSeries) { if(!PMACDLevel_Init) { alphaX_lev = 2 / (1 + periodX); alphaY_lev = 2 / (1 + periodY); xEMAx_lev = ema(periodX, xSeries); xEMAy_lev = ema(periodY, xSeries); PMACDLevel_Init = true; } var nEMAx = xEMAx_lev.getValue(-1); var nEMAy = xEMAy_lev.getValue(-1); if (nEMAx == null || nEMAy == null) return; var result = (level + (1 - alphaY_lev) * nEMAy - (1 - alphaX_lev) * nEMAx) / (alphaX_lev - alphaY_lev); return result; } // PMACDzero function PMACDzero(periodX, periodY, xSeries) { return PMACDLevel(periodX, periodY, 0, xSeries); } // 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; }