PureBytes Links
Trading Reference Links
|
Hi,
I'm attempting to write some code to identify and chart swing highs
and swing lows. Basically, I'm defining these highs and lows the
same way the ZigZag function defines Peaks and Troughs, but with the
following exceptions:
(a) I want to measure change in points rather than as a percentage,
and
(b) I want to be able to measure from Highs to Lows, rather than just
Highs to Highs, Lows to Lows, Closes to Closes, or Opens to Opens.
Before I make these modifications however, I've been trying to mimic
the existing Peak and Trough AFL functions. I first wrote the
following code as a comparative study to identify Peaks and Troughs
as AFL defines them (marking Peaks green and Troughs red on a
candlestick chart).
Plot(C,"Close",IIf(PeakBars(C,5,1)==0,colorGreen,IIf(TroughBars(C,5,1)
==0,colorRed,colorBlack)),styleCandle);
I then set about writing code to mimic this, but without using the
Zig, Peak, or Trough AFL functions. Initially I thought about using
the BarsSince function to determine whether the price retraced the
specified percentage on either side of the potential Peak or Trough
before being taken out. For example, a Peak formed by the Zig(C,5)
function would have to have a close on either side which was 5% below
the close of the Peak before price closed above the peak. However,
the BarsSince function does not seem to accomodate this, as you can't
compare the closes of two different bars (unless you use the Ref
function in which case you would have to know the exact bars you were
comparing).
At any rate, I finally came up with the following code for
identifying peaks, but it is generating errors (presumably because it
is choking on the BarIndex() function calls in the for loops):
function pH( ARRAY, pctChange )
{
threshold = ARRAY * (1-(pctChange/100)); // price that must be
retraced to confirm peak
bH = False; // flag = true when peak is confirmed
// Check price to left of potential peak
for (i=BarIndex()-1; i>=0 AND bH==False AND ARRAY[i]<=ARRAY
[BarIndex()]; i--)
{
if (ARRAY[i] <= threshold)
{
// Check price to right of potential peak
for (j=BarIndex()+1; j<=BarCount AND bH==False AND ARRAY
[j]<=ARRAY[BarIndex()]; j++)
{
if (ARRAY[j] <= threshold)
{
bH=True;
}
}
}
}
return bH;
}
Plot(C,"Close",IIf(pH(C,5),colorGreen,colorBlack),styleCandle);
Does anyone have any suggestions? At this point I'm pretty much
stumped and would welcome any help.
Thanks,
David
------------------------ Yahoo! Groups Sponsor ---------------------~-->
Buy Ink Cartridges or Refill Kits for your HP, Epson, Canon or Lexmark
Printer at MyInks.com. Free s/h on orders $50 or more to the US & Canada.
http://www.c1tracking.com/l.asp?cid=5511
http://us.click.yahoo.com/mOAaAA/3exGAA/qnsNAA/GHeqlB/TM
---------------------------------------------------------------------~->
Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/amibroker/
<*> To unsubscribe from this group, send an email to:
amibroker-unsubscribe@xxxxxxxxxxxxxxx
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|