Annonce
Réduire
Aucune annonce.
Ads
Réduire
Code de Moyenne mobile de HULL
Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Code de Moyenne mobile de HULL

    Bonjour,

    Je vous propose des codes développés par Smallcaps90 et adaptés par mes soins à ProRealTime.
    Ils concernent la moyenne mobile de HULL et l’indicateur qui en découle, HULL PIC CREUX.
    On peut trouver tous les développements et explication sur la source originale ici :
    Forum Graphe AT Pro, page 79
    http://www.pro-at.com/forums-bourse/bourse-79-6593.html
    Pour ceux qui sont intéressés, je vous conseille fortement d’aller y faire un tour, les explications sont plus détaillées.

    On remarquera que la MM de Hull est très réactive. Elle s’affiche sur les prix.
    Après un certain nombre de backtests sur les actions de la cote française, la variable P (période de calcul de la HULL) est réglée à 15. Il me semble que c’est là que l’on a le moins de faux signaux.
    A propos de l’indicateur HULL PIC CREUX, les flèches bleues donnent les sommets, donc les signaux de vente ou de short quand la dérivé première est supérieure à 0. Les flèches rouge donnent donc les creux et les signaux d’achat quand la dérivée est inférieure à 0.
    On remarque que la les flèches arrivent avec une barre de retard par rapport au sommet réel, le temps que le sommet soit confirmé évidement.
    J’ai aussi remarqué lors des backtest que les signaux renvoyés par l’indicateur HULL PIC CREUX sont plus pertinents quand on attend une bougie verte après la flèche rouge. Ce qui parait assez logique d’ailleurs. Lors de la création du backtest, il suffit d’insérer cette condition.


    Le code :

    REM Moyenne Mobile de HULL
    REM Crée par SmallCaps90 - Forum PRO-AT.COM
    REM Adapté par Arnaudbzh
    REM variable P=15 par défaut

    REM Moyenne Mobile de HULL
    demiP = round(P/2)
    temp = 2*WeightedAverage[demiP](close) - WeightedAverage[P](close)
    racineP = round(SQRT(P))
    MMHULL = WeightedAverage[racineP](temp)
    REM Fin Moyenne Mobile de HULL

    RETURN MMHULL as "Moyenne Mobile de HULL"





    Pour l’indicateur HULL PICS CREUX, j’ai codé à l’indique tous les paramètres, même si tous ne sont pas utilisé, ou n’ont pas donné lieu à de plus amples explorations.
    J’affiche donc uniquement les paramètres suivant :
    - fleche bleu (en histogramme)
    - fleche rouge (en histogramme)
    - derivé première de Hull
    - zero

    Les autres données ont le style « invisible » dans la boite des propriétés de l’indicateur.


    REM HULL PICS CREUX
    REM Crée par SmallCaps90 - Forum PRO-AT.COM
    REM Adapté par Arnaudbzh
    REM variable P=15 par défaut


    REM Moyenne Mobile de HULL
    demiP = round(P/2)
    temp = 2*WeightedAverage[demiP](close) - WeightedAverage[P](close)
    racineP = round(SQRT(P))
    MMHULL = WeightedAverage[racineP](temp)
    REM Fin Moyenne Mobile de HULL

    REM Dérivée première de la HULL
    DERPREM = MMHULL - MMHULL[1]
    REM Fin Dérivée première de la HULL

    REM Dérivée seconde de la HULL
    DERSEC = MMHULL - 2 * MMHULL[1] + MMHULL[2]
    REM Fin Dérivée seconde de la HULL

    REM PICS au dessus de la ligne 0
    IF DERPREM[2] < DERPREM[1] and DERPREM[1] > DERPREM and DERPREM[1] > 0 THEN
    FlecheBleue = DERPREM[1]
    ELSE
    FlecheBleue = 0
    ENDIF
    REM Fin PICS au dessus de la ligne 0

    REM CREUX au dessous de la ligne 0
    IF DERPREM[2] > DERPREM[1] and DERPREM[1] < DERPREM and DERPREM[1] < 0 THEN
    FlecheRouge = DERPREM[1]
    ELSE
    FlecheRouge = 0
    ENDIF
    REM Fin CREUX au dessous de la ligne 0

    REM Moyenne de HULL de la dérivée première
    DPdemiP = round(P/2)
    DPtemp = 2*WeightedAverage[DPdemiP](DERPREM) - WeightedAverage[P](DERPREM)
    DPracineP = round(SQRT(P))
    MHULLDERPREM = WeightedAverage[DPracineP](DPtemp)
    REM Fin Moyenne de HULL de la dérivée première

    REM Moyenne de HULL de la dérivée seconde
    DSdemiP = round(P/2)
    DStemp = 2*WeightedAverage[DSdemiP](DERPREM) - WeightedAverage[P](DERPREM)
    DSracineP = round(SQRT(P))
    MHULLDERSEC = WeightedAverage[DSracineP](DStemp)
    REM Fin Moyenne de HULL de la dérivée seconde


    RETURN FlecheBleue COLOURED(0,0,255) as "Fleche Bleue" , FlecheRouge COLOURED(255,0,0) as "Fleche Rouge", DERPREM COLOURED(0,0,255) as "Derivee Premiere HULL" , DERSEC COLOURED(255,0,0) as "Derivee Seconde HULL" , MHULLDERPREM COLOURED(0,0,255) as "Moyenne HULL Derivee Premiere" , MHULLDERSEC COLOURED(255,0,0) as "Moyenne HULL Derivee Seconde" , 0 COLOURED(0,0,0) as "Zero"




    Je vous souhaite à tous une très bonne journée
    Arnaud

  • #2
    merci merci merci

    Commentaire


    • #3
      Je dirais meme plus : Merci
      Je vais regarder si c est exploitable cette semaine

      Si tu veux traduire pour Prt la procedure //HULL_ANTICIP p79 de la meme file, ca peut aussi etre tres utile

      Commentaire


      • #4
        Je dirais encore plus : mille merci !
        Effectivement le complément demandé pat Pasq2004 serait un atout supplém pour maitriser le sujet HULL en trading réel....

        Commentaire


        • #5
          Citation de : Arnaudbzh (au 28-06-2007 14:20:23)


          A propos de l’indicateur HULL PIC CREUX, les flèches bleues donnent les sommets, donc les signaux de vente ou de short quand la dérivé première est supérieure à 0. Les flèches rouge donnent donc les creux et les signaux d’achat quand la dérivée est inférieure à 0.




          Petite correction a apporter maintenant que j ai recopie le code sous Prt.
          les Pics sont signales par le croisement de la ligne de signal avec la ligne horizontale a Zero.
          les barres bleues et rouges montrent les points d inflexion de la moyenne mobile, donc le point ou la moyenne passe de concave a convexe ( ou le contraire ). Ces points permettent d anticiper le pic a venir et le retournement de tendance.

          J ai pour ma part teste sur Fce 5 min intraday, c est pas vraiment probant, mais c est peut etre plutot destine a du swing trading

          Commentaire


          • #6
            Bonjour,

            je suis ravi que certains apprécient le code de la HULL, mais
            c'est vraiment SmallCaps90 qui en est l'auteur.

            Pour l'indicateur HULL-ANTICIP, je m'étais penché dessus, puis finalement
            j'avais buté sur quelque chose, peut-être une fonction du language GrapheAT.
            A l'occasion je m'y remettrais car je suis persuadé est très intéressant.

            Bonne journée
            Arnaud

            Commentaire


            • #7
              J ai pas regarde dans le detail mais on doit pouvoir la tracer sous forme de courbe ou de points comme un SAR je suppose.
              Si tu veux poster ce qui coince, je veux bien regarder de mon cote.
              ++

              Commentaire


              • #8
                Voici le code modifie qui donne a la fois la Hull et la Hull Polygonale ( p85 du post cite + haut )
                A verifier tout de meme )

                REM Moyenne Mobile de HULL
                REM Crée par SmallCaps90 - Forum PRO-AT.COM
                REM Adapté par Arnaudbzh
                REM variable P=15 par défaut


                REM Moyenne Mobile de HULL
                rem P = 15 // A Mettre ds la boite optimisation
                rem Seuil = 2.5 // A Mettre ds la boite optimisation
                demiP = round(P/2)
                temp = 2*WeightedAverage[demiP](close) - WeightedAverage[P](close)
                racineP = round(SQRT(P))
                MMHULL = WeightedAverage[racineP](temp)
                REM Fin Moyenne Mobile de HULL

                HullPoly = MMHULL
                Delta = ( HullPoly[1] - MMHULL ) / MMHULL

                If ABS( Delta ) < Seuil then
                HullPoly = HullPoly[1]
                Endif

                RETURN MMHULL as "Moyenne Mobile de HULL" , HullPoly as "Polygonale"

                Commentaire


                • #9
                  Bonjour,

                  Je vous propose ici les codes de 2 systèmes développés par John Ehlers.
                  Ces indicateurs ont été écrit à partir du site de l’auteur et des fichiers trouvé lors de
                  ses « Seminars » :
                  http://www.mesasoftware.com/seminars.htm

                  J’ai utilisé le fichier « 00Rocket Science » pour les codes que j’ai appellé « MESA ».
                  J’ai utilisé le fichier « Tag22 Rocket Science » pour les codes que j’ai appellé « CORE »
                  du 2eme message.
                  Vous trouverez aussi l’indicateur EHLERS FILTER réalisé à partir d’un autre Seminar.

                  Des codes avaient été développés sur le forum PROAT en 2004, par SmallCaps 90 :

                  http://www.pro-at.com/forums-bourse/bourse-1-11111.html
                  http://www.pro-at.com/forums-bourse/bourse-30-6593.html
                  http://www.pro-at.com/forums-bourse/bourse-31-6593.html

                  Les codes que je propose sont assez complexe, autant le dire tout de suite, JE N’AI PAS TOUT COMPRIS !!
                  J’en ai compris la méthodologie et c’est clairement assez balèze.
                  Puisse que plusieurs têtes valent beaucoup mieux que mon seul et modeste esprit, je compte
                  sur vous pour m’aider à progresser.
                  En fait il me manque le mode d’emploi de ces indicateurs, bien que SmallCaps90 a déjà donné des explications détaillées dans ses messages.

                  Les indicateurs MESA sont liés entre eux par la fonction CALL que l’on trouve en début de certains indicateurs.
                  Attention donc, le nom que vous donnez à vos indicateurs doit être strictement identique à ce que j’ai écrit.
                  Idem pour les codes CORE.

                  Chaque indicateur est séparé par des fonction REM en gras, contenant le nom de l’indicateur.

                  Une petite subtilité de programmation, la fonction CALL appelle un autre indicateur,
                  les données qui sortent sont OBLIGATOIREMENT celles qui avaient été tracés par la fonction RETURN.
                  Si l’on ne se sert pas d’une des données, il faut quand même l’employer quelque part.
                  Je les ai donc utilisé dans une fonction IF THEN (en général en fin de code) sous la forme :
                  « myDELTAPHASE <> 500 » de l’indicateur MESA PHASE par exemple.

                  Si une variable est dans le code (comme pour faire changer la période d’une moyenne par exemple,
                  on trouve les caractéristiques de la variable au début du code dans une fonction REM.

                  Bizarrement, dans le seminar TAG22 Rocket Science, on ne fait pas appel à l’indicateur CORE SNR pour déterminer le MODE, bien que cet indicateur soit présenté.
                  C’est l’indicateur qui concerne le rapport SIGNAL / BRUIT avec le seuil de 6 dB.

                  Les 2 systèmes MESA et CORE donnent des résultats différents, que je ne réussis pas à interpréter.
                  Là encore je vous invite à vous reporter aux messages de SmallCaps90.
                  Les périodes instantanées qui sont calculées ne sont pas les même, ni les rapport signal/bruit.
                  Donc forcement les modes Trend ou Cycles ne sont pas non plus les même.

                  Voilà, je suis assez convaincu que ces systèmes pourraient être profitables, reste à savoir comment en tirer le meilleur parti.
                  Une dernière chose, il faut des machines assez puissantes pour faire tourner ces codes, surtout le système MESA.

                  Bonne journée
                  Arnaud

                  Commentaire


                  • #10
                    J’ai utilisé le fichier « 00Rocket Science » pour les codes que j’ai appellé « MESA ».
                    http://www.mesasoftware.com/seminars.htm

                    Ordre des indicateurs :

                    MESA PERIODE
                    MESA PHASE
                    MESA RSB
                    MESA SINEWAVE
                    MESA TRENDLINE (s’affiche sur les prix)
                    MESA CYCLE TENDANCE




                    +++++++++++++++++++ DEBUT DES CODES +++++++++++++++++++


                    REM TRENDLINE DE J. EHLERS
                    REM Indicateur "MESA PERIODE"
                    REM Calcul de la période du cycle dominant


                    PRIX = (high + low) / 2

                    IF Barindex <= 5 THEN
                    PERIODE = 0
                    V5 = 0
                    ENDIF



                    IF Barindex > 5 THEN

                    REM Détermination de la phase de chaque tic
                    V1 = PRIX - PRIX[6]
                    V2 = V1[3]
                    V3 = 0.75*(V1-V1[6])+0.25*(V1[2]-V1[4])

                    ENPHASE = 0.33*V2+0.67*ENPHASE[1]
                    ENQUADRATURE = 0.2*V3 + 0.8*ENQUADRATURE[1]

                    IF ABS(ENPHASE + ENPHASE[1]) > 0 THEN
                    A = ABS((ENQUADRATURE + ENQUADRATURE[1]) / (ENPHASE+ENPHASE[1]))
                    PHASEDEG = ATAN(A)
                    ENDIF



                    REM Correction si autres quadrants
                    IF ENPHASE < 0 AND ENQUADRATURE > 0 THEN
                    PHASEDEG = 180 - PHASEDEG
                    ENDIF

                    IF ENPHASE < 0 AND ENQUADRATURE < 0 THEN
                    PHASEDEG = 180 + PHASEDEG
                    ENDIF

                    IF ENPHASE > 0 AND ENQUADRATURE < 0 THEN
                    PHASEDEG = 360 - PHASEDEG
                    ENDIF




                    REM Phase différentielle et corrections éventuelles
                    DELTAPHASE = PHASEDEG[1] - PHASEDEG

                    IF PHASEDEG[1] < 90 AND PHASEDEG > 270 THEN
                    DELTAPHASE = 360 + DELTAPHASE
                    ENDIF

                    IF DELTAPHASE < 1 THEN
                    DELTAPHASE = 1
                    ENDIF

                    IF DELTAPHASE > 60 THEN
                    DELTAPHASE = 60
                    ENDIF


                    REM Calcul de la période instantanée du cycle actuel
                    REM et correction éventuelle
                    PERIODEINSTANT = 0
                    V4 = 0
                    J = 0

                    WHILE J<41
                    V4 = V4 + DELTAPHASE[J]
                    IF V4>360 AND PERIODEINSTANT=0 THEN
                    PERIODEINSTANT =J
                    ENDIF
                    J=J+1
                    WEND

                    IF PERIODEINSTANT=0 THEN
                    PERIODEINSTANT = PERIODEINSTANT[1]
                    ENDIF

                    REM Calcul de la PERIODE
                    V5 = 0.25 * PERIODEINSTANT + 0.75*V5[1]
                    PERIODE = V5


                    ENDIF


                    RETURN PERIODE as "PERIODE" , DELTAPHASE as "DELTAPHASE"









                    REM TRENDLINE DE J. EHLERS
                    REM Indicateur "MESA PHASE"
                    REM Calcul de la phase du cycle dominant


                    IF Barindex > 5 THEN

                    PRIX = (high + low) / 2
                    myPERIODE, myDELTAPHASE = CALL "MESA PERIODE"

                    PERIODE = ROUND(myPERIODE)

                    PARTIEREELLE = 0
                    PARTIEIMAGINAIRE = 0

                    K = 0
                    REM Calcul en degrés
                    WHILE K < PERIODE
                    PARTIEREELLE = PARTIEREELLE + SIN(360*K/PERIODE)*PRIX[K]
                    PARTIEIMAGINAIRE = PARTIEIMAGINAIRE + COS(360*K/PERIODE)*PRIX[K]
                    K = K+1
                    WEND

                    IF ABS(PARTIEIMAGINAIRE) > 0.001 THEN
                    DCPHASEDEG = ATAN(PARTIEREELLE/PARTIEIMAGINAIRE)
                    ENDIF

                    IF ABS(PARTIEIMAGINAIRE) <= 0.001 THEN
                    IF PARTIEREELLE >= 0 THEN
                    SIGNEPARTIEREELLE=1
                    ELSE
                    SIGNEPARTIEREELLE=-1
                    ENDIF
                    DCPHASEDEG = 90*SIGNEPARTIEREELLE
                    ENDIF

                    DCPHASEDEG = DCPHASEDEG + 90

                    IF PARTIEIMAGINAIRE<0 THEN
                    DCPHASEDEG = DCPHASEDEG + 180
                    ENDIF

                    IF DCPHASEDEG>315 AND DCPHASEDEG<=360 and myDELTAPHASE <> 500 THEN
                    DCPHASEDEG = DCPHASEDEG - 360
                    ENDIF

                    PHASE = DCPHASEDEG


                    ENDIF











                    RETURN PHASE as "PHASE"
                    REM TRENDLINE DE J. EHLERS
                    REM Indicateur "MESA RSB"
                    REM Calcul du rapport signal / bruit (RSB en dB)
                    REM Ajout ligne horizontale = 6



                    IF Barindex <= 8 THEN
                    RSB = 0
                    RANGERSB = 0
                    ENPHASE = 0
                    ENQUADRATURE = 0
                    ENDIF



                    IF Barindex > 8 THEN


                    PRIX = (high + low) / 2

                    REM Détermination des composantes en phase et en quadrature
                    REM Transformation de Hilbert
                    RANGERSB = 0.2*(high - low) + 0.8*RANGERSB[1]
                    V1 = PRIX-PRIX[6]
                    V2 = V1[3]
                    V3 = 0.75*(V1-V1[6]) + 0.25*(V1[2]-V1[4])
                    ENPHASE = 0.33*V2 + 0.67*ENPHASE[1]
                    ENQUADRATURE = 0.2*V3 + 0.8*ENQUADRATURE[1]

                    REM Lissage du rapport signal/bruit
                    V2 = 0.2*(square(ENPHASE) + square(ENQUADRATURE)) + 0.8*V2[1]

                    REM Calcul du rapport signal/bruit lissé
                    IF V2<0.001 THEN
                    V2=0.001
                    ENDIF

                    IF RANGE>0 THEN
                    RSB = 0.25*(10* LOG(V2 / square(RANGERSB)) / LOG(10)+4.7) + 0.75*RSB[1]
                    ENDIF



                    ENDIF









                    RETURN RSB as "Rapport Signal-Bruit"
                    REM TRENDLINE DE J. EHLERS
                    REM Indicateur "MESA SINEWAVE"
                    REM Calcul du SINEWAVE et du LEAD_SINEWAVE
                    REM Sinus de la phase et ce même sinus avancé de 45°



                    myPHASE = CALL "MESA PHASE"

                    IF Barindex > 5 THEN
                    PHASE = myPHASE
                    SINEWAVE = SIN(PHASE)
                    LEADSINEWAVE = SIN(PHASE + 45)
                    ENDIF


                    RETURN SINEWAVE as "SINEWAVE" , LEADSINEWAVE as "LEAD SINEWAVE"













                    REM TRENDLINE DE J. EHLERS
                    REM Indicateur "MESA TRENDLINE"
                    REM Calcul de la TRENDLINE et du FILTRE DE KALMAN
                    REM Utilisés comme 2 moyennes mobiles adaptatives en mode Tendance



                    IF Barindex > 5 THEN

                    PRIX = (high + low) / 2

                    myPERIODE, myDELTAPHASE = CALL "MESA PERIODE"

                    PERIODE = ROUND(myPERIODE)

                    TRENDLINE = 0
                    J = 0

                    WHILE J < PERIODE+2
                    TRENDLINE = TRENDLINE + PRIX[J]
                    J = J+1
                    WEND

                    IF PERIODE>0 THEN
                    TRENDLINE = TRENDLINE / (PERIODE+2)
                    ENDIF

                    REM Filtre de Kalman zero lag
                    KALMAN = 0.33*(PRIX + 0.5*(PRIX - PRIX[3])) + 0.67*KALMAN[1]

                    IF Barindex<26 and myDELTAPHASE <> 500 THEN
                    TRENDLINE = PRIX
                    KALMAN = PRIX
                    ENDIF





                    ENDIF


                    RETURN TRENDLINE as "TRENDLINE" , KALMAN as "KALMAN"








                    REM TRENDLINE DE J. EHLERS
                    REM Indicateur "MESA CYCLE TENDANCE"
                    REM Essai de détermination du mode cycle ou tendance
                    REM Variable P1 = 0.3


                    myPERIODE, myDELTAPHASE = CALL "MESA PERIODE"
                    mySINEWAVE, myLEADSINEWAVE = CALL "MESA SINEWAVE"
                    myTRENDLINE, myKALMAN = CALL "MESA TRENDLINE"
                    myRapportSignalBruit = CALL "MESA RSB"


                    P = myPERIODE
                    DEL = myDELTAPHASE
                    S = mySINEWAVE
                    LS = myLEADSINEWAVE
                    TL = myTRENDLINE
                    K = myKALMAN
                    RSB = myRapportSignalBruit


                    TENDANCE=1
                    CYCLES=0

                    REM Détecter un croisement LS/S et initialiser le mode cycle si RSB suffisant
                    IF LS crosses over S OR LS crosses under S AND RSB>6 THEN
                    TENDANCE=0
                    CYCLES=1
                    ENDIF

                    REM Vérifier progressivité de la variation de la phase
                    IF P<>0 AND DEL>(1-P1)*360 / P AND DEL<(1+P1)*360 / P THEN
                    TENDANCE=0
                    CYCLES=1
                    ENDIF

                    REM Détecter un croisement K/TL et initialiser le compteur de jours
                    IF K crosses over TL OR K crosses under TL THEN
                    NB=0
                    ENDIF

                    REM Incrémenter compteur de jours
                    NB=NB+1

                    REM Confirmer mode cycle si compteur < une demi-période, sinon tendance
                    IF NB

                    CYCLES=1
                    TENDANCE=0
                    ELSE
                    CYCLES=0
                    TENDANCE=1
                    ENDIF


                    RETURN CYCLES as "CYCLES", TENDANCE as "TENDANCE"

                    Cliquez pour agrandir

                    Commentaire


                    • #11
                      J’ai utilisé le fichier « Tag22 Rocket Science » pour les codes que j’ai appellé « CORE »
                      http://www.mesasoftware.com/seminars.htm


                      Ordre des indicateurs :
                      CORE
                      CORE SNR
                      CORE PHASE
                      CORE SINEWAVE
                      CORE TRENDLINE (s’affiche sur les prix)
                      CORE AWESOME
                      CORE MODE


                      +++++++++++++++++++ DEBUT DES 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 Signal-to-Noise Indicator Code
                      REM Indicateur "CORE SNR"
                      REM Ajout ligne horizontale = 6


                      myPERIOD, myQ1,myI1 = CALL "CORE"

                      IF Barindex > 5 THEN



                      REM Signal Amplitude Squared comes directly from the discriminator
                      Signal = SQRT(myI1*myI1 + myQ1*myQ1)

                      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 and myPERIOD <> 500 THEN
                      SNR = 0.33*(10*Log(Signal/Noise)/Log(10)) + 0.67*SNR[1]
                      ENDIF

                      ENDIF

                      RETURN SNR as "SNR"







                      REM Measuring Phase
                      REM Indicateur "CORE PHASE"



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

                      IF Barindex > 5 THEN

                      Value5 = ROUND(myPERIOD)
                      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 * SIGN(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 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 PHASE"

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


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







                      REM Instantaneous Trendline Code
                      REM Indicateur "CORE TRENDLINE"

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

                      IF Barindex <= 5 and myQ1 <> 500 and myI1 <> 500 THEN
                      Trend = Close
                      ENDIF

                      IF Barindex > 5 THEN

                      Value5 = ROUND(myPERIOD)
                      Trend = 0
                      FOR count = 0 TO Value5 - 1
                      Trend = Trend + Price[count]
                      NEXT

                      IF Value5 <> 0 THEN
                      Trend = Trend / Value5

                      Trend = 0.25*Trend + 0.75*Trend[1]
                      Smooth = (7*Price + 6*Price[1] + 5*Price[2] + 4*Price[3] + 3*Price[4] + 2*Price[5] + Price[6])/28

                      ENDIF

                      RETURN Trend as "Trend" , Smooth as "Smooth"








                      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"








                      REM Market Mode Detector
                      REM Indicateur "CORE MODE"


                      myDCPhase = CALL "CORE PHASE"
                      myPERIOD, myQ1,myI1 = CALL "CORE"

                      Value5 = ROUND(myPERIOD)

                      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) 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"
                      Cliquez pour agrandir

                      Commentaire


                      • #12
                        J’ai utilisé le fichier « TSWorld05 » pour le code :
                        http://www.mesasoftware.com/seminars.htm

                        Ici le nom du code n’est pas important, il n’est pas lié aux autres.
                        Avec cet indicateur, on est 100% dans le marché.
                        L’exploitation est simple, si le filtre sort de la bande haute, on achète, si le filtre sort par la bande basse, on passe short ou on vend.
                        Le code n’est pas tout à fait complet par rapport au seminar, il manque le stop de protection.

                        +++++++++++++++++++ DEBUT DU CODE +++++++++++++++++++

                        REM EHLERS FILTER EL CODE
                        REM Variable Frac = 5


                        IF barindex > 22 THEN


                        Price = (High+Low)/2
                        Smooth = (Price + 2*Price[1] + 2*Price[2] + Price[3]) / 6

                        Distance2 = Distance2+ (Smooth - Smooth[1]) * (Smooth - Smooth[1])

                        Coef = Distance2

                        Num = 0
                        SumCoef = 0

                        Num = Num + Coef * Smooth
                        SumCoef = Sumcoef + Coef

                        IF SumCoef <> 0 THEN
                        Filt = Num / SumCoef
                        ENDIF

                        Rng = 0.1*(High - Low) + 0.9*Rng[1]
                        Value1 = Filt[1] + Rng / Frac
                        Value2 = Filt[1] - Rng / Frac

                        ENDIF

                        RETURN Filt as "Ehlers Filter" , Value1 as "Value 1" , Value2 as "Value 2"


                        Cliquez pour agrandir

                        Commentaire


                        • #13
                          Merci pour cet indicateur.
                          J'ai noté une petite erreur dans le calcul de la moyenne de Hull de la dérivée seconde.

                          Voici le code mis en cause:

                          REM Moyenne de HULL de la dérivée seconde
                          DSdemiP = round(P/2)
                          DStemp = 2*WeightedAverage[DSdemiP](DERPREM) - WeightedAverage[P](DERPREM)
                          DSracineP = round(SQRT(P))
                          MHULLDERSEC = WeightedAverage[DSracineP](DStemp)
                          REM Fin Moyenne de HULL de la dérivée seconde

                          A remplacer par :
                          REM Moyenne de HULL de la dérivée seconde
                          DSdemiP = round(P/2)
                          DStemp = 2*WeightedAverage[DSdemiP](DERSEC) - WeightedAverage[P](DERSEC)
                          DSracineP = round(SQRT(P))
                          MHULLDERSEC = WeightedAverage[DSracineP](DStemp)
                          REM Fin Moyenne de HULL de la dérivée seconde

                          Commentaire


                          • #14
                            Bonjour, j'utilise le code de la moyenne de Hull pour prorealtime publié sur ce forum.
                            J'ai une couleur à la hausse et une à la baisse mais aimerais pJe souhaite savoir... sais-tu comment créer un alerte sonore sous prorealtime se déclenchant à chaque changement de direction de la moyenne de Hull ? J'ai déjà une couleur à la hausse et une autre à la baisse.. mais je ne vois pas comment créer une alerte sonore se déclenchant au changement de direction sur un seul indicateur...
                            Quelqu'un aurait-il une solution ?
                            Vous remerciant par avance.

                            Commentaire

                            Chargement...
                            X