Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
14 février 2008 4 14 /02 /février /2008 12:51

Cycles : les publications de J. Ehlers, partie 2.

 

Voici un second système présenté dans le fichier "TAG22 Rocket Science".  Les codes viennent toujours d'Arnaudbzh chez dakoté.  J'ai trouvé relativement peu d'information sur son utilisation.  Comme pour le système 1, il y a une trendline et un filtre mais le code est différent.  De même le calcul de la période et du rapport signal/bruit est autre.  Au final, les zones de cycle et de trend ne sont pas communes aux 2 systèmes.  L'indicateur Awesome est fait pour confirmer le signal sur le Sinewave.  La valeur du rapport signal/bruit négative me paraît bizarre.  J'ai corrigé la fonction ROUND en INTEGER, de même dans le fichier que j'ai, il n'est pas fait mention de la condition de bruit>6 dB codée par Arnaudbzh pour le Mode.

 

Voici une vue du CAC avec les indicateurs : en fenêtre 1, le prix avec la TRENDLINE et le filtre, en fenêtre 2, le MODE version Arnaudbzh, en fenêtre 3, le MODE version hk, en fenêtre 4,  l'indicateur CORE, en fenêtre 5, l'indicateur de PHASE, en fenêtre 6, l'indicateur SNR, en fenêtre 7, le SINEWAVE et en fenêtre 8, l'indicateur AWESOME.

 

hk71.gif

 

Et maintenant les codes :

 

REM CORE CODE - CYCLE PERIOD CODE
REM Indicateur "CORE"

Price = (High+Low)/2

IF Barindex > 5 THEN
   
    REM Compensating Hilbert Transforms
    Smoother = (4*Price + 3*Price[1] + 2*Price[2] + Price[3]) / 10
    Detrender = (0.25*Smoother + 0.75*Smoother[2] - 0.75*Smoother[4] - 0.25*Smoother[6]) * (0.046*Period [1] + 0.332)
   
    REM Compute InPhase and Quadrature components
    Q1 = (0.25*Detrender + 0.75*Detrender[2] - 0.75*Detrender[4] - 0.25*Detrender[6]) * (0.046*Period[1] + 0.332)
    I1 = Detrender[3]
   
    REM advance the phase of I1 and Q1 by 90 degrees
    JI = 0.25*I1 + 0.75*I1[2] - 0.75*I1[4] - 0.25*I1[6]
    JQ = 0.25*Q1 + 0.75*Q1[2] - 0.75*Q1[4] - 0.25*Q1[6]
   
    REM Phasor addition to equalize amplitude due to quadrature calculations (and 3 bar averaging)
    I2 = I1 - JQ
    Q2 = Q1 + JI
   
    REM Smooth the I and Q components before applying the discriminator
    I2 = 0.15*I2 + 0.85*I2[1]
    Q2 = 0.15*Q2 + 0.85*Q2[1]
   
    REM Homodyne Discriminator
    REM Complex Conjugate Multiply
    X1 = I2*I2[1]
    X2 = I2*Q2[1]
    Y1 = Q2*Q2[1]
    Y2 = Q2*I2[1]
    Re = X1 + Y1
    Im = X2 - Y2
   
    REM Smooth to remove undesired cross products
    Re = 0.2*Re + 0.8*Re[1]
    Im = 0.2*Im + 0.8*Im[1]
   
    REM Compute cycle period
    IF Im <> 0 and Re <> 0 THEN
        Period = 360/ATAN(Im/Re)
    ENDIF
   
    IF Period > 1.5*Period[1] THEN
        Period = 1.5*Period[1]
    ENDIF
   
    IF Period < 0.67*Period[1] THEN
        Period = 0.67*Period[1]
    ENDIF
   
    IF Period < 6 THEN
        Period = 6
    ENDIF
   
    IF Period > 50 THEN
        Period = 50
    ENDIF
   
    Period = 0.2*Period + 0.8*Period[1]
   
ENDIF

RETURN Period as "PERIOD" , Q1 as "Q1" , I1 as "I1"


-------------------------------------------------------------------

 

REM Measuring Phase
REM Indicateur "CORE PHASE2"


Price = (High + Low)/2
myPERIOD, myQ1,myI1 = CALL "CORE"

IF Barindex > 50 THEN
    p1=myperiod/10 MOD 10
    p2=myperiod mod 10
    int=p1*10+p2
   
    value5 =int
    RealPart = 0
    ImagPart = 0
   
    IF Value5 > 6 THEN
        For count = 0 To Value5 - 1
            RealPart = RealPart + Sin(360 * count / Value5) * (Price[count])
            ImagPart = ImagPart + Cos(360 * count / Value5) * (Price[count])
        NEXT
    ENDIF
   
    RealPart = 0.33*RealPart + 0.67*RealPart[1]
    ImagPart = 0.33*ImagPart + 0.67*ImagPart[1]
   
    IF ABS(ImagPart) > 0.001 THEN
        DCPhase = ATAN(RealPart / ImagPart)
    ENDIF
   
    If ABS(ImagPart) <= 0.001 THEN
        DCPhase = 90 *SGN(RealPart)
       
    ENDIF
   
    REM Compensate phase for smoothing lag prior to taking the arctangent
    DCPhase = DCPhase + 720 / myPERIOD
    DCPhase = DCPhase + 90
   
    IF ImagPart < 0 and myQ1 <> 500 and myI1 <> 500 THEN
        DCPhase = DCPhase + 180
    ENDIF
   
    IF DCPhase > 270 THEN
        DCPhase = DCPhase - 360
    ENDIF
   
ENDIF

RETURN DCPhase as "DCPhase"

----------------------------------------------------

 

REM Signal-to-Noise Indicator Code
REM Indicateur "CORE SNR"
REM Ajout ligne horizontale = 6

ignored, my1,my12 = CALL "CORE"

IF Barindex > 50 THEN
   
   
   
    REM Signal Amplitude Squared comes directly from the discriminator
    Signal = SQRT(my12*my12 + my1*my1)
   
    REM Noise is a 20 bar EMA of ranges squared
    Noise = 0.1*(High - Low)*(High - Low) + 0.9*Noise[1]
   
    REM Convert to dB and smooth with EMA
    IF Noise <> 0 and Signal <> 0  THEN
        SNR = 0.33*(10*Log(Signal/Noise)/Log(10)) + 0.67*SNR[1]
    ENDIF
   
ENDIF

RETURN SNR as "SNR",6

-----------------------------------------------------------

 

REM The Sinewave Indicator
REM Indicateur "CORE SINEWAVE"
REM Calcul du SINE et du LEAD_SINE
REM Sinus de la phase et ce même sinus avancé de 45°

myDCPhase = CALL "CORE PHASE2"

IF Barindex > 5 THEN
    SINE = SIN(myDCPhase)
    LEADSINE = SIN(myDCPhase + 45)
ENDIF


RETURN SINE as "SINE" , LEADSINE as "LEAD SINE"

----------------------------------------------------------------------

 

REM The Awesome Oscillator
REM Indicateur "CORE AWESOME"

Price = (High+Low)/2

IF Barindex > 12 THEN
   
    Value1 = (4*Price + 3*Price[1] + 2*Price[3] + Price[4])/10
    Value2 = Value1 + 0.088*Value2[6]
    Value3 = Value2 - Value2[6] + 1.2*Value3[6] - 0.7*Value3[12]
   
    Detrend = Value3[12] - 2*Value3[6] + Value3
    Smooth = 0.13785*(2*Detrend - Detrend[1]) + 0.0007*(2*Detrend[1] - Detrend[2])+ 0.13785*(2*Detrend[2] - Detrend[3]) + 1.2103*Smooth[1] - 0.4687*Smooth[2]
   
ENDIF

RETURN Detrend as "Detrend" , Smooth as "Smooth",0

 

------------------------------------------------------------------------------

 

REM Instantaneous Trendline Code
REM Indicateur "CORE TRENDLINE"

Price = (High + Low)/2
myPERIOD, ignored,ignored = CALL "CORE"

IF Barindex <= 50 tHEN
    aa = Close
ENDIF

IF Barindex > 50 THEN
    p1=myperiod/10 MOD 10
    p2=myperiod mod 10
    int=p1*10+p2
   
    value5 =int
   
    aa = 0
endif

FOR count = 0 TO Value5 - 1
    aa = aa + Price[count]
NEXT

IF Value5 <> 0 THEN
    aa = aa / Value5
   
    bb = 0.25*aa + 0.75*bb[1]
    Smooth = (7*Price + 6*Price[1] + 5*Price[2] + 4*Price[3] + 3*Price[4] + 2*Price[5] + Price[6])/28
   
ENDIF

return bb as "Trend", Smooth as "Smooth"

---------------------------------------------------------------

 

REM Market Mode Detector
REM Indicateur "CORE MODE2"

myDCPhase = CALL "CORE PHASE2"
myPERIOD, myQ1,myI1 = CALL "CORE"
//mySNR,ignored = CALL "core snr"

p1=myperiod/10 MOD 10
p2=myperiod mod 10
int=p1*10+p2

value5 =int

REM Rule 1: Sinewave Indicator Crossing initializes half cycle crossing timing when SNR > 6 dB
IF Sin(myDCPhase) Crosses Over Sin(myDCPhase + 45) OR Sin(myDCPhase) Crosses Under Sin(myDCPhase + 45) then//and mySNR > 6 THEN
    DaysInTrend = 0
    Trend = 0
    Cycles = 1
ENDIF

DaysInTrend = DaysInTrend + 1

REM Rule2: Phase rate of change must be within 50% of dominant cycle phase rate of change
IF Value5 <> 0 and myDCPhase - myDCPhase[1] > 0.67*360/Value5 and myDCPhase - myDCPhase[1] < 1.5*360/Value5 THEN
    Trend = 0
    Cycles = 1
ENDIF

IF DaysInTrend > 0.5*myPERIOD and myQ1 <> 500 and myI1 <> 500 THEN
    Trend = 1
    Cycles = 0
ENDIF

RETURN Trend as "Trend" , Cycles as "Cycles"

 

Partager cet article

Repost 0
Published by hk_lisse - dans Les Cycles
commenter cet article

commentaires