Announcement

Collapse
No announcement yet.

2015 May: Filtering Price Movement by Giorgos E. Siligardos

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

  • 2015 May: Filtering Price Movement by Giorgos E. Siligardos

    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
    PHP Code:
    /*********************************
    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. Siligardos

    Formula Parameters:                     Default:
    Indicator                               Close
    LegsNo                                  20
    Scale                                   A

    Version:            1.00  03/11/2015

    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(){
        
        
    setStudyTitle("zzTOP");
        
    setPriceStudy(true);
        
    setComputeOnClose(true);

        var 
    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(fpIndicatorfpLegsNofpScale){
        
        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(nCountOfBarsxSourceBase0);
            
            if (
    fpScale == "L" && nLowestInd != null && nLowestInd <= 0){
                
    drawTextPixel1050"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 = [x1y1];
            
            var 
    x2 0;
            var 
    y2 xSource.getValue(0);
            var 
    aLastBar = [x2y2];
        
            if (
    y1 == null || y2 == null)
                return;
            
            var 
    arrayPIPs = [];
            
    arrayPIPs.push(aFirstBar);
            
    arrayPIPs.push(aLastBar);
            
            while (
    arrayPIPs.length fpLegsNo 1){
     
                var 
    arrayTemp = [];
                
                for (var 
    0arrayPIPs.length 1i++){
                    
    arrayTemp.push(calc_PIP(arrayPIPs[i], arrayPIPs[i+1], xSource))
                }
                  
                var 
    aMaxTempElement arrayTemp.reduce(function(prevElemencurElement){ 
                    return 
    prevElemen[0] >= curElement[0] ? prevElemen curElement
                
    });

                var 
    aMaxTempElement[1];
                var 
    xSource.getValue(aMaxTempElement[1]);
                if (
    == null)
                    return; 
                
    arrayPIPs.push([xy]);
                       
                
    arrayPIPs.sort(function (element1element2){
                    return 
    element1[0] - element2[0];
                });
            } 
        
            var 
    tagID 0;
            
    clearLines();
        
            for (var 
    0arrayPIPs.length 1i++){
                
    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(x1y1x2y2PS_SOLID2Color.redtagID++); 
            }
        }
    }

    function 
    calc_Log(xSource){
        var 
    nValue xSource.getValue(0);
        
        if (
    nValue <= 0)
            return;
        
        return 
    Math.log(nValue);
    }

    function 
    calc_PIP(aFirstCoordaSecondCoordxSource){
        
        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 
    0nCountOfBarsi++){
            
            var 
    nIndicatorValue xSource.getValue(nIndexOfFirst i);
            if (
    nIndicatorValue == null)
                return;
             
            var 
    nCrossPoint = (((* (aSecondCoord[1] - aFirstCoord[1])) / (nCountOfBars 1)) + aFirstCoord[1]);
            var 
    nDiff Math.abs(nCrossPoint nIndicatorValue);

            
    aMaxValue = [];
            
    aMaxValue[0] = Math.max(nDiffnPrevMaxDiff);
            
    aMaxValue[1] = aMaxValue[0] == nDiff nIndexOfFirst nPrevMaxIndex;
          
            
    nPrevMaxDiff aMaxValue[0];
            
    nPrevMaxIndex  aMaxValue[1];      
        }
        return 
    aMaxValue;
    }

    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;

    zzTOPauto.efs
    PHP Code:
    /*********************************
    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. Siligardos

    Formula Parameters:                     Default:
    Indicator                               Close
    Proximity                               20
    Scale                                   A

    Version:            1.00  03/11/2015

    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(){
        
        
    setStudyTitle("zzTOPauto");
        
    setPriceStudy(true);
        
    setComputeOnClose(true);

        var 
    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(fpIndicatorfpProximityfpScale){
        
        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(nCountOfBarsxSourceBase0);
            
            if (
    fpScale == "L" && nLowestInd != null && nLowestInd <= 0){
                
    drawTextPixel1050"A semilogarithmic scale is not supported for the negative values or 0."Color.blue);
                return;
            }
        
            if (
    nLowestInd == null)
                return;
            
            var 
    nHighest highest(nCountOfBarsxSource0);
            var 
    nLowest lowest(nCountOfBarsxSource0);
            
            if (
    nHighest == null || nLowest == null)
                return;
            
            var 
    nRange nHighest nLowest;
            
            var 
    x1 = -(nCountOfBars 1);
            var 
    y1 xSource.getValue(-(nCountOfBars 1));
            var 
    aFirstBar = [x1y1];
            
            var 
    x2 0;
            var 
    y2 xSource.getValue(0);
            var 
    aLastBar = [x2y2];
        
            if (
    y1 == null || y2 == null)
                return;
          
            var 
    arrayPIPs = [];
            
    arrayPIPs.push(aFirstBar);
            
    arrayPIPs.push(aLastBar);
          
            do {
                var 
    arrayTemp = [];
                
                for (var 
    0arrayPIPs.length 1i++){
                    
    arrayTemp.push(calc_PIP(arrayPIPs[i], arrayPIPs[i+1], xSource));
                }
                
                var 
    aMaxTempElement arrayTemp.reduce(function(prevElemencurElement){ 
                    return 
    prevElemen[0] >= curElement[0] ? prevElemen curElement
                
    });
            
                if (
    aMaxTempElement[0] < (nRange fpProximity 100))
                    break;
                
                var 
    aMaxTempElement[1];
                var 
    xSource.getValue(aMaxTempElement[1]);
                if (
    == null)
                    return;
                
                
    arrayPIPs.push([xy]);
            
                
    arrayPIPs.sort(function (element1element2){
                    return 
    element1[0] - element2[0];
                });
            
            } while (
    aMaxTempElement[0] >= (nRange fpProximity 100));
        
            var 
    tagID 0;
            
    clearLines();

            for (var 
    0arrayPIPs.length 1i++){
                
    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(x1y1x2y2PS_SOLID2Color.redtagID++); 
            }
        }
    }

    function 
    calc_Log(xSource){
        var 
    nValue xSource.getValue(0);
        
        if (
    nValue <= 0)
            return;
        
        return 
    Math.log(nValue);
    }

    function 
    calc_PIP(aFirstCoordaSecondCoordxSource){
        
        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 
    0nCountOfBarsi++){
            
            var 
    nIndicatorValue xSource.getValue(nIndexOfFirst i);
            if (
    nIndicatorValue == null)
                return;
            
            var 
    nCrossPoint = (((* (aSecondCoord[1] - aFirstCoord[1])) / (nCountOfBars 1)) + aFirstCoord[1]);
            var 
    nDiff Math.abs(nCrossPoint nIndicatorValue);
            
            
    aMaxValue = [];
            
    aMaxValue[0] = Math.max(nDiffnPrevMaxDiff);
            
    aMaxValue[1] = aMaxValue[0] == nDiff nIndexOfFirst nPrevMaxIndex;
          
            
    nPrevMaxDiff aMaxValue[0];
            
    nPrevMaxIndex  aMaxValue[1];          
        }
        return 
    aMaxValue;
    }

    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