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 ....
ZigZag for Amibroker (AFL)
Copy & Paste Friendly
Back
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | _SECTION_BEGIN ( "ZigZag Retracement" ); function GetXSupport(Lo, Percentage, Back) { return (( BarCount - 1) - LastValue ( TroughBars (Lo, Percentage,Back))); } function GetYSupport(Lo, Percentage, Back) { return ( LastValue ( Trough (Lo, Percentage, back))); } function GetXResistance(Hi, Percentage, Back) { return (( BarCount - 1) - LastValue ( PeakBars (Hi, Percentage, Back))); } function GetYResistance(Hi, Percentage, Back) { return ( LastValue ( Peak (Hi, Percentage, Back))); } ////////////////////////////////////////////////////////////////// Per = Param ( "Period" , .618, .1, 20, .001); Period = Param ( "Look back" , 10, 1, BarCount -1); ShowRet = ParamToggle ( "Show Retracement values" , "No|Yes" ,1); Price = ParamList ( "Price to follow:" , "Close|High|Low" , 1); if (Price== "Close" ) ZigP = Zig ( C , per); else if (Price== "High" ) ZigP = Zig ( H , per); else ZigP = Zig ( L , per); ////////////////////////////////////////////////////////////////// Plot ( C , "" , IIf ( O >= C , colorDarkRed , colorDarkGreen ), ParamStyle ( "Price Style" , styleBar ,maskPrice)); Plot (ZigP, "Zig" , colorGold , styleThick ); ////////////////////////////////////////////////////////////////// xs1 = GetXSupport(ZigP, .01, 1); xr1 = GetXResistance(ZigP, .01, 1); ys1 = GetYSupport(ZigP, .01, 1); yr1 = GetYResistance(ZigP, .01, 1); if (xs1 < xr1) { x = LineArray (xs1, ys1, BarCount - 1, LastValue (ZigP)); Down = (yr1 - LastValue (ZigP)) / (yr1 - ys1); DnBars = BarCount - 1 - xr1; Plot (x, "" , colorRed , styleDots ); PlotText ( StrFormat ( "%.3f (%.0f)" , Down, DnBars), (xs1 + BarCount -1)/2, (ys1+ LastValue (ZigP))/2, colorWhite ); } else { x = LineArray (xr1, yr1, BarCount - 1, LastValue (ZigP)); Up = ( LastValue (ZigP) - ys1) / (yr1 - ys1); UpBars = BarCount - 1 - xs1; Plot (x, "" , colorRed , styleDots ); PlotText ( StrFormat ( "%.3f (%.0f)" , Up, UpBars), (xr1 + BarCount -1)/2, (yr1+ LastValue (ZigP))/2, colorWhite ); } Plot ( 1, "" , IIf ( xs1 > xr1, colorGreen , colorRed ), styleOwnScale | styleArea | styleNoLabel , -0.5, 100 ); if (ShowRet) for (i=2; i<=Period+1; i++) { xs0 = GetXSupport(ZigP, .01, i); xs1 = GetXSupport(ZigP, .01, i-1); ys0 = GetYSupport(ZigP, .01, i); ys1 = GetYSupport(ZigP, .01, i-1); xr0 = GetXResistance(ZigP, .01, i); xr1 = GetXResistance(ZigP, .01, i-1); yr0 = GetYResistance(ZigP, .01, i); yr1 = GetYResistance(ZigP, .01, i-1); xs = LineArray (xs0, ys0, xs1, ys1, 0); Plot (xs, "" , colorLightBlue , styleLine ); xr = LineArray (xr0, yr0, xr1, yr1, 0); Plot (xr, "" , colorLightBlue , styleLine ); if (xs1 < xr1) { Up = (yr1 - ys1) / (yr0 - ys1); Down = (yr0 - ys1) / (yr0 - ys0); UpBars = xr1 - xs1; DnBars = xs1 - xr0; } else { Up = (yr1 - ys0) / (yr0 - ys0); Down = (yr1 - ys1) / (yr1 - ys0); UpBars = xr1 - xs0; DnBars = xs1 - xr1; } PlotText ( StrFormat ( "%.3f (%.0f)" , Up, UpBars), (xr1 + xr0)/2, (yr1+yr0)/2, colorWhite ); PlotText ( StrFormat ( "%.3f (%.0f)" , Down, DnBars), (xs1 + xs0)/2, (ys1+ys0)/2, colorWhite ); //Plot(LineArray(xs0, ys0, BarCount-1, ys0), "", colorGreen, styleDashed); //Plot(LineArray(xr0, yr0, BarCount-1, yr0), "", colorRed, styleDashed); } str = StrFormat ( " (Bars to END=%.0f)\n" , BarCount - 1 - BarIndex ()); Title = FullName ()+ " (" + Name ()+ ") - " + Date ()+ " - Open: " + O + ", Hi: " + H + ", Lo: " + L + ", Close: " + C + StrFormat ( " (%.2f %.2f%%)" , C - Ref ( C , -1), SelectedValue ( ROC ( C , 1)))+str; WriteIf (1, "\nNote Fibonacci numbers:\nPrimary numbers: 0.618, 0.786, 1.27 and 1.618" , "" ); WriteIf (1, "Secondary numbers: 0.382, 0.50, 1.00, 2.00, 2.24, 2.618 and 3.14" , "" ); _SECTION_END (); |