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

[amibroker] Re: functions to take an array as a parameter



PureBytes Links

Trading Reference Links

Lastvalue() does not give the same results as using the array. It does
not react as fast when the market moves quickly.

I think the problem you had with the array is caused by the zeros the
1st 6 values are initialized to. 1/period where period is zero causes
a problem.

Bill

--- In amibroker@xxxxxxxxxxxxxxx, "jeffro861" <jeffro861@xxx> wrote:
>
> Yes that's perfect.  Lastvalue() was the key.  Thank all of you for 
> your help!!!!
> 
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "Howard B" <howardbandy@> wrote:
> >
> > Greetings --
> > 
> > See if this is what you want:
> > 
> > ////////////////////////////////////////////////
> > 
> > // from Ehlers, John F. Cybernetic Analysis for Stocks and Futures. 
> Wiley.
> > 2004.
> > // Chapter 9, p. 107. Code on p. 111.
> > 
> > function varPeriodRSI( priceField, period )
> > {
> >     Chg = priceField - Ref( priceField, -1 );
> >     pc = Max( Chg, 0 );
> >     nc = Max( -Chg, 0 );
> > 
> >     pa = AMA( pc, 1/period );
> >     na = AMA( nc, 1/period );
> > 
> >     return 100 * pa / ( pa + na );
> > }
> > 
> > SetBarsRequired(200, 0);
> > 
> > // Ehlers Dominant Cycle Period
> > // from Ehlers, John F. Cybernetic Analysis for Stocks and Futures. 
> Wiley.
> > 2004.
> > // Chapter 9, p. 107. Code on p. 111.
> > 
> > function CyclePeriod(array, alpha)
> > // Figure 9.4 on p. 111
> > {
> > smooth = (array + 2*Ref(array, -1) + 2*Ref(array, -2) + Ref(array, -
> 3))/6;
> > 
> > // for(i = 0; i < 7; i++) cycle[i]=array[i]; // Initialize early 
> values and
> > as array
> > 
> > for(i = 0; i < 6; i++)
> > {
> > InstPeriod[i] = 0; // Initialize early values and as array
> > DeltaPhase[i] = 0;
> > cycle[i]=0;
> > Period[i]=0;
> > }
> > 
> > for(i = 6; i < BarCount; i++)
> > {
> > cycle[i] = (1 - .5*alpha)*(1 - .5*alpha)*(smooth[i] - 2*smooth[i-1] 
> +
> > smooth[i-2]) +
> > 2*(1 - alpha)*cycle[i-1] - (1 - alpha)*(1 - alpha)*cycle[i-2];
> > Q1[i] = (.0962*cycle[i] + .5769*cycle[i-2] -.5769*cycle[i-4] -
> > .0962*cycle[i-6])*(.5 + .08*InstPeriod[i-1]);
> > I1[i] = cycle[i-3];
> > 
> > if(Q1[i] != 0 AND Q1[i-1] != 0)
> > DeltaPhase[i] = (I1[i]/Q1[i] - I1[i-1]/Q1[i-1])/(1 +
> > I1[i]*I1[i-1]/(Q1[i]*Q1[i-1]));
> > if(DeltaPhase[i] < 0.1) DeltaPhase[i] = 0.1;
> > if(DeltaPhase[i] > 1.1) DeltaPhase[i] = 1.1;
> > 
> > //----- Speed up the median calculation by placing it inline
> > 
> > mlen = 5;
> > for(k = mlen - 1; k >= 0; k--) {temparray[k] = DeltaPhase[i + k - 
> (mlen -
> > 1)];}
> > 
> > temp=0;
> > for(k = mlen - 1; k > 0; k--)
> > {for (j = mlen - 1; j > 0; j--)
> > {if (temparray[j-1] > temparray[j])
> > {
> > temp = temparray[j-1];
> > temparray[j-1] = temparray[j];
> > temparray[j] = temp;
> > }
> > }
> > }
> > MedianDelta[i] = temparray[mlen - 1 - (mlen / 2)];
> > 
> > //----- End median calculation
> > 
> > if(MedianDelta[i] == 0) DC[i] = 15;
> > else DC[i] = 6.28318/MedianDelta[i] + .5;
> > 
> > InstPeriod[i] = .33*DC[i] + .67*InstPeriod[i-1];
> > Period[i] = .15*InstPeriod[i] + .85*Period[i-1];
> > }
> > return Period;
> > }
> > 
> > Med = (H+L)/2;
> > 
> > // CyclePeriod
> > CP = CyclePeriod(Med, .07);
> > //Plot(CP, "CyclePeriod", colorRed, styleLine);
> > //
> > Graph0BarColor=IIf(CP>Ref(CP,-1),colorGreen,colorBlue);//-----------
> -----------------------------
> > 
> > 
> > Med = (H+L)/2;
> > 
> > // CyclePeriod
> > CP = (CyclePeriod(Med, .07))/2;
> > 
> > 
> > //#include_once <varPeriodRSI.afl>
> > 
> > Vp = Varperiodrsi(C,LastValue(Cp));
> > VpSm = DEMA(Vp,3);
> > 
> > Buy = Cross(Vp,Vpsm);
> > //Sell=Cross(vpsm,vp);
> > Sell = BarsSince(Buy) >=5;
> > 
> > Plot(C,"C",colorBlack,styleCandle);
> > PlotShapes(Buy*shapeUpArrow+Sell*shapeDownArrow,
> >         IIf(Buy,colorGreen,colorRed));
> > 
> > 
> > 
> > Plot(Vp,"VPRSI", colorRed, styleLine|styleLeftAxisScale);
> > Plot(VpSm,"VPRSISM",colorGreen,styleLine|styleLeftAxisScale);
> > 
> > _SECTION_END();
> > 
> > /////////////////////////////////////////////
> > 
> > Thanks,
> > Howard
> > www.quantitativetradingsystems.com
> > 
> > 
> > On Jan 17, 2008 4:30 PM, jeffro861 <jeffro861@> wrote:
> > 
> > >   I'm still getting a blank in the chart.
> > >
> > > thanks,
> > > Jeff H.
> > >
> > > // from Ehlers, John F. Cybernetic Analysis for Stocks and 
> Futures.
> > > Wiley. 2004.
> > > // Chapter 9, p. 107. Code on p. 111.
> > >
> > > function CyclePeriod(array, alpha)
> > > // Figure 9.4 on p. 111
> > > {
> > > smooth = (array + 2*Ref(array, -1) + 2*Ref(array, -2) + Ref
> (array, -
> > > 3))/6;
> > >
> > > // for(i = 0; i < 7; i++) cycle[i]=array[i]; // Initialize early
> > > values and as array
> > >
> > > for(i = 0; i < 6; i++)
> > > {
> > > InstPeriod[i] = 0; // Initialize early values and as array
> > > DeltaPhase[i] = 0;
> > > cycle[i]=0;
> > > Period[i]=0;
> > > }
> > >
> > > for(i = 6; i < BarCount; i++)
> > > {
> > > cycle[i] = (1 - .5*alpha)*(1 - .5*alpha)*(smooth[i] - 2*smooth[i-
> > > 1] + smooth[i-2]) +
> > > 2*(1 - alpha)*cycle[i-1] - (1 - alpha)*(1 - alpha)
> > > *cycle[i-2];
> > > Q1[i] = (.0962*cycle[i] + .5769*cycle[i-2] -.5769*cycle[i-4] -
> > > .0962*cycle[i-6])*(.5 + .08*InstPeriod[i-1]);
> > > I1[i] = cycle[i-3];
> > >
> > > if(Q1[i] != 0 AND Q1[i-1] != 0)
> > > DeltaPhase[i] = (I1[i]/Q1[i] - I1[i-1]/Q1[i-1])/(1 + I1[i]*I1
> > > [i-1]/(Q1[i]*Q1[i-1]));
> > > if(DeltaPhase[i] < 0.1) DeltaPhase[i] = 0.1;
> > > if(DeltaPhase[i] > 1.1) DeltaPhase[i] = 1.1;
> > >
> > > //----- Speed up the median calculation by placing it inline
> > >
> > > mlen = 5;
> > > for(k = mlen - 1; k >= 0; k--) {temparray[k] = DeltaPhase[i + k -
> > > (mlen - 1)];}
> > >
> > > temp=0;
> > > for(k = mlen - 1; k > 0; k--)
> > > {for (j = mlen - 1; j > 0; j--)
> > > {if (temparray[j-1] > temparray[j])
> > > {
> > > temp = temparray[j-1];
> > > temparray[j-1] = temparray[j];
> > > temparray[j] = temp;
> > > }
> > > }
> > > }
> > > MedianDelta[i] = temparray[mlen - 1 - (mlen / 2)];
> > >
> > > //----- End median calculation
> > >
> > > if(MedianDelta[i] == 0) DC[i] = 15;
> > > else DC[i] = 6.28318/MedianDelta[i] + .5;
> > >
> > > InstPeriod[i] = .33*DC[i] + .67*InstPeriod[i-1];
> > > Period[i] = .15*InstPeriod[i] + .85*Period[i-1];
> > > }
> > > return Period;
> > > }
> > >
> > > Med = (H+L)/2;
> > >
> > > // CyclePeriod
> > > CP = (CyclePeriod(Med, .07))/2;
> > >
> > > #include_once <varPeriodRSI.afl>
> > > Plot(Varperiodrsi(C,Cp),"CyclePeriod", colorRed, styleLine);
> > > _SECTION_END();
> > >
> > >
> > > --- In amibroker@xxxxxxxxxxxxxxx <amibroker%40yahoogroups.com>,
> > > "bilbo0211" <bilbod@> wrote:
> > > >
> > > > --- In amibroker@xxxxxxxxxxxxxxx <amibroker%40yahoogroups.com>,
> > > "jeffro861" <jeffro861@> wrote:
> > > > >
> > > > > Thanks for the response! This seems like it would work but 
> when
> > > I
> > > > > try and plot this function it doesn't show anything, but at 
> least
> > > I'm
> > > > > not getting an error message. Does anybody have any idea why?
> > > >
> > > > #include_once <varPeriodRSI.afl>
> > > >
> > > > Plot(varPeriodRSI(C,14),"",colorRed);
> > > >
> > > > period=IIf(C>O,5,25);
> > > >
> > > > Plot(varPeriodRSI((H+L)/2,period),"",colorBlue);
> > > >
> > > > The above code works for me, show the code you are using.
> > > >
> > > > Bill
> > > >
> > >
> > >  
> > >
> >
>




Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to 
SUPPORT {at} amibroker.com

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

For other support material please check also:
http://www.amibroker.com/support.html
 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> 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/