MACDx-over.efs

ICE Data Services -

MACDx-over.efs    

File Name: MACDx-over.efs

Description:
This is an MACD crossover formula, which draws yellow arrows at the crossover points.

Formula Parameters:

  • nFastLength: Default is 12.
  • nSlowLength: Default is 26.
  • nSmoothing: Default is 9.
  • nPriceSource: Default is Close (valid inputs: Open, High, Low, Close, HL/2, HLC/3 and OHLC/4).
  • nSimpleMA_TorF: Default is False (True = Simple Moving Average, False = Exponential Moving Average).

Notes:
If used on an intra-day interval, the arrows will be drawn or removed intra-bar as the conditions change.

Download File:
MACDx-over.efs


EFS Code:

/****************************************************************************************************
Copyright © eSignal, a division of Interactive Data Corporation. 2003. All rights reserved. 
This sample eSignal Formula Script (EFS) may be modified and saved under a new 
filename; however, eSignal is no longer responsible for the functionality once modified.
eSignal reserves the right to modify and overwrite this EFS file with each new release.
*****************************************************************************************************/


function preMain() {
    setStudyTitle("MACD X-Over ");
    setDefaultBarFgColor(Color.magenta, 0); // hist
    setDefaultBarFgColor(Color.red, 1); // signal
    setDefaultBarFgColor(Color.blue, 2); // macd
    
    setPlotType(PLOTTYPE_HISTOGRAM, 0);
    
    setCursorLabelName("Hist", 0);
    setCursorLabelName("Signal", 1);
    setCursorLabelName("MACD", 2);
}

var study = null;
var vMACD = null;
var vMACD1 = null;
var vSignal = null;
var vSignal1 = null;
var vAlert = false;
var AlertCntr = 0;

function main(nFastLength, nSlowLength, nSmoothing, nPriceSource, nSimpleMA_TorF) {
    var nState = getBarState();

    if (study == null) {
        if (nFastLength == null)
            nFastLength = 12;
        if (nSlowLength == null)
            nSlowLength = 26;
        if (nSmoothing == null)
            nSmoothing = 9;
        if (nPriceSource == null) {
            nPriceSource = "Close";
        } else if(nPriceSource == "C" || nPriceSource == "O" || nPriceSource == "H" || nPriceSource == "L") {
            nPriceSource = nPriceSource;
        } else if(nPriceSource == "Close" || nPriceSource == "Open" || nPriceSource == "High" || nPriceSource == "Low") {
            nPriceSource = nPriceSource;
        } else if(nPriceSource == "HL/2" || nPriceSource == "HLC/3" || nPriceSource == "OHLC/4") {
            nPriceSource = nPriceSource;
        } else {
            nPriceSource = "Close";
        }
        if (nSimpleMA_TorF == null) {
            nSimpleMA_TorF = false;
        } else if (nSimpleMA_TorF == "T" || nSimpleMA_TorF == "t" || nSimpleMA_TorF == "true" || nSimpleMA_TorF == "True") {
            nSimpleMA_TorF = true;
        } else if (nSimpleMA_TorF == "F" || nSimpleMA_TorF == "f" || nSimpleMA_TorF == "false" || nSimpleMA_TorF == "False") {
            nSimpleMA_TorF = false;
        } else {
            nSimpleMA_TorF = false;
        }
        study = new MACDStudy(nFastLength, nSlowLength, nSmoothing, nPriceSource, eval(nSimpleMA_TorF));
    }
    
    if (nState == BARSTATE_NEWBAR) {
        if (vMACD != null)
            vMACD1 = vMACD;
        if (vSignal != null)
            vSignal1 = vSignal;
        vAlert = false;
    }
    vMACD = study.getValue(MACDStudy.MACD);
    if (vMACD == null)
        return;
    vSignal = study.getValue(MACDStudy.SIGNAL);
    if (vSignal == null)
        return;
    var vHist = study.getValue(MACDStudy.HIST);
    if (vHist == null)
        return;
    
    if (vAlert == false) {
        if (vMACD1 < vSignal1 && vMACD >= vSignal) {  // crossing up
            vAlert = true;
            AlertCntr += 1;
            drawShapeRelative(0, vSignal, Shape.UPARROW, null, Color.yellow, Shape.TOP | Shape.ONTOP, "Alert" + AlertCntr);
        }
        if (vMACD1 > vSignal1 && vMACD <= vSignal) {  // crossing down
            vAlert = true;
            AlertCntr += 1;
            drawShapeRelative(0, vSignal, Shape.DOWNARROW, null, Color.yellow, Shape.BOTTOM | Shape.ONTOP, "Alert" + AlertCntr);
        }
    } else {
        if ((vMACD1 < vSignal1 && vMACD < vSignal) || (vMACD1 > vSignal1 && vMACD > vSignal)) {
            vAlert = false;
            removeShape("Alert" + AlertCntr);
        }
    }
    
    return new Array(vHist, vSignal, vMACD);
}