Basically, this is a continuously updating 23-period rolling Linear Regression Channel. It has to be continuously updating of a fixed period to change slope. Someone please convert this TradeStation indicator to MetaTrader. Here is the EasyLanguage code:
[LegacyColorValue = true];
{ // Note: Setting a begin date that is earlier than the amount of length for the regression
will produce an extend to the left model that is date and time restricted
The End Date must not be in the future // }
inputs:
Length ( 23 ), { // Length of Linear Regression // }
BeginDate ( 0 ), { // Choose Zero to use full length // }
BeginTime ( 0 ), { // Choose Zero to use full time // }
EndDate ( 0 ), { // Choose Zero for Current Day // }
EndTime ( 0 ), { // Choose Zero for Current Time // }
NumDevsUp ( 1 ), { // Standard deviations for upper // }
NumDevsDn ( -1 ), { // Standard deviations for lower // }
LRColor ( blue ), { // Color for Linear Regression Line // }
UBColor ( blue ), { // Color for Upper Boundary // }
LBColor ( blue ), { // Color for Lower Boundary // }
ExtRight ( true ), { // Set to true to extend to right // }
ExtLeft ( false ); { // Set to true to extend to left // }
variables:
FirstDate ( 0 ),
FirstTime ( 0 ),
UpperBand ( 0 ),
LowerBand ( 0 ),
UpperBand_1 ( 0 ),
LowerBand_1 ( 0 ),
LRV ( 0 ),
LRV_1 ( 0 ),
TL_LRV ( 0 ),
TL_UB ( 0 ),
TL_LB ( 0 ),
Flag ( 0 ),
SDev ( 0 );
if BeginDate = 0 then
FirstDate = date[ Length - 1 ]
else
FirstDate = BeginDate;
if BeginTime = 0 then
FirstTime = time[ Length - 1 ]
else
FirstTime = BeginTime;
{ ///////////////////////////////////////////////////////////////////// }
if Flag = 0 then
begin
if ( EndDate = CurrentDate or EndDate = 0 ) and LastBarOnChart then
begin
LRV = LinearRegValue( Close, Length, 0 );
LRV_1 = LinearRegValue( Close, Length, Length - 1 );
SDev = StandardDev( Close, Length, 1 );
UpperBand = LRV + NumDevsUp * SDev;
LowerBand = LRV + NumDevsDn * SDev;
UpperBand_1 = LRV_1 + NumDevsUp * SDev;
LowerBand_1 = LRV_1 + NumDevsDn * SDev;
TL_LRV = TL_New( FirstDate, FirstTime, LRV_1, date, time, LRV );
TL_UB = TL_New( FirstDate, FirstTime, UpperBand_1, date, time, UpperBand );
TL_LB = TL_New( FirstDate, FirstTime, LowerBand_1, date, time, LowerBand );
Flag = 1 ;
end
else if date = EndDate and ( time = EndTime or EndTime = 0 ) then
begin
LRV = LinearRegValue( Close, Length, 0 );
LRV_1 = LinearRegValue( Close, Length, Length - 1 );
SDev = StandardDev( Close, Length, 1 );
UpperBand = LRV + NumDevsUp * SDev;
LowerBand = LRV + NumDevsDn * SDev;
UpperBand_1 = LRV_1 + NumDevsUp * SDev;
LowerBand_1 = LRV_1 + NumDevsDn * SDev;
TL_LRV = TL_New( FirstDate, FirstTime, LRV_1, date, time, LRV );
TL_UB = TL_New( FirstDate, FirstTime, UpperBand_1, date, time, UpperBand );
TL_LB = TL_New( FirstDate, FirstTime, LowerBand_1, date, time, LowerBand );
Flag = 2;
end;
if Flag = 1 or Flag = 2 then
begin
TL_SetColor( TL_LRV, LRColor );
TL_SetColor( TL_UB, UBColor );
TL_SetColor( TL_LB, LBColor );
TL_SetExtLeft( TL_LRV, ExtLeft );
TL_SetExtLeft( TL_UB, ExtLeft );
TL_SetExtLeft( TL_LB, ExtLeft );
TL_SetExtRight( TL_LRV, ExtRight );
TL_SetExtRight( TL_UB, ExtRight );
TL_SetExtRight( TL_LB, ExtRight );
end;
end
else
if Flag = 1 then
begin
LRV = LinearRegValue( Close, Length, 0 );
LRV_1 = LinearRegValue( Close, Length, Length - 1 );
SDev = StandardDev( Close, Length, 1 );
UpperBand = LRV + NumDevsUp * SDev;
LowerBand = LRV + NumDevsDn * SDev;
UpperBand_1 = LRV_1 + NumDevsUp * SDev;
LowerBand_1 = LRV_1 + NumDevsDn * SDev;
TL_SetBegin( TL_LRV, FirstDate, FirstTime, LRV_1 );
TL_SetBegin( TL_UB, FirstDate, FirstTime, UpperBand_1 );
TL_SetBegin( TL_LB, FirstDate, FirstTime, LowerBand_1 );
TL_SetEnd( TL_LRV, date, time, LRV );
TL_SetEnd( TL_UB, date, time, UpperBand );
TL_SetEnd( TL_LB, date, time, LowerBand );
end;
[LegacyColorValue = true];
{ // Note: Setting a begin date that is earlier than the amount of length for the regression
will produce an extend to the left model that is date and time restricted
The End Date must not be in the future // }
inputs:
Length ( 23 ), { // Length of Linear Regression // }
BeginDate ( 0 ), { // Choose Zero to use full length // }
BeginTime ( 0 ), { // Choose Zero to use full time // }
EndDate ( 0 ), { // Choose Zero for Current Day // }
EndTime ( 0 ), { // Choose Zero for Current Time // }
NumDevsUp ( 1 ), { // Standard deviations for upper // }
NumDevsDn ( -1 ), { // Standard deviations for lower // }
LRColor ( blue ), { // Color for Linear Regression Line // }
UBColor ( blue ), { // Color for Upper Boundary // }
LBColor ( blue ), { // Color for Lower Boundary // }
ExtRight ( true ), { // Set to true to extend to right // }
ExtLeft ( false ); { // Set to true to extend to left // }
variables:
FirstDate ( 0 ),
FirstTime ( 0 ),
UpperBand ( 0 ),
LowerBand ( 0 ),
UpperBand_1 ( 0 ),
LowerBand_1 ( 0 ),
LRV ( 0 ),
LRV_1 ( 0 ),
TL_LRV ( 0 ),
TL_UB ( 0 ),
TL_LB ( 0 ),
Flag ( 0 ),
SDev ( 0 );
if BeginDate = 0 then
FirstDate = date[ Length - 1 ]
else
FirstDate = BeginDate;
if BeginTime = 0 then
FirstTime = time[ Length - 1 ]
else
FirstTime = BeginTime;
{ ///////////////////////////////////////////////////////////////////// }
if Flag = 0 then
begin
if ( EndDate = CurrentDate or EndDate = 0 ) and LastBarOnChart then
begin
LRV = LinearRegValue( Close, Length, 0 );
LRV_1 = LinearRegValue( Close, Length, Length - 1 );
SDev = StandardDev( Close, Length, 1 );
UpperBand = LRV + NumDevsUp * SDev;
LowerBand = LRV + NumDevsDn * SDev;
UpperBand_1 = LRV_1 + NumDevsUp * SDev;
LowerBand_1 = LRV_1 + NumDevsDn * SDev;
TL_LRV = TL_New( FirstDate, FirstTime, LRV_1, date, time, LRV );
TL_UB = TL_New( FirstDate, FirstTime, UpperBand_1, date, time, UpperBand );
TL_LB = TL_New( FirstDate, FirstTime, LowerBand_1, date, time, LowerBand );
Flag = 1 ;
end
else if date = EndDate and ( time = EndTime or EndTime = 0 ) then
begin
LRV = LinearRegValue( Close, Length, 0 );
LRV_1 = LinearRegValue( Close, Length, Length - 1 );
SDev = StandardDev( Close, Length, 1 );
UpperBand = LRV + NumDevsUp * SDev;
LowerBand = LRV + NumDevsDn * SDev;
UpperBand_1 = LRV_1 + NumDevsUp * SDev;
LowerBand_1 = LRV_1 + NumDevsDn * SDev;
TL_LRV = TL_New( FirstDate, FirstTime, LRV_1, date, time, LRV );
TL_UB = TL_New( FirstDate, FirstTime, UpperBand_1, date, time, UpperBand );
TL_LB = TL_New( FirstDate, FirstTime, LowerBand_1, date, time, LowerBand );
Flag = 2;
end;
if Flag = 1 or Flag = 2 then
begin
TL_SetColor( TL_LRV, LRColor );
TL_SetColor( TL_UB, UBColor );
TL_SetColor( TL_LB, LBColor );
TL_SetExtLeft( TL_LRV, ExtLeft );
TL_SetExtLeft( TL_UB, ExtLeft );
TL_SetExtLeft( TL_LB, ExtLeft );
TL_SetExtRight( TL_LRV, ExtRight );
TL_SetExtRight( TL_UB, ExtRight );
TL_SetExtRight( TL_LB, ExtRight );
end;
end
else
if Flag = 1 then
begin
LRV = LinearRegValue( Close, Length, 0 );
LRV_1 = LinearRegValue( Close, Length, Length - 1 );
SDev = StandardDev( Close, Length, 1 );
UpperBand = LRV + NumDevsUp * SDev;
LowerBand = LRV + NumDevsDn * SDev;
UpperBand_1 = LRV_1 + NumDevsUp * SDev;
LowerBand_1 = LRV_1 + NumDevsDn * SDev;
TL_SetBegin( TL_LRV, FirstDate, FirstTime, LRV_1 );
TL_SetBegin( TL_UB, FirstDate, FirstTime, UpperBand_1 );
TL_SetBegin( TL_LB, FirstDate, FirstTime, LowerBand_1 );
TL_SetEnd( TL_LRV, date, time, LRV );
TL_SetEnd( TL_UB, date, time, UpperBand );
TL_SetEnd( TL_LB, date, time, LowerBand );
end;