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

[amibroker] Re: Writing a fib cluster indicator - strange issue


  • Date: Tue, 22 Dec 2009 03:07:52 -0000
  • From: "Mike" <sfclimbers@xxxxxxxxx>
  • Subject: [amibroker] Re: Writing a fib cluster indicator - strange issue

PureBytes Links

Trading Reference Links



Without commenting on the rest of the code, you should still try to pull out redundant array calculations from your loops. Avoid repeating inside a loop that which can be done once before the loop.
e.g.
peaks = PeakBars( H, n ) == 0; troughs = TroughBars( L, n ) == 0; for (...) { p[i] = LastValue( ValueWhen( peaks, H, i ) ); //last 9 peaks t[i] = LastValue( ValueWhen( troughs, L, i ) );//last 9 troughs ... } Mike
--- In amibroker@xxxxxxxxxxxxxxx, "kevinoversby" <kevinoversby@xxx> wrote:
>
>
>
> OK, its running stably now, execution time well under 0.5 s. Next steps are to sort the levels and detect clusters for plotting.
>
> If I try to set any of the fibs values to negative values they are returned as {EMPTY} - why is that?
>
> Thanks / Kevin
>
> SetBarsRequired(sbrAll,sbrAll);
>
> n = 0.3 ;//approx. 4 point swing on ES
> fibs[1] = .62; fibs[2] = .27; fibs[3] = 0.01; fibs[4] = .38; fibs[5] = .5;
> fibs [6] = .62; fibs[7] = 1; fibs[8] = 1.27; fibs[9] = 1.62; //9 symmetric levels
>
> for(i=1;i<=9;i++)
> {
>
> p[i] = LastValue(ValueWhen(PeakBars(H,n)==0,H,i)); //last 9 peaks
> t[i] = LastValue(ValueWhen(TroughBars(L,n)==0,L,i));//last 9 troughs
>
> for(j=1;j<=9;j++)
> {
> for(k=1;k<=9;k++)
> {
>
> array[100*i+10*j+k-111] = t[i] + fibs[k] * (p[j] - t[i]); // calc fib levels
> }}}
>
> // Plot levels for testing purposes
>
> for(i=1;i<=900;i++) {
> Plot(IIf(array[i]>0,array[i],-1e10),"a",colorBlue);
> }
>
>
>
> --- In amibroker@xxxxxxxxxxxxxxx, "kevinoversby" kevinoversby@ wrote:
> >
> >
> >
> >
> >
> >
> > I've now got the levels plotting on ES 15 second data and its actually quite fast as the array function calls are in a small loop. The strange part is that the array reverts to empty shortly after plotting. Can anyone see why?
> >
> > Thanks / Kevin
> >
> >
> > n = 0.3 ; //approx. 4 point swing on ES
> > fibs[1] = -.62; fibs[2] = -.27; fibs[3] = 0; fibs[4] = .38; fibs[5] = .5;
> > fibs [6] = .62; fibs[7] = 1; fibs[8] = 1.27; fibs[9] = 1.62; //9 symmetric levels
> >
> > PeakCondition=PeakBars(H,n)==0;
> > TroughCondition=TroughBars(L,n)==0;
> >
> > for(i=1;i<=10;i++)
> > {
> >
> > p[i]=LastValue(ValueWhen(PeakCondition,H,i));
> > t[i] = LastValue(ValueWhen(TroughCondition,L,i));
> >
> > for(j=1;j<=10;j++)
> > {
> > for(k=1;k<=5;k++)
> > {
> >
> > array[i+j+k-2] = t[i] + fibs[k] * (p[j] - t[i]); // calc fib levels
> > }}}
> >
> > // Plot first 100 unfiltered levels for test purposes
> >
> > for(i=1;i<=100;i++) {
> > Plot(IIf(array[i]>0,array[i],-1e10),"a",colorBlue);
> > }
> >
> > --- In amibroker@xxxxxxxxxxxxxxx, "kevinoversby" <kevinoversby@> wrote:
> > >
> > > Hi Mike,
> > >
> > > Thank you very much for taking the time to post these tips. I will incorporate as much as I can and post the update later.
> > >
> > >
> > > Kevin
> > >
> > > --- In amibroker@xxxxxxxxxxxxxxx, "Mike" <sfclimbers@> wrote:
> > > >
> > > > Hi,
> > > >
> > > > A couple of quick points to spare you some wasted time.
> > > >
> > > > 1. In general; I think that you would benifet greatly by reading the following:
> > > >
> > > > http://www.amibroker.com/guide/h_understandafl.html
> > > >
> > > > 2. You *really* do not want to be making array based function calls (e.g. PeakBars, ValueWhen, IIF, TroughBars, etc) within a loop. This will be horribly slow. Look for a way to calculate everything outside of a loop.
> > > >
> > > > 3. The termination check of all your for loops are incorrect. Do not use "i = 10". You probably want something like "i <= 10". It needs to be a boolean if you ever want it to terminate. Also "=" is assignment, "==" is equivalence test.
> > > >
> > > > http://www.amibroker.com/guide/a_mistakes.html
> > > >
> > > > 4. When trying to populate an array inside a loop, you generally should be populating bar by bar: e.g. array[i] = ...
> > > >
> > > > Mike
> > > >
> > > > --- In amibroker@xxxxxxxxxxxxxxx, "kevinoversby" <kevinoversby@> wrote:
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > Parts 1) & 2)
> > > > >
> > > > > n = 0.3 //approx. 4 point swing on ES
> > > > > fibs = [-.62 -.27 0 .38 .5 .62 1 1.27 1.62]; //symmetric
> > > > >
> > > > > for(i=1;i=10;i++)
> > > > > {
> > > > > PeakCondition=PeakBars(H,n)==0;
> > > > > p[i] = ValueWhen(PeakCondition,H,i);
> > > > > p[i] = IIf(p[i] >= HHV(p,i),p[i],0); //set to zero if not HH
> > > > >
> > > > > TroughCondition=TroughBars(L,n)==0;
> > > > > t[i] = ValueWhen(TroughCondition,L,i);
> > > > > t[i] = IIf(t[i] <= LLV(t,i),t[i],0); //set to zero if not LL
> > > > >
> > > > > for(j=1;j=10;j++)
> > > > > {
> > > > > for(k=1;k=9;k++)
> > > > > {
> > > > >
> > > > > array = t[i] + fibs[k] * (p[j] - t[i]); // calc fib levels
> > > > > }}}
> > > > >
> > > > > I'm unsure of the last line - how to assign the fib levels to an array for sorting. Thanks in advance for any help.
> > > > >
> > > > >
> > > > > Kevin
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > --- In amibroker@xxxxxxxxxxxxxxx, "kevinoversby" <kevinoversby@> wrote:
> > > > > >
> > > > > > I have not found an AFL implementation of this so decided to develop my own. I'm doing it here as there are a couple of coding issues I'm unsure of. Constructive comments and tips most welcome.
> > > > > >
> > > > > > Process:
> > > > > >
> > > > > > 1) Find i last higher peaks and j last lower troughs
> > > > > > 2) For each peak/trough pair, calculate fib levels and add to array
> > > > > > 3) Sort array
> > > > > > 4) Discard a level if distance to next level > tolerance
> > > > > > 5) Plot remaining levels, preferably at left or right edge like volume at price (VAP) to simplify chart.
> > > > > >
> > > > > > (A thought just occurred that this would also be a useful exercise with VAP levels - investigate later).
> > > > > >
> > > > > >
> > > > > > Kevin
> > > > > >
> > > > >
> > > >
> > >
> >
>


__._,_.___


**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.

TO GET TECHNICAL SUPPORT send an e-mail directly to
SUPPORT {at} amibroker.com

TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/





Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___