[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [amibroker] Re: optimize one stock



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/