| Hi Joe,   I dug it up. Hadn't worked on it for the past two years. Spent 
lots of time trying to duplicate the signals given by Stefan 
Sbondorovitch's dll but discovered that because of the recursive moving averages 
used within the formula, that unless I knew exactly how many bars were used in 
his calculation, it probably would never be an exact match anyway. I think that 
I did get pretty close. I believe that the sine wave generator code is your 
creation.   There has been a lot of water under the bridge since I wrote 
this, so if you see anything that I did wrong from the EasyLanguage 
conversion, let me know. Also, Ehlers has other older, slightly different versions of 
the Sinewave out there.   My formula has lots of extra stuff in it for debugging and it 
runs slow, so don't think that your computer locked up.   I tried mm's code but all I got was two flat lines. He also 
inputs degrees into AB functions that require radians.   If Yahoo doesn't take attachments, here are the gory 
details:   /* Ehlers Sinewave 
Indicator by Corey Saxe ver 
20032005 From Ehlers book: Cybernetic Analysis for Stocks 
and Futures, p. 154 */ SetBarsRequired(1000000,1000000); price=(H+L)/2; alpha=Param("alpha",0.07,0.01,1,0.01);   pi=4*atan(1); //have a piece... RTD=180/pi; 
//radians to 
degrees DTR=1/RTD; 
//degrees to 
radians SWcount=0;SWGate=0;Jcount=0;SWCycle=0;I1=0;Q1=0;InstPeriod=0;DeltaPhase=0;MedianDelta=0;DC=0;Value1=0; DCPeriod=0;RealPart=0;ImagPart=0;DCPhase=0;MedianDelta=0;Cycle=0;RealPart = 
0; ImagPart = 0; // Sine wave 
generator----------------------------------------------------------- freq =Param("Freq",15,6,50,1); SWcycle = sin( 
Cum(1)*(360*DTR)/freq 
)+2; Price = IIf(Param("Prices or 
test",1,1,2,1)==1,Price,SWCycle); 
//Select sinewave test pattern or real 
prices //End Sine wave 
generator--------------------------------------------------------   for(i=36;i<BarCount;i++)//37 { Smooth[i]=(price[i]+2*price[i-1]+2*price[i-2]+price[i-3])/6; Cycle[i] = ((1-0.5*alpha[i])^2)*(Smooth[i] - 2*Smooth[i-1] + 
Smooth[i-2]) + 2*(1-alpha[i])*Cycle[i-1] - ((1-alpha[i])^2)*Cycle[i-2];   //Hilbert Transform} Q1[i] = (0.0962*Cycle[i] + 0.5769*Cycle[i-2] - 
0.5769*Cycle[i-4] - 0.0962*Cycle[i-6]) * 
(0.5 + 0.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; MedianDelta=Median(DeltaPhase , 5); //zzz[i]=Mediandelta[i]; 
OK //zzz=Mediandelta[i]; NOT 
OK if (MedianDelta[i] == 0) DC[i]=15; else 
 DC[i] = 2*pi/MedianDelta[i] + 0.5;//DC[i] is 
OK InstPeriod[i] = 0.33*DC[i] + 0.67*InstPeriod[i-1]; Value1[i] = 0.15*InstPeriod[i] + 0.85*Value1[i-1]; //Compute Dominant Cycle 
Phase DCPeriod[i] = int(Value1[i]); for (count=0; count < DCPeriod[i]-1; Count++)//DCPeriod-1  { RealPart[i] = RealPart[i] + sin(DTR*(360*count / DCPeriod[i])) * 
Cycle[i-count]; ImagPart[i] = ImagPart[i] + cos(DTR*(360*count / DCPeriod[i])) * 
Cycle[i-count]; }   // Code to prevent TS arctan > 
infinity if (abs(ImagPart[i]) > 0.000001) DCPhase[i] = atan(RealPart[i]/ImagPart[i]); if (abs(ImagPart[i]) <= 0.000001) DCPhase[i] = (pi/2) * sign(RealPart[i]);   DCPhase[i] = DCPhase[i] + (pi/2);//90 if (ImagPart[i] < 0) DCPhase[i] = DCPhase[i] + pi;// add 180 if (DCPhase[i] > (7*pi/4)) DCPhase[i] = 
DCPhase[i] - (2*pi);// sub 360 } Sine = sin(DCPhase); LeadSine = sin(DCPhase+(pi/4)); A1=Cross(sine,Leadsine); A2= Cross(Leadsine,sine); GraphXSpace=5; Plot(Sine,"Sine",colorRed,1);Plot(LeadSine,"LeadSine",colorGreen,1); //Plot(price,"",colorYellow,24|styleNoLabel);Plot(price,"Price",colorBlue,1|styleNoLabel); //Plot(A1 OR A2,"Grn-Trough 
Red-Peak",IIf(A1,colorRed,IIf(A2,colorGreen,Null)),2|styleOwnScale|styleNoLabel); //Plot(cycle,"cycle",3,1); //Plot(smooth,"smooth",0,1); //Plot(test,"dcp",2,8);Plot(test1,"dcp1",1,8); //Plot(dcperiod,"DCPeriod",0,1);Plot(Count,"count",1,1); //Plot(DC,"DC",2,1); //Plot(realpart,"RP",0,1);Plot(imagpart,"IP",1,1); //Plot(alpha,"alpha",2,1);   ----- Original Message -----  
  
  
  Sent: Monday, September 12, 2005 5:40 
  PM Subject: Re: [amibroker] Ehler's SineWave 
  Indicator Code check form AB GURU please. 
 Hello Corey Saxe - are you on line?  
  
 Moni -
 Corey wrote a version of it and let's see if he's 
  still on the forum and if you get his copy then you can compare your 
  code with his.     It may well be in the AFL area in Amibroker or the AB 
  Forum files area.    JOE    
 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 other support material please check also:
 http://www.amibroker.com/support.html
 
 
 
 
 
 
   YAHOO! GROUPS LINKS
 
 
 
   
 |