Thanks for your help Graham... Could you elaborate on the third part please? I believe I also needed to switch my arctan calculation from radians to degrees so on the numerator I put 6.283185307
--- In [email protected], Graham <[EMAIL PROTECTED]> wrote: > > 3 things about the code > if (Im[i] != 0 AND Re[i] != 0) > Period[i]=(360/atan(Im[i]/Re[i])); > else if (Period[i]>(1.5*(Period[i-1]))) Period[i]= (1.5* > (Period[i-1])); > else if (Period[i]<(.67*Period[i-1])) > Period[i]=(.67*(Period[i-1])); > else if (Period[i]<6) Period[i]=6; > else if (Period[i]>50) Period[i]=50; > Period=.2*Period[i]+(.8*Period[i-1]); > > You are using else if for the first Period check and period is not > calculated if the first condition if (Im[i] != 0 AND Re[i] ! = 0) is > not true, so it is only ever using the initiated value of period from before > the loop > Also your last Period calculation is missing the array identifier so period > is not always passed to outside the loop except for the last value of the > array > Try this > > if (Im[i] != 0 AND Re[i] != 0) > Period[i]=(360/atan(Im[i]/Re[i])); > > if (Period[i]>(1.5*(Period[i-1]))) Period[i]=(1.5* > (Period[i-1])); > else if (Period[i]<(.67*Period[i-1])) > Period[i]=(.67*(Period[i-1])); > else if (Period[i]<6) Period[i]=6; > else if (Period[i]>50) Period[i]=50; > Period[i] =.2*Period[i]+(.8*Period[i-1]); > > The 3rd is that you calculation for Re and Im should be inside the loop as > you are trying to reference a periovus value of the variables in their own > calcualtions, this also occurs for a few other variables. You have to > remember that tradestation is based on looping for its basic coding method. > This is different to AB whihch calculates each variable for each bar, TS > calculates each bar for each variable > -- > Cheers > Graham > AB-Write >< Professional AFL Writing Service > Yes, I write AFL code to your requirements > http://www.aflwriting.com > > On 23/12/06, jeffro861 <[EMAIL PROTECTED]> wrote: > > > > I got this from tradestation code as seen in the algorithm, but > > apparently it thinks Period[i]<6. Does anybody have any clues? > > TIA > > > > > > _SECTION_BEGIN("Ehler's Dominant Cycle1"); > > //derived from > > http://www.mesasoftware.com/Seminars/TAG22RocketScience.ppt#294,12,Cy > > cle Period Code (cont) > > > > SetBarsRequired(200,0); > > P=(H+L)/2; > > > > {Period=0; jI=0;jQ=0;I1=0;I2=0;Q2=0;Q1=0; X1=0;X2=0;Y1=0;Re=0;Im=0; > > } > > //Smooth with less than one lag > > Smoother=(4*P+3*Ref(P,-1) +2*Ref(P,-2) +4*Ref(P,-3))/10; > > > > //detrend with linear phase > > Detrender=(.25*Smoother+.75*Ref(Smoother,-2) -.75*Ref(Smoother,- 4)- > > .25*Ref(Smoother,-6))*(.046*Ref(period,-1)+.332); > > > > //Compute InPhase and Quadrature components > > jI=.25*I1+.75*Ref(I1,-2) -.75*Ref(I1,-4)-.25*Ref(I1,-6); > > jQ=.25*Q1+.75*Ref(Q1,-2) -.75*Ref(Q1,-4)-.25*Ref(Q1,-6); > > > > //Phasor addition to equalize amplitude due to quadrature > > calculations (and 3 bar averaging) > > I2=I1-jQ; > > Q2=Q1+jI; > > > > //Smoothe the I and Q components before applying the discriminator > > I2=.15*I2+.85*Ref(I2,-1); > > Q2=.15*Q2+.85*Ref(Q2,-1); > > > > //Homodyne Discriminator > > //Complex Conjugate Multiply > > X1=I2*Ref(I2,-1); > > X2=I2*Ref(Q2,-1); > > Y1=Q2*Ref(Q2,-1); > > Y2=Q2*Ref(I2,-1); > > Re=X1+Y1; > > Im=X2-Y2; > > //Smooth to remove undesired cross products > > Re=.2*Re+.8*Ref(Re,-1); > > Im=.2*Im+.8*Ref(Im,-1); > > //Compute cycle period > > for(i=1;i<BarCount;i++) > > { > > if (Im[i] != 0 AND Re[i] != 0) > > Period[i]=(360/atan(Im[i]/Re[i])); > > else if (Period[i]>(1.5*(Period[i-1]))) > > Period[i]=(1.5*(Period[i-1])); > > else if (Period[i]<(.67*Period[i-1])) > > Period[i]=(.67*(Period[i-1])); > > else if (Period[i]<6) > > Period[i]=6; > > else if (Period[i]>50) > > Period[i]=50; > > Period=.2*Period[i]+(.8*Period[i-1]); > > } > > Plot(Period,"CyclePeriod",colorRed,styleLine); > > _SECTION_END(); > > > > > > > > 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 > > > > > > > > >
