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 ....
For Portfolio Manager Click Here

WiseTrader Toolbox

#1 Selling Amibroker Plugin featuring:

Advanced Adaptive Indicators
Advanced Pattern Exploration
Neural Networks
And Much More ....
Find Out More Here

Automatic Linear Trend Channel (edited) for Amibroker (AFL)
crkumar
almost 8 years ago
Amibroker (AFL)

Rating:
3 / 5 (Votes 5)
Tags:
amibroker, trend

This appears to be an edited version of Edward Pottasch’ AFL.
Saw it in a forum
http://www.traderji.com/amibroker/103501-alf.html#post1191706

Screenshots

Indicator / Formula

Copy & Paste Friendly
// Automatic Linear Trend Channel (edited)
// original author Edward Pottasch
// Trend is defined using code found on the net
// see also: http://www.youtube.com/watch?v=HWPSqwEkN64
// Amibroker AFL code by Edward Pottasch, November 2011
// edited by Anderson Wilson, July 2012
// some symbols makes yybull and yybear infinite, 
// added IsFinite(yybull) AND IsFinite(yybear)
// 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 = BarsSince( cbull );
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 = BarsSince( cbear );
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;
Buy = ExRem(Buy,Sell);	Sell = ExRem(Sell,Buy);
PlotShapes(Buy+2*Sell, colorBrightGreen, 0,IIf(Buy,L,H),-30);


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();

1 comments

1. Kevin

Hi, Any chance you could edit this great code, so that it shows just the last up or down down channel, with the current live channel?

Leave Comment

Please login here to leave a comment.

Back