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 ....
WiseTrader Toolbox
#1 Selling Amibroker Plugin featuring:
Advanced Adaptive Indicators
Advanced Pattern Exploration
Neural Networks
And Much More ....
ATR ZigZag for Amibroker (AFL)
Copy & Paste Friendly
Back
// ATR ZigZag, Multiple Timeframe // E.M.Pottasch, Nov 2016 Version ( 5.87 ); GfxSetZOrder( -5 ); GfxSetCoordsMode( 1 ); x = BarIndex(); fvb = FirstVisibleValue( x ); lvb = LastVisibleValue( x ); perBull = Param( "perBull", 20, 1, 150, 1 ); perBear = Param( "perBear", 20, 1, 150, 1 ); multBull = Param( "multBull", 2, 1, 4, 0.05 ); multBear = Param( "multBear", 2, 1, 4, 0.05 ); tf = Param( "Time Frame (min)", 5, 1, 1440 * 10, 1 ); // 1440 minutes is 1 day tfrm = in1Minute * tf; tog2 = ParamToggle( "Plot Trail", "No|Yes", 0 ); tog4 = ParamToggle( "Show Labels", "No|Yes", 1 ); tog7 = ParamToggle( "Draw Zig Zag", "No|Yes", 1 ); fact = Nz( Max( tfrm / 60, Interval() / 60 ) / ( Interval() / 60 ) ); function vstop_func() { tvHigh = C; tvLow = C; sup = tvHigh - multBull * ATR( perBull ); res = tvLow + multBear * ATR( perBear ); // following Trail code is from TJ // http://traders.com/Documentation/FEEDbk_docs/2009/06/TradersTips.html trailARRAY = Null; trailstop = 0; for( i = 1; i < BarCount; i++ ) { if( C[ i ] > trailstop AND C[ i - 1 ] > trailstop ) trailstop = Max( trailstop, sup[ i ] ); else if( C[ i ] < trailstop AND C[ i - 1 ] < trailstop ) trailstop = Min( trailstop, res[ i ] ); else trailstop = IIf( C[ i ] > trailstop, sup[ i ], res[ i ] ); trailARRAY[ i ] = trailstop; } return trailARRAY; } TimeFrameSet( tfrm ); trBull = multBull * ATR( perBull ); trBear = multBear * ATR( perBear ); trailArray = vstop_func(); ts = IIf( trailArray > C, trailArray, Null ); // dntrend tl = IIf( trailArray < C, trailArray, Null ); // uptrend TimeFrameRestore(); ts = TimeFrameExpand( ts, tfrm, expandLast ); tl = TimeFrameExpand( tl, tfrm, expandLast ); lll = LLV( L, BarsSince( !IsEmpty( tl ) ) ); lll = IIf( ts, lll, Null ); trm = ts AND L == lll; hhh = HHV( H, BarsSince( !IsEmpty( ts ) ) ); hhh = IIf( tl, hhh, Null ); pkm = tl AND H == hhh; tr = ExRem( Reverse( trm ), Reverse( pkm ) ); pk = ExRem( Reverse( pkm ), Reverse( trm ) ); tr = Reverse( tr ); pk = Reverse( pk ); for( i = 0; i < 3; i++ ) { VarSet( "px" + i, ValueWhen( pk, x, i ) ); VarSet( "tx" + i, ValueWhen( tr, x, i ) ); VarSet( "ph" + i, ValueWhen( pk, H, i ) ); VarSet( "tl" + i, ValueWhen( tr, L, i ) ); } ll = tr AND tl1 < tl2; hl = tr AND tl1 > tl2; hh = pk AND ph1 > ph2; lh = pk AND ph1 < ph2; dt = pk AND ph1 == ph2; db = tr AND tl1 == tl2; GraphXSpace = 5; SetChartBkColor( colorBlack ); SetChartOptions( 1, chartShowDates, chartGridMiddle, 0, 0, 0 ); SetBarFillColor( IIf( C > O, ColorRGB( 0, 75, 0 ), IIf( C <= O, ColorRGB( 75, 0, 0 ), colorLightGrey ) ) ); Plot( C, "", IIf( C > O, ColorRGB( 0, 255, 0 ), IIf( C <= O, ColorRGB( 255, 0, 0 ), colorLightGrey ) ), 64, Null, Null, 0, 0, 1 ); PlotShapes( shapeSmallCircle*trm, ColorRGB( 0, 30, 0 ), 0, L, -10 ); PlotShapes( shapeSmallCircle*pkm, ColorRGB( 50, 0, 0 ), 0, H, 10 ); PlotShapes( shapeSmallCircle*tr, IIf( ValueWhen( trm, x, 1 ) < ValueWhen( pkm, x, 0 ), ColorRGB( 0, 255, 0 ), ColorRGB( 255, 255, 255 ) ), 0, L, -10 ); PlotShapes( shapeSmallCircle*pk, IIf( ValueWhen( pkm, x, 1 ) < ValueWhen( trm, x, 0 ), ColorRGB( 255, 0, 0 ), ColorRGB( 255, 255, 255 ) ), 0, H, 10 ); function drawPivotLabels() { sz = 5; for( i = lvb; i > fvb; i-- ) { { if( ll[i] ) { PlotTextSetFont( "LL", "Arial Black", sz, i, L[i], colorGreen, colorDefault, -25 ); } if( hl[i] ) { PlotTextSetFont( "HL", "Arial Black", sz, i, L[i], colorGreen, colorDefault, -25 ); } if( db[i] ) { PlotTextSetFont( "DB", "Arial Black", sz, i, L[i], colorLightBlue, colorDefault, -25 ); } if( hh[i] ) { PlotTextSetFont( "HH", "Arial Black", sz, i, H[i], colorRed, colorDefault, 20 ); } if( lh[i] ) { PlotTextSetFont( "LH", "Arial Black", sz, i, H[i], colorRed, colorDefault, 20 ); } if( dt[i] ) { PlotTextSetFont( "DT", "Arial Black", sz, i, H[i], colorOrange, colorDefault, 20 ); } } } } function drawZigZag() { for( i = lvb; i > fvb; i-- ) { if( tr[i] ) { GfxSelectPen( colorOrange, 1 ); GfxMoveTo( tx1[i], tl1[i] ); GfxLineTo( px1[i], ph1[i] ); } if( pk[i] ) { GfxSelectPen( colorLightBlue, 1 ); GfxMoveTo( px1[i], ph1[i] ); GfxLineTo( tx1[i], tl1[i] ); } } } Title = Name() + " | " + Now( 2 ); if( tog4 ) drawPivotLabels(); if( tog7 ) drawZigZag(); if( tog2 ) { Plot( ts, "", colorRed, styleStaircase | styleNoRescale, Null, Null, 0, 0, 1 ); Plot( lll, "", colorRed, styleDashed | styleNoRescale, Null, Null, 0, 0, 1 ); Plot( tl, "", colorGreen, styleStaircase | styleNoRescale, Null, Null, 0, 0, 1 ); Plot( hhh, "", colorGreen, styleDashed | styleNoRescale, Null, Null, 0, 0, 1 ); }