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 (Edited) for Amibroker (AFL)
hariom
over 11 years ago
Amibroker (AFL)

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

Good afl find trend and make channel

Similar Indicators / Formulas

Trend Following Indicator
Submitted by trek over 14 years ago
SHIV SABHU + ROC
Submitted by jayman over 12 years ago
Seasionality
Submitted by saiflingkon over 13 years ago
An n bar Reversal Indicator
Submitted by kaiji almost 15 years ago
PROFIT TRADING SYSTEM
Submitted by Muralikrishna over 11 years ago
Super Trend
Submitted by ginto over 10 years ago

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

kk = Optimize( "mult", Param( "mult", 1.25, 1, 2, 0.25 ), 1, 2, 0.25 );
Per = Optimize( "period", Param( "period", 10, 5, 50, 1 ), 5, 50, 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 );


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;
}

2 comments

1. rajathtrader

good afl, useful

2. marcheur

Very Nice Thanks

Leave Comment

Please login here to leave a comment.

Back