2015 May: Filtering Price Movement by Giorgos E. Siligardos

ICE Data Services -


zzTOP.efs, zzTOPauto.efs  EFSLibrary - Discussion Board
  

File Name: zzTOP.efs, zzTOPauto.efs

Description:
Filtering Price Movement by Giorgos E. Siligardos


Formula Parameters:

zzTOP.efs
Indicator: Close
LegsNo: 20
Scale: A

zzTOPauto.efs
Indicator: Close
Proximity: 20
Scale: A




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

Download File:
zzTOP.efs
zzTOPauto.efs


zzTOPauto.efs



EFS Code:

zzTOP.efs



/*********************************Provided By:      Interactive Data Corporation (Copyright ???? 2015)     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:            Filtering Price Movement by Giorgos E. SiligardosFormula Parameters:                     Default:Indicator                               CloseLegsNo                                  20Scale                                   AVersion:            1.00  03/11/2015Notes:    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(){        setStudyTitle("zzTOP");    setPriceStudy(true);    setComputeOnClose(true);    var x = 0;    fpArray[x] = new FunctionParameter("fpIndicator", FunctionParameter.STRING);    with(fpArray[x++]){        setName("Indicator");        addOption("Close");        addOption("Open");        addOption("High");        addOption("Low");        setDefault("Close");    }    fpArray[x] = new FunctionParameter("fpLegsNo", FunctionParameter.NUMBER);    with(fpArray[x++]){        setName("LegsNo");        setLowerLimit(1);        setDefault(20);    }    fpArray[x] = new FunctionParameter("fpScale", FunctionParameter.STRING);    with(fpArray[x++]){        setName("Scale");        addOption("A");        addOption("L");        setDefault("A");    }}var bInit = false;var bVersion = null;var xSourceBase = null;var xSource = null;function main(fpIndicator, fpLegsNo, fpScale){        if (!bInit){                switch (fpIndicator){            case "Close":                xSourceBase = close();                break;             case "Open":                xSourceBase = open();                break;            case "High":                xSourceBase = high();                break;             case "Low":                xSourceBase = low();                break;            default: return;        }                if (fpScale == "L")            xSource = efsInternal("calc_Log", xSourceBase)        else             xSource = xSourceBase;                bInit = true;    }        if (getCurrentBarCount() == (getNumBars()-1)){                var nCountOfBars = getCurrentBarCount();                var nLowestInd = lowest(nCountOfBars, xSourceBase, 0);                if (fpScale == "L" && nLowestInd != null && nLowestInd <= 0){            drawTextPixel(10, 50, "A semilogarithmic scale is not supported for the negative values or 0.",            Color.blue);            return;        }            if (nLowestInd == null)            return;                var x1 = -(nCountOfBars - 1);        var y1 = xSource.getValue(-(nCountOfBars - 1));        var aFirstBar = [x1, y1];                var x2 = 0;        var y2 = xSource.getValue(0);        var aLastBar = [x2, y2];            if (y1 == null || y2 == null)            return;                var arrayPIPs = [];        arrayPIPs.push(aFirstBar);        arrayPIPs.push(aLastBar);                while (arrayPIPs.length < fpLegsNo + 1){             var arrayTemp = [];                        for (var i = 0; i < arrayPIPs.length - 1; i++){                arrayTemp.push(calc_PIP(arrayPIPs[i], arrayPIPs[i+1], xSource))            }                          var aMaxTempElement = arrayTemp.reduce(function(prevElemen, curElement){                 return prevElemen[0] >= curElement[0] ? prevElemen : curElement            });            var x = aMaxTempElement[1];            var y = xSource.getValue(aMaxTempElement[1]);            if (y == null)                return;             arrayPIPs.push([x, y]);                               arrayPIPs.sort(function (element1, element2){                return element1[0] - element2[0];            });        }             var tagID = 0;        clearLines();            for (var i = 0; i < arrayPIPs.length - 1; i++){            x1 = arrayPIPs[i][0];            y1 = arrayPIPs[i][1];                        x2 = arrayPIPs[i+1][0];            y2 = arrayPIPs[i+1][1];                        if (fpScale == "L"){                 y2 = Math.exp(y2);                y1 = Math.exp(y1);            }                        drawLineRelative(x1, y1, x2, y2, PS_SOLID, 2, Color.red, tagID++);         }    }}function calc_Log(xSource){    var nValue = xSource.getValue(0);        if (nValue <= 0)        return;        return Math.log(nValue);}function calc_PIP(aFirstCoord, aSecondCoord, xSource){        var nIndexOfFirst = aFirstCoord[0];    var nIndexOfSecond = aSecondCoord[0];    var nCountOfBars = Math.abs(nIndexOfFirst - nIndexOfSecond) + 1;            var nPrevMaxDiff = 0;    var nPrevMaxIndex  = 0;        var aMaxValue = [];          for (var i = 0; i < nCountOfBars; i++){                var nIndicatorValue = xSource.getValue(nIndexOfFirst + i);        if (nIndicatorValue == null)            return;                 var nCrossPoint = (((i * (aSecondCoord[1] - aFirstCoord[1])) / (nCountOfBars - 1)) + aFirstCoord[1]);        var nDiff = Math.abs(nCrossPoint - nIndicatorValue);        aMaxValue = [];        aMaxValue[0] = Math.max(nDiff, nPrevMaxDiff);        aMaxValue[1] = aMaxValue[0] == nDiff ? nIndexOfFirst + i : nPrevMaxIndex;              nPrevMaxDiff = aMaxValue[0];        nPrevMaxIndex  = aMaxValue[1];          }    return aMaxValue;}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;}

zzTOPauto.efs

/*********************************Provided By:      Interactive Data Corporation (Copyright ???? 2015)     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:            Filtering Price Movement by Giorgos E. SiligardosFormula Parameters:                     Default:Indicator                               CloseProximity                               20Scale                                   AVersion:            1.00  03/11/2015Notes:    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(){        setStudyTitle("zzTOPauto");    setPriceStudy(true);    setComputeOnClose(true);    var x = 0;    fpArray[x] = new FunctionParameter("fpIndicator", FunctionParameter.STRING);    with(fpArray[x++]){        setName("Indicator");        addOption("Close");        addOption("Open");        addOption("High");        addOption("Low");        setDefault("Close");    }    fpArray[x] = new FunctionParameter("fpProximity", FunctionParameter.NUMBER);    with(fpArray[x++]){        setName("Proximity");        setLowerLimit(0);        setUpperLimit(100);        setDefault(20);    }    fpArray[x] = new FunctionParameter("fpScale", FunctionParameter.STRING);    with(fpArray[x++]){        setName("Scale");        addOption("A");        addOption("L");        setDefault("A");    }}var bInit = false;var bVersion = null;var xSourceBase = null;var xSource = null;function main(fpIndicator, fpProximity, fpScale){        if (!bInit){                switch (fpIndicator){            case "Close":                xSourceBase = close();                break;             case "Open":                xSourceBase = open();                break;            case "High":                xSourceBase = high();                break;             case "Low":                xSourceBase = low();                break;            default: return;        }                if (fpScale == "L")            xSource = efsInternal("calc_Log", xSourceBase)        else             xSource = xSourceBase;                bInit = true;    }    if (getCurrentBarCount() == (getNumBars()-1)){                var nCountOfBars = getCurrentBarCount();                var nLowestInd = lowest(nCountOfBars, xSourceBase, 0);                if (fpScale == "L" && nLowestInd != null && nLowestInd <= 0){            drawTextPixel(10, 50, "A semilogarithmic scale is not supported for the negative values or 0.",            Color.blue);            return;        }            if (nLowestInd == null)            return;                var nHighest = highest(nCountOfBars, xSource, 0);        var nLowest = lowest(nCountOfBars, xSource, 0);                if (nHighest == null || nLowest == null)            return;                var nRange = nHighest - nLowest;                var x1 = -(nCountOfBars - 1);        var y1 = xSource.getValue(-(nCountOfBars - 1));        var aFirstBar = [x1, y1];                var x2 = 0;        var y2 = xSource.getValue(0);        var aLastBar = [x2, y2];            if (y1 == null || y2 == null)            return;              var arrayPIPs = [];        arrayPIPs.push(aFirstBar);        arrayPIPs.push(aLastBar);              do {            var arrayTemp = [];                        for (var i = 0; i < arrayPIPs.length - 1; i++){                arrayTemp.push(calc_PIP(arrayPIPs[i], arrayPIPs[i+1], xSource));            }                        var aMaxTempElement = arrayTemp.reduce(function(prevElemen, curElement){                 return prevElemen[0] >= curElement[0] ? prevElemen : curElement            });                    if (aMaxTempElement[0] < (nRange * fpProximity / 100))                break;                        var x = aMaxTempElement[1];            var y = xSource.getValue(aMaxTempElement[1]);            if (y == null)                return;                        arrayPIPs.push([x, y]);                    arrayPIPs.sort(function (element1, element2){                return element1[0] - element2[0];            });                } while (aMaxTempElement[0] >= (nRange * fpProximity / 100));            var tagID = 0;        clearLines();        for (var i = 0; i < arrayPIPs.length - 1; i++){            x1 = arrayPIPs[i][0];            y1 = arrayPIPs[i][1];                        x2 = arrayPIPs[i+1][0];            y2 = arrayPIPs[i+1][1];                        if (fpScale == "L"){                 y2 = Math.exp(y2);                y1 = Math.exp(y1);            }                        drawLineRelative(x1, y1, x2, y2, PS_SOLID, 2, Color.red, tagID++);         }    }}function calc_Log(xSource){    var nValue = xSource.getValue(0);        if (nValue <= 0)        return;        return Math.log(nValue);}function calc_PIP(aFirstCoord, aSecondCoord, xSource){        var nIndexOfFirst = aFirstCoord[0];    var nIndexOfSecond = aSecondCoord[0];    var nCountOfBars = Math.abs(nIndexOfFirst - nIndexOfSecond) + 1;            var nPrevMaxDiff = 0;    var nPrevMaxIndex  = 0;        var aMaxValue = [];          for (var i = 0; i < nCountOfBars; i++){                var nIndicatorValue = xSource.getValue(nIndexOfFirst + i);        if (nIndicatorValue == null)            return;                var nCrossPoint = (((i * (aSecondCoord[1] - aFirstCoord[1])) / (nCountOfBars - 1)) + aFirstCoord[1]);        var nDiff = Math.abs(nCrossPoint - nIndicatorValue);                aMaxValue = [];        aMaxValue[0] = Math.max(nDiff, nPrevMaxDiff);        aMaxValue[1] = aMaxValue[0] == nDiff ? nIndexOfFirst + i : nPrevMaxIndex;              nPrevMaxDiff = aMaxValue[0];        nPrevMaxIndex  = aMaxValue[1];              }    return aMaxValue;}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;}