Stock Portfolio Organizer

The ultimate porfolio management solution.

Shares, Margin, CFD's, Futures and Forex
EOD and Realtime
Dividends and Trust Distributions
And Much More ....
Find Out More Here

#1 Selling Amibroker Plugin featuring:

Neural Networks
And Much More ....
Find Out More Here

Automatic Linear Trend Channel (edited) for Amibroker (AFL) crkumar about 1 year ago Amibroker (AFL)

Rating:
Tags:
amibroker, trend

This appears to be an edited version of Edward Pottasch’ AFL.
Saw it in a forum

Indicator / Formula

```// Automatic Linear Trend Channel (edited)
// original author Edward Pottasch
// Trend is defined using code found on the net
// Amibroker AFL code by Edward Pottasch, November 2011
// edited by Anderson Wilson, July 2012
// some symbols makes yybull and yybear infinite,
// before plotting Channel
_SECTION_BEGIN("Parameters");
kk = Optimize( "mult", Param( "mult", 1.25, 0.25, 8, 0.25 ), 1, 8, 0.25 );
Per = Optimize( "period", Param( "period", 10, 1, 300, 1 ), 5, 300, 1 );
sdfact = Param( "Standard Deviation Factor", 2, 0.5, 5, 0.1 );
offset = Param( "Offset", 2, 1, 50, 1 );
tc = ParamList( "Channel Display", List = "No Channel|Channel|ChannelRT|Both
Channels", 1 );
ms = ParamToggle( "Trend", "Regular|Smoothed", 1 );

x = Cum( 1 );
HaClose = ( O + H + L + C ) / 4;
HaOpen = AMA( Ref( HaClose, -1 ), 0.5 );
HaHigh = Max( H, Max( HaClose, HaOpen ) );
HaLow = Min( L, Min( HaClose, HaOpen ) );

if ( ms == 0 )
{
nm = ( H - L );
j = ( O + H + L + C ) / 4;
}
else
{
nm = ( HaHigh - HaLow );
j = ( HaOpen + HaHigh + HaLow + HaClose ) / 4;
}

rfsctor = WMA( nm, Per );

revers = kk * rfsctor;
Trend = 1;
NW[0] = 0;

for ( i = 1;i < BarCount;i++ )
{
if ( Trend[i-1] == 1 )
{
if ( j[i] < NW[i-1] )
{
Trend[i] = -1;
NW[i] = j[i] + Revers[i];
}
else
{
Trend[i] = 1;

if ( ( j[i] - Revers[i] ) > NW[i-1] )
{
NW[i] = j[i] - Revers[i];
}
else
{
NW[i] = NW[i-1];
}
}
}

if ( Trend[i-1] == -1 )
{
if ( j[i] > NW[i-1] )
{
Trend[i] = 1;
NW[i] = j[i] - Revers[i];
}
else
{
Trend[i] = -1;

if ( ( j[i] + Revers[i] ) < NW[i-1] )
{
NW[i] = j[i] + Revers[i];
}
else
{
NW[i] = NW[i-1];
}
}
}
}

cp = ( H + L ) / 2;

TrendUp = IIf( Trend == 1, Trend, 0 );
TrendDown = IIf( Trend == -1, Trend, 0 );
totalTrend = IIf( TrendUp, TrendUp, TrendDown );
dtotalTrend = totalTrend - Ref( totalTrend, -1 );
vtotalTrend = ValueWhen( dtotalTrend, dtotalTrend );
cbull = vtotalTrend > 0 AND Ref( vtotalTrend, -1 ) < 0;
cbull = Ref( cbull, 1 );
cbear = vtotalTrend < 0 AND Ref( vtotalTrend, -1 ) > 0;
cbear = Ref( cbear, 1 );
cbull = vtotalTrend > 0 AND Ref( vtotalTrend, -1 ) < 0;
cbull = Ref( cbull, 1 );
cbull[BarCount-1] = 1;
cbear = vtotalTrend < 0 AND Ref( vtotalTrend, -1 ) > 0;
cbear = Ref( cbear, 1 );
cbear[BarCount-1] = 1;
nwbull = Ref( Flip( cbull, cbear ), -1 );
nwbear = Ref( Flip( cbear, cbull ), -1 );

xxbull[BarCount-1] = xxbull[BarCount-2] + 1;
aaabull = LinRegIntercept( cp, xxbull );
bbbbull = LinRegSlope( cp, xxbull );
daabull = Ref( ValueWhen( cbear, aaabull, 0 ), -1 );
dbbbull = Ref( ValueWhen( cbear, bbbbull, 0 ), -1 );
yybull = daabull + dbbbull * ( xxbull - 1 );
yybull = IIf( xxbull > Max( offset, 1 ), yybull, Null );
wdbull = sdfact * StdErr( cp, xxbull );
wdbull = Ref( ValueWhen( cbear, wdbull, 0 ), -1 );

xxbear[BarCount-1] = xxbear[BarCount-2] + 1;
aaabear = LinRegIntercept( cp, xxbear );
bbbbear = LinRegSlope( cp, xxbear );
daabear = Ref( ValueWhen( cbull, aaabear, 0 ), -1 );
dbbbear = Ref( ValueWhen( cbull, bbbbear, 0 ), -1 );
yybear = daabear + dbbbear * ( xxbear - 1 );
yybear = IIf( xxbear > Max( offset, 1 ), yybear, Null );
wdbear = sdfact * StdErr( cp, xxbear );
wdbear = Ref( ValueWhen( cbull, wdbear, 0 ), -1 );

llbull = LinearReg( cp, xxbull );
llbull = IIf( xxbull > Max( Offset, 1 ), llbull, Null );
llbullp = LinearReg( cp, xxbull ) + sdfact * StdErr( cp, xxbull );
llbullp = IIf( xxbull > Max( Offset, 2 ), llbullp, Null );
llbullm = LinearReg( cp, xxbull ) - sdfact * StdErr( cp, xxbull );
llbullm = IIf( xxbull > Max( Offset, 2 ), llbullm, Null );
llbear = LinearReg( cp, xxbear );
llbear = IIf( xxbear > Max( Offset, 1 ), llbear, Null );
llbearp = LinearReg( cp, xxbear ) + sdfact * StdErr( cp, xxbear );
llbearp = IIf( xxbear > Max( Offset, 2 ), llbearp, Null );
llbearm = LinearReg( cp, xxbear ) - sdfact * StdErr( cp, xxbear );
llbearm = IIf( xxbear > Max( Offset, 2 ), llbearm, Null );

SetChartBkColor( ParamColor( "Background Color", colorBlack ) );
SetChartOptions( 0, chartShowDates );
SetBarFillColor( IIf( C > O, ParamColor( "Candle UP Color", colorGreen ), IIf(
C <= O, ParamColor( "Candle Down Color", colorRed ), colorLightGrey ) ) );
Plot( C, "Price", IIf( C > O, ParamColor( "Wick UP Color", colorDarkGreen ),
IIf( C <= O, ParamColor( "Wick Down Color", colorDarkRed ), colorLightGrey ) ),
64, 0, 0, 0, 0 );
PlotShapes( IIf( x == BarCount, shapeSmallSquare, shapeNone ), colorWhite, 0,
j, 0 );
Plot( IIf( NW < j, NW, Null ), "\ntrailLong", ParamColor( "ColorTrailLong",
colorGreen ), styleStaircase | styleDots );
Plot( IIf( NW > j, NW, Null ), "\ntrailShort", ParamColor( "ColorTrailShort",
colorRed ), styleStaircase | styleDots );

Buy = trend==1;	Sell = trend==-1;

switch ( tc )
{
case( "No Channel" ):
break;
case( "Channel" ):
Plot( IIf( nwbull AND IsFinite(yybull), yybull, Null ), "", bbb = ColorRGB(
0, 255, 0 ), styleDashed );
Plot( IIf( nwbull AND IsFinite(yybull), yybull + wdbull, Null ), "", bbb,
styleThick );
Plot( IIf( nwbull AND IsFinite(yybull), yybull - wdbull, Null ), "", bbb,
styleThick );
Plot( IIf( nwbear AND IsFinite(yybear), yybear, Null ), "", sss =
ColorRGB( 255, 0, 0 ), styleDashed );
Plot( IIf( nwbear AND IsFinite(yybear), yybear + wdbear, Null ), "", sss,
styleThick );
Plot( IIf( nwbear AND IsFinite(yybear), yybear - wdbear, Null ), "", sss,
styleThick );
PlotOHLC( IIf( nwbull AND IsFinite(yybull), yybull + wdbull, Null ),
IIf( nwbull AND IsFinite(yybull), yybull + wdbull, Null ),
IIf( nwbull AND IsFinite(yybull), yybull - wdbull, Null ),
IIf( nwbull AND IsFinite(yybull), yybull - wdbull, Null ),
"", ColorRGB( 10, 15, 10 ), styleCloud | styleNoLabel, 0, 0, 0, -1 );
PlotOHLC( IIf( nwbear AND IsFinite(yybear), yybear + wdbear, Null ),
IIf( nwbear AND IsFinite(yybear), yybear + wdbear, Null ),
IIf( nwbear AND IsFinite(yybear), yybear - wdbear, Null ),
IIf( nwbear AND IsFinite(yybear), yybear - wdbear, Null ),
"", ColorRGB( 15, 10, 10 ), styleCloud | styleNoLabel, 0, 0, 0, -1 );

_N(Title = VarGetText("Title") +
StrFormat(
", nwbull %g, yybull %g, nwbear %g, yybear %g wdbull %g",
nwbull, yybull, nwbear, yybear, wdbull

)
);
break;
case( "ChannelRT" ):
Plot( IIf( nwbull, llbull, Null ), "", colorGreen, styleDashed,
0, 1, 0, 1 );
Plot( IIf( nwbull, llbullp, Null ), "", colorGreen, styleDashed, 0, 1, 0, 1
);
Plot( IIf( nwbull, llbullm, Null ), "", colorGreen, styleDashed, 0, 1, 0, 1
);
Plot( IIf( nwbear, llbear, Null ), "", colorRed, styleDashed, 0, 1, 0, 1
);
Plot( IIf( nwbear, llbearp, Null ), "", colorRed, styleDashed, 0, 1, 0, 1
);
Plot( IIf( nwbear, llbearm, Null ), "", colorRed, styleDashed, 0, 1, 0, 1
);
PlotOHLC( IIf( nwbull, llbullp, Null ), IIf( nwbull, llbullp, Null ), IIf(
nwbull, llbullm, Null ),
IIf( nwbull, llbullm, Null ), "", ColorRGB( 10, 15, 10 ),
styleCloud | styleNoLabel, 0, 0, 0, -1 );
PlotOHLC( IIf( nwbear, llbearp, Null ), IIf( nwbear, llbearp, Null ), IIf(
nwbear, llbearm, Null ),
IIf( nwbear, llbearm, Null ), "", ColorRGB( 15, 10, 10 ),
styleCloud | styleNoLabel, 0, 0, 0, -1 );
break;
case( "Both Channels" ):
Plot( IIf( nwbull, yybull, Null ), "", bbb = ColorRGB( 0, 255,
0 ), styleLine );
Plot( IIf( nwbull, yybull + wdbull, Null ), "", bbb, styleThick );
Plot( IIf( nwbull, yybull - wdbull, Null ), "", bbb, styleThick );
Plot( IIf( nwbear, yybear, Null ), "", sss = ColorRGB( 255, 0, 0 ),
styleLine );
Plot( IIf( nwbear, yybear + wdbear, Null ), "", sss, styleThick );
Plot( IIf( nwbear, yybear - wdbear, Null ), "", sss, styleThick );
Plot( IIf( nwbull, llbull, Null ), "", colorGreen, styleDashed, 0, 1, 0, 1
);
Plot( IIf( nwbull, llbullp, Null ), "", colorGreen, styleDashed, 0, 1, 0, 1
);
Plot( IIf( nwbull, llbullm, Null ), "", colorGreen, styleDashed, 0, 1, 0, 1
);
Plot( IIf( nwbear, llbear, Null ), "", colorRed, styleDashed, 0, 1, 0, 1
);
Plot( IIf( nwbear, llbearp, Null ), "", colorRed, styleDashed, 0, 1, 0, 1
);
Plot( IIf( nwbear, llbearm, Null ), "", colorRed, styleDashed, 0, 1, 0, 1
);
break;

}

_SECTION_END();
```