PureBytes Links
Trading Reference Links
|
Thanks Corey, I will give it a try.
You're right about the straight lines; That is the reason I really
need your help. Now that you suspect of my sine function in degrees;
That might be my problem. Thanks again.
--- In amibroker@xxxxxxxxxxxxxxx, "Corey Saxe" <res1wgwl@xxxx> wrote:
> 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 -----
> From: Joe Landry
> To: amibroker@xxxxxxxxxxxxxxx
> 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
------------------------ Yahoo! Groups Sponsor --------------------~-->
Help tsunami villages rebuild at GlobalGiving. The real work starts now.
http://us.click.yahoo.com/njNroD/KbOLAA/cosFAA/GHeqlB/TM
--------------------------------------------------------------------~->
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
<*> 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/
|