Announcement

Collapse
No announcement yet.

2013 Nov: Reversing MACD: The Sequel by Johnny Dough

Collapse
This topic is closed.
X
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 2013 Nov: Reversing MACD: The Sequel by Johnny Dough

    File Name: PMACD_Signal.efs

    Description:
    Reversing MACD: The Sequel by Johnny Dough

    Formula Parameters:

    PMACD_Signal.efs
    Price Source: Close
    Period Fast: 12
    Period Slow: 26
    Period Signal: 9
    MA type: EMA
    Plot computed price shift forward by 1: true

    Notes:
    The related article is copyrighted material. If you are not a subscriber
    of Stocks & Commodities, please visit www.traders.com.

    Download File:
    PMACD_Signal.efs


    PMACD_Signal.efs


    EFS Code:
    PHP Code:

    /*********************************
    Provided By:  
        Interactive Data Corporation (Copyright © 2013) 
        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: The Sequel
        
    Version:            1.00  11/11/2013

    Formula Parameters:                        Default:
    Price Source                               Close
    Period Fast                                12
    Period Slow                                26
    Period Signal                              9
    MA type                                    EMA
    Plot computed price shift forward by 1     true

    Notes:
        The related article is copyrighted material. If you are not a subscriber
        of Stocks & Commodities, please visit www.traders.com.

    **********************************/

    var fpArray = new Array();

    function 
    preMain()
    {      
        
    setPriceStudy(true);
        
    setStudyTitle("Reversing MACD: The Sequel");
            
        
    setDefaultBarFgColor(Color.green0);
        
    setDefaultBarFgColor(Color.blue1);
        
    setDefaultBarFgColor(Color.red2);
             
        var 
    x=0;
        
        
    fpArray[x] = new FunctionParameter("fpPriceSource"FunctionParameter.STRING);
        
    with(fpArray[x++])
        {
            
    setName("Price Source");
            
    addOption("Open");
            
    addOption("Close");
            
    addOption("Low");
            
    addOption("High");
            
    addOption("HLC/3");
            
    setDefault("Close");
        }
     
        
    fpArray[x] = new FunctionParameter("fpFast"FunctionParameter.NUMBER);
        
    with(fpArray[x++])
        {
            
    setName("Period Fast");
            
    setLowerLimit(1);
            
    setUpperLimit(50);
            
    setDefault(12);
        }
        
        
    fpArray[x] = new FunctionParameter("fpSlow"FunctionParameter.NUMBER);
        
    with(fpArray[x++])
        {
            
    setName("Period Slow");
            
    setLowerLimit(2);
            
    setUpperLimit(50);
            
    setDefault(26);
        }
        
        
    fpArray[x] = new FunctionParameter("fpSignal"FunctionParameter.NUMBER);
        
    with(fpArray[x++])
        {
            
    setName("Period Signal");
            
    setLowerLimit(0);
            
    setUpperLimit(50);
            
    setDefault(9);
        }
        
        
    fpArray[x] = new FunctionParameter("fpMAtype"FunctionParameter.STRING);
        
    with(fpArray[x++])
        {
            
    setName("MA type");
            
    addOption("EMA");
            
    addOption("SMA");
            
    setDefault("EMA");      
        }

        
    fpArray[x] = new FunctionParameter("fpShift"FunctionParameter.BOOLEAN);
        
    with(fpArray[x++])
        {
            
    setName("Plot computed price shift forward by 1");
            
    setDefault(true);    
        }  
    }

    var 
    bInit false;
    var 
    bVersion null;

    var 
    xEq null;
    var 
    xZero null;
    var 
    xSignal null;

    function 
    main(fpPriceSourcefpFastfpSlowfpSignalfpMAtypefpShift)
    {
        if (
    bVersion == nullbVersion verify();
        if (
    bVersion == false) return;

        var 
    nShift null;
        var 
    xSource null;
        
        if (!
    fpShiftnShift 0
        
    else nShift = -1;
         
        if(!
    bInit)
        {
            switch (
    fpPriceSource)
            {
                case 
    "Open"
                    
    xSource open();
                    break;
                case 
    "Close":
                    
    xSource close();
                    break;
                case 
    "High":
                    
    xSource high();
                    break;
                case 
    "Low":
                    
    xSource low();
                    break;
                case 
    "HLC/3":
                    
    xSource hlc3();
                    break;
                default : return;
            }

            switch (
    fpMAtype)
            {
                case 
    "SMA":
                    
    NameAverage_Eq "PsMACDeq";
                    
    NameAverage_Zero "PsMACDzero";
                    
    NameAverage_Signal "PsMACDsignal";        
                    break;
                case 
    "EMA":
                    
    NameAverage_Eq "PMACDeq";
                    
    NameAverage_Zero "PMACDzero";
                    
    NameAverage_Signal "PMACDsignal";
                    break;
                default : return;
            }
           
            
    xEq efsInternal(NameAverage_EqfpFastfpSlowxSource);
            
    xZero efsInternal(NameAverage_ZerofpFastfpSlowxSource);
            
    xSignal efsInternal(NameAverage_SignalfpFastfpSlowfpSignalxSource)

            
    setCursorLabelName(NameAverage_Eq0);
            
    setCursorLabelName(NameAverage_Zero1);
            
    setCursorLabelName(NameAverage_Signal2);
                  
            
    bInit true;
        }

        var 
    nEq xEq.getValue(nShift);
        var 
    nZero xZero.getValue(nShift);
        var 
    nSignal xSignal.getValue(nShift);
      
        if (
    nEq == null || nZero == null || nSignal == null)
            return;

        return [
    nEqnZeronSignal]
    }

    var 
    xEMAx null;
    var 
    xEMAy null;

    function 
    Calc_ValueEMA(nPeriodXnPeriodYxSeries)
    {    
        if (
    getBarState() == BARSTATE_ALLBARS)
        {
            
    xEMAx ema(nPeriodXxSeries);
            
    xEMAy ema(nPeriodYxSeries);
        }

        var 
    nEMAx xEMAx.getValue(0);
        var 
    nEMAy xEMAy.getValue(0);  
        
        if (
    nEMAx == null || nEMAy == null)
            return;

        var 
    nAlphaX / (nPeriodX);
        var 
    nAlphaY / (nPeriodY);
     
        return new Array(
    nEMAxnEMAynAlphaXnAlphaY);
    }

    function 
    PMACDeq(nPeriodXnPeriodYxSeries)
    {    
        var 
    nReturnValue null;
        var 
    aValueArray Calc_ValueEMA(nPeriodXnPeriodYxSeries);
       
        if (
    aValueArray != null)
        {
            var 
    nEMAx aValueArray[0];
            var 
    nEMAy aValueArray[1];
            var 
    nAlphaX aValueArray[2];
            var 
    nAlphaY aValueArray[3];

            
    nReturnValue = (nAlphaX nEMAx nAlphaY nEMAy) / (nAlphaX nAlphaY);
        }  
        
        return 
    nReturnValue;
    }

    function 
    PMACDlevel(nPeriodXnPeriodYnLevelxSeries)
    {
        var 
    nReturnValue null;
        var 
    aValueArray Calc_ValueEMA(nPeriodXnPeriodYxSeries);
       
        if (
    aValueArray != null)
        {
            var 
    nEMAx aValueArray[0];
            var 
    nEMAy aValueArray[1];
            var 
    nAlphaX aValueArray[2];
            var 
    nAlphaY aValueArray[3];

            
    nReturnValue = (nLevel + (nAlphaY) * nEMAy - (nAlphaX) * nEMAx) / (nAlphaX nAlphaY);
        }  
       
        return 
    nReturnValue;
    }

    var 
    xEMAx null;
    var 
    xEMAy null;
    var 
    xMACDValue null;
    var 
    xMACDSignal null;

    function 
    PMACDsignal(nPeriodXnPeriodYnPeriodZxSeries)
    {
        if (
    getBarState() == BARSTATE_ALLBARS)
        {
            
    xEMAx ema(nPeriodXxSeries);
            
    xEMAy ema(nPeriodYxSeries);
            
    xMACDValue efsInternal("Calc_MACDValue"xEMAxxEMAy);
            
    xMACDSignal ema(nPeriodZxMACDValue);
        }

        var 
    nReturnValue null;
        var 
    aValueArray Calc_ValueEMA(nPeriodXnPeriodYxSeries);
       
        if (
    aValueArray != null)
        {
            var 
    nEMAx aValueArray[0];
            var 
    nEMAy aValueArray[1];
            var 
    nAlphaX aValueArray[2];
            var 
    nAlphaY aValueArray[3];

            var 
    nMACDSignal xMACDSignal.getValue(0);
        
            if (
    nMACDSignal == null)
                return;
           
            
    nReturnValue = (nMACDSignal nEMAx * (nAlphaX) + nEMAy * (nAlphaY)) / (nAlphaX nAlphaY);
        }  
      
        return 
    nReturnValue;
    }

    function 
    Calc_MACDValue(xSeries1xSeries2)
    {
        var 
    nValue1 xSeries1.getValue(0);
        var 
    nValue2 xSeries2.getValue(0);
        
        if (
    nValue1 == null || nValue2 == null)
            return;
        
        var 
    nReturnValue nValue1 nValue2;

        return 
    nReturnValue;
    }

    function 
    PMACDzero(nPeriodXnPeriodYxSeries)
    {
        return 
    PMACDlevel(nPeriodXnPeriodY0xSeries);
    }

    function 
    PsMACDeqnPeriodXnPeriodYxSeries)
    {
        var 
    nOffsetX xSeries.getValue(1-nPeriodX); 
        var 
    nOffsetY xSeries.getValue(1-nPeriodY);

        if (
    nOffsetX == null || nOffsetY == null)
            return;

        var 
    nReturnValue = (nPeriodX nOffsetY nPeriodY nOffsetX) / (nPeriodX nPeriodY);

        return 
    nReturnValue;
    }

    var 
    xSMAx_Zer null;
    var 
    xSMAy_Zer null;

    function 
    PsMACDzeronPeriodXnPeriodYxSeries)
    {
        if (
    getBarState() == BARSTATE_ALLBARS)
        {
            
    xSMAx_Zer sma(nPeriodXxSeries);
            
    xSMAy_Zer sma(nPeriodYxSeries);
        }
                
        var 
    nSMAx xSMAx_Zer.getValue(0);
        var 
    nSMAy xSMAy_Zer.getValue(0);
       
        var 
    nOffsetX xSeries.getValue(1-nPeriodX); 
        var 
    nOffsetY xSeries.getValue(1-nPeriodY);

        if (
    nSMAx == null || nSMAy == null || nOffsetX == null || nOffsetY == null)
            return;
        
        var 
    nReturnValue = (nPeriodX nPeriodY * (nSMAx nSMAy) + nPeriodX nOffsetY nPeriodY nOffsetX) / (nPeriodX nPeriodY);
        
        return 
    nReturnValue;
    }

    var 
    xsMACD null;
    var 
    xSMAsMACD null;

    function 
    PsMACDsignal(nPeriodXnPeriodYnPeriodZxSeries)
    {
        var 
    nReturnValue null;

        if (
    nPeriodZ != 1)
        {
            if (
    getBarState() == BARSTATE_ALLBARS)
            {
                
    xsMACD efsInternal("Calc_sMACD"nPeriodXnPeriodYxSeries);
                
    xSMAsMACD sma(nPeriodZxsMACD);
            }
                   
            var 
    nsMACD xsMACD.getValue(0);
            var 
    nSMAsMACD xSMAsMACD.getValue(0);
           
            var 
    nOffsetX xSeries.getValue(1-nPeriodX); 
            var 
    nOffsetY xSeries.getValue(1-nPeriodY);
            var 
    nOffsetZ xsMACD.getValue(1-nPeriodZ); 

            if (
    nsMACD == null || nSMAsMACD == null || nOffsetX == null || nOffsetY == null || nOffsetZ == null)
                return;

            
    nReturnValue = (nsMACD * (nPeriodX nPeriodY nPeriodZ nPeriodX nPeriodY) -
                           
    nPeriodX nPeriodY nPeriodZ nSMAsMACD 
                           
    nOffsetX * (nPeriodY nPeriodZ nPeriodY) +
                           
    nOffsetY * (nPeriodX nPeriodZ nPeriodX) +
                           
    nPeriodX nPeriodY nOffsetZ) /
                           (
    nPeriodX nPeriodZ nPeriodY nPeriodZ nPeriodX nPeriodY);
        }
        
        return 
    nReturnValue;
    }

    var 
    xSMAx_Sig null;
    var 
    xSMAy_Sig null;

    function 
    Calc_sMACD(nPeriodXnPeriodYxSeries)
    {
        if (
    getBarState() == BARSTATE_ALLBARS)
        {
            
    xSMAx_Sig sma(nPeriodXxSeries);
            
    xSMAy_Sig sma(nPeriodYxSeries);
        }
       
        var 
    nSMAx xSMAx_Sig.getValue(0);
        var 
    nSMAy xSMAy_Sig.getValue(0);

        if (
    nSMAx == null || nSMAy == null)
            return;
     
        var 
    nReturnValue nSMAx nSMAy;

        return 
    nReturnValue;
    }

    function 
    verify() 
    {
        var 
    false;
        if (
    getBuildNumber() < 779) {
            
    drawTextAbsolute(535"This study requires version 8.0 or later."
                
    Color.whiteColor.blueText.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT,
                
    null13"error");
            
    drawTextAbsolute(520"Click HERE to upgrade.@URL=http://www.esignal.com/download/default.asp"
                
    Color.whiteColor.blueText.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT,
                
    null13"upgrade");
            return 
    b;
        } else {
            
    true;
        }
        return 
    b;

Working...
X