This formula may help you.
Unknown author.
Best regards
|_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(" \n(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();|
Le 14/07/2010 13:42, ford7k a écrit :
Hi friends
please help me get this code of afl.
I have a price chart.
I like to measure each zig and zag for time lapsed during that move in
minutes or hours and rise orfall in price during that zig or zag
In a sideways trend ,mostly time for zig or zag is almost equal.
in an uptrend, upward zig duration and dnward zag duration are
different and te price rise/fall is different
same with downtrend.
from each hh and ll,I need to get duration in time and rise or fall in
price.
Thanks for help
regards
ford