2013 June: Riding The Zigzags by Sylvain Vervoort

ICE Data Services -

SVEHLZZPercent.efs  
EFSLibrary - Discussion Board  

File Name: SVEHLZZPercent.efs

Description:
Riding The Zigzags by Sylvain Vervoort

Formula Parameters:

SVEHLZZPercent.efs

  • ZigZag percent : 5
  • ATR Look back Period : 5
  • ZigZag ATR factor: 1.5
  • Color of ZigZag lines: blue
  • Lines Width: 1

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

Download File:
SVEHLZZPercent.efs

SVEHLZZPercent.efs

EFS Code:
SVEHLZZPercent.efs

/*********************************
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:        
    High-Low ZigZag indicator
    
Version:            1.00  10/04/2013

Formula Parameters:                     Default:
ZigZag percent                          5
ATR Look back Period                    5
ZigZag ATR factor                       1.5
Color of ZigZag lines                   blue
Lines Width                             1

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

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


var pArray = new Array();

function preMain()
{

    setStudyTitle("High-Low ZigZag indicator"); 
    setComputeOnClose();
    setPriceStudy(true);

    var x = 0;

    pArray[x] = new FunctionParameter("fpZigZagPercentage", FunctionParameter.NUMBER);
    with(pArray[x++])
    {
      setName("ZigZag percent");
      setLowerLimit(0);
      setDefault(5);
    }

    pArray[x] = new FunctionParameter("fpATRPeriod", FunctionParameter.NUMBER);
    with(pArray[x++])
    {
      setName("ATR Look back Period");
      setLowerLimit(1);
      setDefault(5);
    }

    pArray[x] = new FunctionParameter("fpATRFactor", FunctionParameter.NUMBER);
    with(pArray[x++])
    {
      setName("ZigZag ATR factor");
      setLowerLimit(0);
      setDefault(1.5);
    }

    pArray[x] = new FunctionParameter("fpZigZagColor", FunctionParameter.COLOR);
    with(pArray[x++])
    {
      setName("Color of ZigZag lines");
      setDefault(Color.blue);
    }

    pArray[x] = new FunctionParameter("fpLineWidth", FunctionParameter.NUMBER);
    with(pArray[x++])
    {
      setName("Lines Width");
      setLowerLimit(1);
      setDefault(1);
    }
}

var nTrend = 0;      

var nLHb = 0;        
var nLLb = 0;        

var nHH = 0;     
var bLL = 0;   

var nDownlineID = 0;   
var nUplineID = 0;  

var nHLPivot = 0;     

var xATR = null;

var bInit = false;
var bVersion = null;

function main(fpZigZagPercentage, fpATRPeriod, fpATRFactor, fpZigZagColor, fpLineWidth)
{
    if (bVersion == null) bVersion = verify();
    if (bVersion == false) return;

    if(!bInit)
    {
        xATR = atr(fpATRPeriod);

        bInit = true;
    }

    var nBarNumber = getCurrentBarCount();

    if(nBarNumber < 2)  
    { 
        bLL = low(0); 
        nHH = high(0);
        nLLb = nLHb = 1;
        nUplineID = nDownlineID = nBarNumber;
        nTrend = 1;
        return;
    }

    var nATR = xATR.getValue(0);

    if (nATR == null)
        return;

    if(fpATRFactor == 0)
    { 
        nHLPivot = fpZigZagPercentage * 0.01;
    }
    else
    { 
        if (fpZigZagPercentage == 0)
        { 
            nHLPivot = nATR / close(0) * fpATRFactor;
        }
        else
        { 
            nHLPivot = fpZigZagPercentage * 0.01 + nATR / close(0) * fpATRFactor;
        }
    }

    if (nTrend > 0)    
    { 
        if (high(0) >= nHH) 
        { 
            nHH = high(0);
            nLHb = nBarNumber;

            drawLineRelative(-(nBarNumber - nLLb), bLL, 0, nHH, PS_SOLID, fpLineWidth, fpZigZagColor, nUplineID);
        }
        else if (low(0) < nHH - nHH * nHLPivot) 
        { 
            bLL = low(0);
            nLLb = nBarNumber;
            nDownlineID = nBarNumber;
            nTrend = -1;

            drawLineRelative(-(nBarNumber - nLHb), nHH, 0, bLL, PS_SOLID, fpLineWidth, fpZigZagColor, nDownlineID);
        }
    }
    else 
    {
        if (low(0) <= bLL)  
        {
            bLL = low(0);
            nLLb = nBarNumber;

            drawLineRelative(-(nBarNumber - nLHb), nHH, 0, bLL, PS_SOLID, fpLineWidth, fpZigZagColor, nDownlineID);
        }
        else if (high(0) > bLL + bLL * nHLPivot)  
        {
            nHH = high(0);
            nLHb = nBarNumber;
            nUplineID = nBarNumber;
            nTrend = 1;

            drawLineRelative(-(nBarNumber - nLLb), bLL, 0, nHH, PS_SOLID, fpLineWidth, fpZigZagColor, nUplineID);
        }
    }
}

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;
}