LinearRegressionIndicator.efs

ICE Data Services -

LinearRegressionIndicator.efs                                                                                      EFSLibrary - Discussion Board

File Name: LinearRegressionIndicator.efs


Description:
Plots the Linear Regression Indicator of the close, which is also referred to as moving linear regression.

 

Formula Parameters:
Periods: 20

 

Notes:
NA

 

Download File:
LinearRegressionIndicator.efs




EFS Code:

/*********************************
Provided By:  
    eSignal (Copyright © eSignal), a division of Interactive Data 
    Corporation. 2007. All rights reserved. This sample eSignal 
    Formula Script (EFS) is for educational purposes only and may be 
    modified and saved under a new file name.  eSignal is not responsible
    for the functionality once modified.  eSignal reserves the right 
    to modify and overwrite this EFS file with each new release.
    
Description:  Linear Regression Indicator

Parameters:                     Default:
    Periods                     20
**********************************/

function preMain() {
    setPriceStudy(true);
    setStudyTitle("Linear Regression Indicator");
    setCursorLabelName("LR", 0);
    setDefaultBarFgColor(Color.red, 0);
    setDefaultBarThickness(2, 0);
    
    var fp1 = new FunctionParameter("nLength", FunctionParameter.NUMBER);
        fp1.setName("Periods");
        fp1.setLowerLimit(1);
        fp1.setDefault(20);
}


var bInit = false;
var xLR   = null;

function main(nLength) {
    if (bInit == false) {
        xLR = efsInternal("calcLR", nLength);
        bInit = true;
    }
    
    
    var nLR = xLR.getValue(0);
    
    return nLR;
}


function calcLR(nLen) {
    
    // y = Ax + B;
    // A = SUM( (x-xAVG)*(y-yAVG) ) / SUM( (x-xAVG)^2 )
    // A = slope
    // B = yAVG - (A*xAVG);
    
    if (close(-(nLen-1)) != null) {
        var xSum = 0;
        var ySum = 0;
        var i = 0;
        for (i = 0; i < nLen; i++) {
            xSum += i;
            ySum += close(-i);
        }
        var xAvg = xSum/nLen;
        var yAvg = ySum/nLen;
        var aSum1 = 0;
        var aSum2 = 0;
        i = 0;
        for (i = 0; i < nLen; i++) {
            aSum1 += (i-xAvg) * (close(-i)-yAvg); 
            aSum2 += (i-xAvg)*(i-xAvg);
        }
        var A = (aSum1 / aSum2);
        var B = yAvg - (A*xAvg);
    }
    
    return B;
}