# Linear Regression

ICE Data Services -

upperLinearReg(), middleLinearReg(), lowerLinearReg() Built-in Study Functions

Linear Regression is a statistical tool used to predict future values from past values. In the case of security prices, it is commonly used to determine when prices are overextended. A linear regression trend line uses the least squares method to plot a straight line through prices so as to minimize the distances between the prices and resulting trend line.

Syntax

upperLinearReg(  nLength , nStdev [, Series | sym() | inv() ][, nBarIndex ] )
middleLinearReg( nLength , nStdev [, Series | sym() | inv() ][, nBarIndex ] )
lowerLinearReg (   nLength , nStdev [, Series | sym() | inv() ][, nBarIndex ] )

Parameters

 Parameter: Description: Default: nLength Required. Number of periods to use for calculation. n/a nStdev Required. Number of standard deviations to use for calculation. n/a Series orsym() orinv() [Optional]    Series Object or function of sym() or inv() to determine symbol/interval source for the study. Chart's sym/inv nBarIndex [Optional]   Bar index of series to retrieve . n/a

Return Value(s)

Returns a Series Object when nBarIndex is not specified.

Returns a single value when nBarIndex is specified.

Notes

Only available in versions 7.9 or later.

Code Examples

Single Line Indicator:
function main() {
return new Array(
upperLinearReg(20, 1),
middleLinearReg(20, 1),
lowerLinearReg(20, 1)
);
}

Single Line Study-on-Study Indicator:
function main() {
return new Array(
upperLinearReg(20, 1, hl2()),
middleLinearReg(20, 1, hl2()),
lowerLinearReg(20, 1, hl2())
);
}

Retrieve single values:

function main() {
var nValue_0 = middleLinearReg(20, 1, 0); // Current Bar Index
var nValue_1 = middleLinearReg(20, 1, -1); // Prior Bar Index
return new Array(nValue_0, nValue_1);
}

Initialize Series Objects:
//global Series Object variables
var xStudy1 = null;
var xStudy2 = null;
var xStudy3 = null;
function main() {
if (xStudy1 == null) xStudy1 = upperLinearReg(20, 1);
if (xStudy2 == null) xStudy2 = middleLinearReg(20, 1);
if (xStudy3 == null) xStudy3 = lowerLinearReg(20, 1); // retrieve single values for conditional statements
var nValue1_0 = xStudy1.getValue(0); // Current Bar Index value
var nValue2_0 = xStudy2.getValue(0); // Current Bar Index value
var nValue3_0 = xStudy3.getValue(0); // Current Bar Index value
var nValue1_1 = xStudy1.getValue(-1); // Prior Bar Index value
// Plot Current Bar Index Value
return new Array(nValue1_0, nValue2_0, nValue3_0);
}

Initialize a Series Object based on an external interval:
// global Series Object variables
var xStudy1 = null;
var xStudy2 = null;
var xStudy3 = null;
var bInit = false; // Initialization flag
function main() {
if (bInit == false) {
xStudy1 = upperLinearReg(20, 1, inv(20)); // 20-min interval
xStudy2 = middleLinearReg(20, 1, inv(20)); // 20-min interval
xStudy3 = lowerLinearReg(20, 1, inv(20)); // 20-min interval
bInit = true;
} // retrieve single values for conditional statements
var nValue1_0 = xStudy1.getValue(0); // Current Bar Index value
var nValue1_1 = xStudy1.getValue(-1); // Prior Bar Index value
// Synchronized Series plot
return new Array(getSeries(xStudy1), getSeries(xStudy2), getSeries(xStudy3));
}

Initialize a Series Object based on an external symbol and interval:
// global Series Object variables
var xStudy1 = null;
var xStudy2 = null;
var xStudy3 = null;
var bInit = false; // Initialization flag
function main() {
if (bInit == false) {
xStudy1 = upperLinearReg(20, 1, sym("IBM,20")); // IBM 20-min interval
xStudy2 = middleLinearReg(20, 1, sym("IBM,20")); // IBM 20-min interval
xStudy3 = lowerLinearReg(20, 1, sym("IBM,20")); // IBM 20-min interval
bInit = true;
} // retrieve single values for conditional statements
var nValue1_0 = xStudy1.getValue(0); // Current Bar Index value
var nValue1_1 = xStudy1.getValue(-1); // Prior Bar Index value
// Synchronized Series plot
return new Array(getSeries(xStudy1), getSeries(xStudy2), getSeries(xStudy3));
}