Annonce
Réduire
Aucune annonce.
Ads
Réduire
[Graphe AT PRo : programmation]
Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Merci FOKI <img src='http://www.pro-at.com/style/images/icones/icon_smile_big.gif' border='0' alt='' title='' align='middle' />

    Commentaire


    • bonjour a tous, un indicateur de plus pour ceux que ca interesse
      voici le code pour représenter un pseudo market profile

      /////
      Z1(0)=0
      Z2(0)=0
      Z3(0)=0
      Z4(0)=0
      Z5(0)=0
      Z6(0)=0
      Z7(0)=0
      Z8(0)=0
      Z9(0)=0
      Z10(0)=0
      Z11(0)=0
      ZC1(0)=0
      ZC2(0)=0
      ZC3(0)=0
      ZC4(0)=0
      ZC5(0)=0
      ZC6(0)=0
      ZC7(0)=0
      ZC8(0)=0
      ZC9(0)=0
      ZC10(0)=0
      ZC11(0)=0

      POC(0)=0
      M=MOIS
      J=JOUR
      H(0)=HAUT
      ZPOC(0)=0
      COMPT(0)=0
      i = 0
      TantQue i<JOUR Faire
      si MOIS(I)=M ALORS NBJOUR(0)=NBJOUR(0)+1
      i = i + 1
      FinTantQue
      HIGH=MAX(HAUT,NBJOUR)
      MINU=MIN(BAS,NBJOUR)
      ECART(0)=(HIGH-MINU)/11


      i = 0
      tantQue i<NBJOUR Faire

      si haut(i)<HIGH-ECART alors Z1=Z1 sinon Z1=Z1+1
      si HAUT(i)<=(HIGH-2*ECART) ou BAS(i)>=(HIGH-1*ECART) alors Z2=Z2 sinon Z2=Z2+1
      si HAUT(i)<=(HIGH-3*ECART) ou BAS(i)>=(HIGH-2*ECART) alors Z3=Z3 sinon Z3=Z3+1
      si HAUT(i)<=(HIGH-4*ECART) ou BAS(i)>=(HIGH-3*ECART) alors Z4=Z4 sinon Z4=Z4+1
      si HAUT(i)<=(HIGH-5*ECART) ou BAS(i)>=(HIGH-4*ECART) alors Z5=Z5 sinon Z5=Z5+1
      si HAUT(i)<=(HIGH-6*ECART) ou BAS(i)>=(HIGH-5*ECART) alors Z6=Z6 sinon Z6=Z6+1
      si HAUT(i)<=(HIGH-7*ECART) ou BAS(i)>=(HIGH-6*ECART) alors Z7=Z7 sinon Z7=Z7+1
      si HAUT(i)<=(HIGH-8*ECART) ou BAS(i)>=(HIGH-7*ECART) alors Z8=Z8 sinon Z8=Z8+1
      si HAUT(i)<=(HIGH-9*ECART) ou BAS(i)>=(HIGH-8*ECART) alors Z9=Z9 sinon Z9=Z9+1
      si HAUT(i)<=(HIGH-10*ECART) ou BAS(i)>=(HIGH-9*ECART) alors Z10=Z10 sinon Z10=Z10+1
      si bas(i)>(HIGH-10*ECART) alors Z11=Z11 sinon Z11=Z11+1

      i = i + 1
      FinTantQue

      ZPOC=Z1
      COMPT=1
      si Z2>=ZPOC alors
      ZPOC=Z2
      COMPT=2
      finsi
      si Z3>=ZPOC alors
      ZPOC=Z3
      COMPT=3
      finsi
      si Z4>=ZPOC alors
      ZPOC=Z4
      COMPT=4
      finsi
      si Z5>=ZPOC alors
      ZPOC=Z5
      COMPT=5
      finsi

      si Z6>=ZPOC alors
      ZPOC=Z6
      COMPT=6
      finsi
      si Z7>ZPOC alors
      ZPOC=Z7
      COMPT=7
      finsi
      si Z8>ZPOC alors
      ZPOC=Z8
      COMPT=8
      finsi
      si Z9>ZPOC alors
      ZPOC=Z9
      COMPT=9
      finsi
      si Z10>ZPOC alors
      ZPOC=Z10
      COMPT=10
      finsi
      si Z11>ZPOC alors
      ZPOC=Z11
      COMPT=11
      finsi
      POC=HIGH-(COMPT-0.5)*ECART
      POC2(0)=HIGH-(COMPT-0.5)*ECART

      i=1
      TantQue i<=NBJOUR Faire

      si Z1>=i alors ZC1(NBJOUR-i)=HIGH-0.5*ECART sinon ZC1(NBJOUR-i)=0
      si Z2>=i alors ZC2(NBJOUR-i)=HIGH-1.5*ECART sinon ZC2(NBJOUR-i)=0
      si Z3>=i alors ZC3(NBJOUR-i)=HIGH-2.5*ECART sinon ZC3(NBJOUR-i)=0
      si Z4>=i alors ZC4(NBJOUR-i)=HIGH-3.5*ECART sinon ZC4(NBJOUR-i)=0
      si Z5>=i alors ZC5(NBJOUR-i)=HIGH-4.5*ECART sinon ZC5(NBJOUR-i)=0
      si Z6>=i alors ZC6(NBJOUR-i)=HIGH-5.5*ECART sinon ZC6(NBJOUR-i)=0
      si Z7>=i alors ZC7(NBJOUR-i)=HIGH-6.5*ECART sinon ZC7(NBJOUR-i)=0
      si Z8>=i alors ZC8(NBJOUR-i)=HIGH-7.5*ECART sinon ZC8(NBJOUR-i)=0
      si Z9>=i alors ZC9(NBJOUR-i)=HIGH-8.5*ECART sinon ZC9(NBJOUR-i)=0
      si Z10>=i alors ZC10(NBJOUR-i)=HIGH-9.5*ECART sinon ZC10(NBJOUR-i)=0
      si Z11>=i alors ZC11(NBJOUR-i)=HIGH-10.5*ECART sinon ZC11(NBJOUR-i)=0
      si ZPOC>=i alors POC(NBJOUR-i)=HIGH-(COMPT-0.5)*ECART sinon POC(NBJOUR-i)=0


      Z1(NBJOUR-i)=Z1
      Z2(NBJOUR-i)=Z2
      Z3(NBJOUR-i)=Z3
      Z4(NBJOUR-i)=Z4
      Z5(NBJOUR-i)=Z5
      Z6(NBJOUR-i)=Z6
      Z7(NBJOUR-i)=Z7
      Z8(NBJOUR-i)=Z8
      Z9(NBJOUR-i)=Z9
      Z10(NBJOUR-i)=Z10
      Z11(NBJOUR-i)=Z11
      COMPT(NBJOUR-i)=COMPT
      POC2(NBJOUR-i)=POC2

      i = i + 1
      FinTantQue

      // calcul de value area
      CAL(0)=Z1
      CAL(1)=Z2
      CAL(2)=Z3
      CAL(3)=Z4
      CAL(4)=Z5
      CAL(5)=Z6
      CAL(6)=Z7
      CAL(7)=Z8
      CAL(8)=Z9
      CAL(9)=Z10
      CAL(10)=Z11
      VARIABILITE(0)=ECARTYPE(CAL,10)
      si MOIS(1)<>MOIS(0)
      alors
      VA(1)=POC2(1)-VARIABILITE(1)*ECART(1)
      VA(2)=POC2(1)+VARIABILITE(1)*ECART(1)
      sinon VA=0

      //////


      le principe retenu est le suivant :
      pour la représentation, je prends en compte les cotations du mois,
      je decompose en 11 zones de prix de larguer égale, à partir du plus haut et du plus bas du mois
      je comptabilise durant le mois le temps passé dans chaque zone
      je représente le temps passé dans chaque zone le temps passé
      en bleu pour chque zone,
      en vert le POC (zone ou le temps passé est maximale)
      je représente, centré sur le POC, la distribution des cours à un écart type (en jaune)

      au final, voir la littérature pour l'exploitation
      application concrête, le POC ou les extremités de la value area en jaune peuvent servir de support/résistance


      <center><img src='http://images.pro-at.com/200606/b/screenhunter_1.jpg' alt='' /></center>

      Commentaire


      • et on obtient des graphes comme celui ci<center><a href='http://images.pro-at.com/200606/b/a_novo.gif' target='_blank' style='display:block; width:600px; border:2px dashed #888; padding:10px'><img src="http://images.pro-at.com/200606/b/a_novo.gif" alt='' width='600' height='357' /><em style='display:block; text-align: right'>Cliquez pour agrandir</em></a></center>


        a titre d'exemple, on voit bien que l'extremite basse de la value area de mai a servi de resistance (segment jaune)

        Commentaire


        • Un grand merci à jean-luc M. pour le document word : je ne me rappelle plus ton pseudo ici ....

          signé : bge-37@.....com

          Commentaire


          • Bonjour jmc

            Je t'en pris, ce n'est qu'une simple participation au travail de tous les acteurs de cette file.<img src='http://www.pro-at.com/style/images/icones/icon_smile_tongue.gif' border='0' alt='' title='' align='middle' />

            Cordialement

            Commentaire


            • Retour sur la moyenne mobile EPMA

              Smallcaps90, je reviens te solliciter, j'ai retranscrit textuellement ton programme sur l'indicateur EPMA_10 (quand même après l'avoir compris !); mais mille fois hélas, l'indicateur reste contamment à zéro (bouton "tester"), ainsi bien sur, que la courbe associée.
              Visiblement quelque chose m'échappe !

              Un petit coup de main serait le bienvenu. <img src='http://www.pro-at.com/style/images/icones/icon_smile_dead.gif' border='0' alt='' title='' align='middle' />

              Cordialement

              Commentaire


              • Bonsoir glave79,

                As-tu vérifié le contenu de ta fenêtre Propriétés de l'indicateur?

                Commentaire


                • Bonsoir Smallcaps90

                  J'ai trouvé mon erreur due à ma grande ignorance : la courbe résultat doit être désignée par "Courbe1" et non par "EPMA", c'est aussi bête que cela. Mais n'est-ce pas grace à ses erreurs que l'on progresse ? Il faut dire que dans mon cas la route est longue....
                  Etant d'un naturel têtu et laborieux, je commence par étudier chacune des 78 pages du forum.
                  Encore merci smallcaps90 et à bientôt.

                  Cordialement<img src='http://www.pro-at.com/style/images/icones/icon_smile_big.gif' border='0' alt='' title='' align='middle' />

                  Commentaire


                  • Bonjour glave79,

                    Il n'est pas nécessaire que la courbe de l'indicateur soit désignée par "Courbe1" pour quelle apparaisse sur le graphe.

                    Le programme définit la variable EPMA et la fenêtre Propriétés de la règle comporte bien EPMA dans le champ "Nom" de la courbe1, avec Simple dans le champ "Affichage"...Par conséquent si tu as bien coché la case "Affichage sur les cours", la courbe de l'EPMA doit apparaître sur les cours...


                    Pour ce qui concerne les 78 pages de la file, il est vrai qu'il n'est pas très facile d'y retrouver qq chose vu que la fonction "Rechercher" n'accède pas à la page où se trouve le sujet qui t'intéresse...Néanmoins tu peux demander à Longway de t'envoyer son tableau Excel qui résout ce problème. Michka et jlr ont réalisé des documents Word reprenant l'intégralité de la file également. Cà aide bien! Merci à eux ...

                    Cordialement.

                    Commentaire


                    • Merci smallcaps90,

                      J'ai enfin compris, qu'il est nécessire de conserver la cohérence entre l'appellation de la courbe, déclarée dans l'onglet "Propriétés", et celle utilisée dans le corps du programme, chose que je n'avais pas faîte ! (dur, dur).

                      Je suis bien évidemment preneur de tout programme qui établit une synthèse des 78 pages du forum (j'en suis actuellement à la 4ème !) et j'en remercie à l'avance les auteurs, qui voudront bien me le faire parvenir (ordi.tel@free.fr).

                      Cordialement.

                      glave79

                      Commentaire


                      • Bonjour

                        Visuellement la Hull semble être intéressante ... ici appliquée sur le CAC avec un réglage de 10

                        <center><img src='http://images.pro-at.com/200606/b/cac4.png' alt='' /></center>


                        MAIS qu'en est il numériquement ... pourrait-on en faire un système de trading ??

                        Les outils utilisés :

                        Programme de la Hull avec segment de couleur :

                        <font color="blue">//====
                        //HULL
                        //====

                        //Moyenne de Hull
                        //V1.0 du 29/06/2005
                        //V2.0 du 16/05/2006
                        //

                        M_HULL = PONDERE(2*PONDERE(CLOTURE,P1/2)-
                        PONDERE(CLOTURE,P1),RACINE(P1))


                        //Tracé des segments croissants en vert
                        //des segments décroissants en rouge pour M_HULL

                        //1- Initialisations
                        SI RANGHISTO=2
                        ALORS
                        SI M_HULL>=M_HULL(1)
                        ALORS
                        V(0)=1
                        R(0)=0
                        SINON
                        V(0)=0
                        R(0)=1
                        FINSI
                        FINSI

                        //3- Détermination de la tendance
                        SI RANGHISTO>2
                        ALORS

                        SI M_HULL(1)>M_HULL
                        ALORS
                        R=1
                        V=0
                        FINSI

                        SI M_HULL(1)<M_HULL
                        ALORS
                        V=1
                        R=0
                        FINSI

                        SI M_HULL(1)=M_HULL
                        ALORS
                        SI V(1)=1 ALORS V=V(1)
                        SI R(1)=1 ALORS R=R(1)
                        FINSI

                        //Traitement des tracés
                        //
                        //Segments verts
                        //
                        SI V=1 ET V(1)=0
                        ALORS
                        SI A=0
                        ALORS
                        M_HULL_V1(1)=M_HULL(1)
                        M_HULL_V1=M_HULL
                        SINON
                        M_HULL_V2(1)=M_HULL(1)
                        M_HULL_V2=M_HULL
                        FINSI
                        FINSI

                        SI V=1 ET V(1)=1
                        ALORS
                        SI A=0 ALORS M_HULL_V1=M_HULL
                        SI A=1 ALORS M_HULL_V2=M_HULL
                        FINSI

                        SI V=0 ET V(1)=1
                        ALORS
                        SI A=0 ALORS M_HULL_V1(1)=M_HULL(1)
                        SI A=1 ALORS M_HULL_V2(1)=M_HULL(1)
                        A=NON(A)
                        FINSI


                        //Segments rouges
                        //
                        SI R=1 ET R(1)=0
                        ALORS
                        SI B=0
                        ALORS
                        M_HULL_R1(1)=M_HULL(1)
                        M_HULL_R1=M_HULL
                        SINON
                        M_HULL_R2(1)=M_HULL(1)
                        M_HULL_R2=M_HULL
                        FINSI
                        FINSI

                        SI R=1 ET R(1)=1
                        ALORS
                        SI B=0 ALORS M_HULL_R1=M_HULL
                        SI B=1 ALORS M_HULL_R2=M_HULL
                        FINSI

                        SI R=0 ET R(1)=1
                        ALORS
                        SI B=0 ALORS M_HULL_R1(1)=M_HULL(1)
                        SI B=1 ALORS M_HULL_R2(1)=M_HULL(1)
                        B=NON(B)
                        FINSI

                        FINSI

                        <center><img src='http://images.pro-at.com/200606/b/hull.png' alt='' /></center>



                        </font id="blue">Programme de détection d'inversion de sens de la HULL :

                        <font color="blue">//==============
                        //CONV_CONC_HULL
                        //==============

                        //Recherche des zones convexes/concaves et ascendantes/descendantes
                        //sur une moyenne de Hull
                        //le 30/06/2005
                        //

                        M(0)=HULL.M_HULL


                        CONVEXE = (M-2*M(1)+M(2)>=0) //Approximation de la dérivée seconde
                        CONCAVE = NON(CONVEXE)
                        ASCENDANT = (M>M(1))
                        DESCENDANT = NON(ASCENDANT)

                        HAUSSE_DEBUT = CONVEXE ET ASCENDANT
                        HAUSSE_FIN = CONCAVE ET ASCENDANT
                        BAISSE_DEBUT = -(CONCAVE ET DESCENDANT)
                        BAISSE_FIN = -(CONVEXE ET DESCENDANT)</font id="blue">

                        <center><img src='http://images.pro-at.com/200606/b/ss.png' alt='' /></center>

                        </font id="blue">Le programme de test :

                        Voici la structure des répertoires :
                        <center><img src='http://images.pro-at.com/200606/b/test.png' alt='' /></center>


                        </font id="blue">Programme "Trading system HULL" :

                        <font color="blue">//=================
                        // Trading System 2
                        //=================

                        // Similaire à "Trading System" avec en plus utilisation de la fenêtre
                        // d'affichage des règles pour un rapport de backtest (voir règle "Trad Gains 2")

                        //Système basé sur la Concavité de la moyenne de HULL
                        ACHAT=HULL.M_HULL_V1(2)=0 ET HULL.M_HULL_V1(1)<>0 ET HULL.M_HULL_V1<>0
                        OU
                        HULL.M_HULL_V2(2)=0 ET HULL.M_HULL_V2(1)<>0 ET HULL.M_HULL_V2<>0
                        VENTE=HULL.M_HULL_R1(2)=0 ET HULL.M_HULL_R1(1)<>0 ET HULL.M_HULL_R1<>0
                        OU
                        HULL.M_HULL_R2(2)=0 ET HULL.M_HULL_R2(1)<>0 ET HULL.M_HULL_R2<>0

                        //Signal Achat/Vente : 1 = Achat, 0 = Neutre, -1 = Vente
                        SIGNAL = Achat - Vente</font id="blue">

                        <center><img src='http://images.pro-at.com/200606/b/test1.png' alt='' /></center>


                        Le programme "Trad AchatVente HULL"

                        <font color="blue">// Position Acheteuse ou Vendeuse

                        ACHATVENTE = GAINS2.POS</font id="blue">

                        <center><img src='http://images.pro-at.com/200606/b/ha.png' alt='' /></center>


                        Le programme "Trad AV sur cours HULL"

                        <font color="blue">//==================
                        //TradAV sur cours 2
                        //==================

                        // Signal d'achat/Vente sur les cours (flèches)

                        Si SIGNAL = 1 Alors FACHAT = -1 // Achat : flèche haut en dessous des cours
                        Si SIGNAL = -1 Alors FVENTE = 1 // Vente : flèche bas au dessus des cours

                        Si GAINS2.SIGNALSTOP = 2 Alors FACHAT = 1 // Achat par Stop loss Vente
                        Si GAINS2.SIGNALSTOP = -2 Alors FVENTE = -1 // Vente par Stop loss Achat

                        COURBE_UP1=HULL.M_HULL_V1
                        COURBE_UP2=HULL.M_HULL_V2
                        COURBE_DN1=HULL.M_HULL_R1
                        COURBE_DN2=HULL.M_HULL_R2[/blue]

                        <center><img src='http://images.pro-at.com/200606/b/vente.png' alt='' /></center>



                        Le programme "Trad Gains HULL"


                        <font color="blue">// Calcul de la courbe des gains du Signal d'Achat/Vente
                        // et des statistiques sur les opérations dans la fenêtre d'Affichage (rapport de backtest)

                        // P1 = 0 : Opération au cours de Cloture du jour du signal
                        // P1 = 1 : Opération au cours d'Ouverture du jour suivant le signal
                        // P1 = 2 : Opération au cours moyen du jour suivant le signal

                        // P2 : Stop de protection à -P2% de perte
                        // P2 = 0 : Pas de stop de protection

                        // P3 = 1 : Affichage de chaque opération d'Achat/Vente dans la fenêtre d'affichage des règles


                        GAINS = GAINS(1)
                        GAINSREEL = GAINSREEL(1)
                        BUYANDHOLD = BUYANDHOLD(1)
                        Pos = Pos(1)
                        SIGNALSTOP=SIGNAL

                        // Affichage des statistiques sur les opérations

                        Si RANGHISTO=FINHISTO Alors
                        Afficher ""
                        Afficher "======== Statistiques sur les opérations d'Achat/Vente SUR HULL "
                        Afficher ""
                        Afficher "Nombre d'opérations : " & Trade &
                        " Gagnantes : " & Win & " (" & ARRONDI(Win/Trade*100,2) & "%)" &
                        " Perdantes : " & Lost & " (" & ARRONDI(Lost/Trade*100,2) & "%)"
                        Afficher ""
                        Afficher "Total des gains : " & ARRONDI(GAINSREEL,2) &
                        " Des opérations gagnantes : " & ARRONDI(SomWin,2) &
                        " Des opérations perdantes : " & ARRONDI(SomLost,2)
                        Afficher "Moyenne des gains : " & ARRONDI(GAINSREEL/Trade,2) &
                        " Des opérations gagnantes : " & ARRONDI(SomWin/Win,2) &
                        " Des opérations perdantes : " & ARRONDI(SomLost/Lost,2)
                        Afficher ""
                        Afficher "Meilleur opération gagnante : " & ARRONDI(MaxWin,2) &
                        " Plus petite opération gagnante : " & ARRONDI(MinWin,2)
                        Afficher "Plus grande opération perdante : " & ARRONDI(MaxLost,2) &
                        " Plus petite opération perdante : " & ARRONDI(MinLost,2)
                        Afficher ""
                        Afficher "Maximum d'opérations gagnantes consécutives : " & ARRONDI(MaxNbConsWin,2) &
                        " Gain total : " & ARRONDI(MaxConsWin,2)
                        Afficher "Maximum d'opérations perdantes consécutives : " & ARRONDI(MaxNbConsLost,2) &
                        " Perte totale : " & ARRONDI(MaxConsLost,2)
                        Afficher ""
                        Afficher "Perte maximale atteinte en intraday (MaxIntraDrawDown) : " & ARRONDI(MaxIntraDrawDown,2) &
                        " (le " & DateMaxIntra$ & ")"
                        Afficher ""
                        Afficher "===================================================="
                        Afficher ""
                        FinSi

                        // Calcul cours de l'opération

                        Si P1=0 Alors
                        CoursOper = Cloture // Opération au cours de Cloture si P1=0
                        Sinon
                        Si RANGHISTO=FINHISTO Alors Stop
                        Si P1=1 Alors CoursOper = Ouverture(-1) // Opération au cours d'ouverture du jour suivant si P1=1
                        Sinon CoursOper = (Haut(-1) + Bas(-1) + Cloture(-1)) / 3 // Opération au cours moyen du jour suivant si P1=2
                        FinSi

                        Si RANGHISTO = 1 Alors // Début historique
                        Cours0 = CoursOper
                        Pos = SIGNALSTOP
                        CoursDebOper = CoursOper
                        Stop
                        FinSi

                        // Stop de protection

                        Si P2>0 ET Pos<>0 ET SIGNALSTOP=0 Alors
                        Si Pos>0 Alors Perte = (CoursDebOper-Bas)/CoursDebOper
                        Sinon Perte = (Haut-CoursDebOper)/CoursDebOper
                        Si Perte >= P2% Alors
                        SIGNALSTOP = -2 * Pos
                        CoursOper = CoursDebOper * (1-Pos*P2%)
                        Si CoursOper>Haut Alors CoursOper = Haut
                        Si CoursOper<Bas Alors CoursOper = Bas
                        Finsi
                        FinSi

                        // Calcul de la courbe des Gains

                        PlusValue = (CoursOper - CoursDebOper) * Pos
                        GAINS = GAINSREEL + PlusValue
                        BUYANDHOLD = CoursOper - Cours0


                        // Calcul du MaxIntraDrawDown

                        Si Pos<>0 Alors
                        Si Pos>0 Alors Perte = Bas-CoursDebOper
                        Sinon Perte = CoursDebOper-Haut
                        Si Perte>0 Alors Perte = 0
                        PerteTotale = (GAINSREEL-MaxGains)+Perte
                        Si PerteTotale<MaxIntraDrawDown Alors
                        MaxIntraDrawDown = PerteTotale
                        DateMaxIntra$ = DateHisto$
                        FinSi
                        FinSi

                        // Calcul des statistiques de fin d'opération

                        Si Pos<>SIGNALSTOP ET SIGNALSTOP<>0 ET Pos<>0 Alors
                        Trade = Trade+1
                        Si GAINS>MaxGains Alors MaxGains = GAINS
                        Si PlusValue>0 Alors
                        Win = Win+1
                        SomWin = SomWin+PlusValue
                        Si Win=1 Alors MinWin = PlusValue
                        Si PlusValue<MinWin Alors MinWin = PlusValue
                        Si PlusValue>MaxWin Alors MaxWin = PlusValue
                        ConsWin = ConsWin+PlusValue
                        Si ConsWin>MaxConsWin Alors MaxConsWin = ConsWin
                        NbConsWin = NbConsWin+1
                        Si NbConsWin>MaxNbConsWin Alors MaxNbConsWin = NbConsWin
                        ConsLost = 0
                        NbConsLost = 0
                        Sinon
                        Lost = Lost+1
                        SomLost = SomLost+PlusValue
                        Si Lost=1 Alors MinLost = PlusValue
                        Si PlusValue>MinLost Alors MinLost = PlusValue
                        Si PlusValue<MaxLost Alors MaxLost = PlusValue
                        ConsLost = ConsLost+PlusValue
                        Si ConsLost<MaxConsLost Alors MaxConsLost = ConsLost
                        NbConsLost = NbConsLost+1
                        Si NbConsLost>MaxNbConsLost Alors MaxNbConsLost = NbConsLost
                        ConsWin = 0
                        NbConsWin = 0
                        FinSi
                        FinSi

                        // Affichage des opérations si P3=1

                        Si P3=1 ET Pos<>SIGNALSTOP ET SIGNALSTOP<>0 ET Pos<>0 Alors
                        Si Pos>0 Alors Operation$="ACHAT" Sinon Operation$="VENTE"
                        DateFinOper$ = DateHisto$
                        Afficher Operation$ & " " &
                        DateDebOper$ & " " & CTXT$(CoursDebOper,2) & " " &
                        DateFinOper$ & " " & CTXT$(CoursOper,2) & " " &
                        CTXT$((CoursOper-CoursDebOper)/CoursDebOper*Pos*100,2) & "%"
                        FinSi


                        // Début d'une nouvelle opération (ou seulement fin de la précédente)

                        Si Pos<>SIGNALSTOP ET SIGNALSTOP<>0 Alors
                        GAINSREEL = GAINS
                        Si ABSOLU(SIGNALSTOP)=1 ALors // Début d'une nouvelle opération
                        Pos = SIGNALSTOP
                        CoursDebOper = CoursOper
                        DateDebOper$ = DateHisto$
                        Sinon
                        Pos = 0 // Arrêt de l'opération à cause d'un stop loss
                        FinSi
                        Finsi

                        <center><img src='http://images.pro-at.com/200606/b/fin.png' alt='' /></center>


                        RESULTAT DES COURSES A SUIVRE ...

                        Commentaire


                        • La HULL suite ...

                          Reprenons notre graph de départ sur lequel on la HULL 10 sur le CAC Daily :

                          <center><img src='http://images.pro-at.com/200606/b/cac5.png' alt='' /></center>


                          Si on fait un backtest avec notre oeil <img src='http://www.pro-at.com/style/images/icones/icon_smile_blush.gif' border='0' alt='' title='' align='middle' /> ... on va avoir un signal de vente (ou achat) sur la barre où est indiquée la flèche et donc, on passe Acheteur (ou vendeur) à l'open de la barre suivante (Soit Barre +1).

                          Pour faire cela, il faut juste modifier le programme "Trading system HULL" donner ci-dessus par le programme suivant :

                          <font color="blue">//=================
                          // Trading System 2
                          //=================

                          // Similaire à "Trading System" avec en plus utilisation de la fenêtre
                          // d'affichage des règles pour un rapport de backtest (voir règle "Trad Gains 2")

                          //1er système (voleur d'une barre)
                          //Système basé sur la concavité de la moyenne de HULL
                          ACHAT=HULL.M_HULL_V1(1)=0 ET HULL.M_HULL_V1<>0
                          OU
                          HULL.M_HULL_V2(1)=0 ET HULL.M_HULL_V2<>0
                          VENTE=HULL.M_HULL_R1(1)=0 ET HULL.M_HULL_R1<>0
                          OU
                          HULL.M_HULL_R2(1)=0 ET HULL.M_HULL_R2<>0

                          // Signal Achat/Vente : 1 = Achat, 0 = Neutre, -1 = Vente
                          SIGNAL = Achat - Vente</font id="blue">



                          Si on backtest dans ces conditions nous avons les résultats suivants depuis 1991 :

                          <font color="blue">======== Statistiques sur les opérations d'Achat/Vente SUR HULL

                          Nombre d'opérations : 741 Gagnantes : 483 (65,18%) Perdantes : 258 (34,82%)

                          Total des gains : 34344,92 Des opérations gagnantes : 42990,5 Des opérations perdantes : -8645,58
                          Moyenne des gains : 46,35 Des opérations gagnantes : 89,01 Des opérations perdantes : -33,51

                          Meilleur opération gagnante : 996,39 Plus petite opération gagnante : 0,29
                          Plus grande opération perdante : -232,33 Plus petite opération perdante : -0,2

                          Maximum d'opérations gagnantes consécutives : 11 Gain total : 1700,38
                          Maximum d'opérations perdantes consécutives : 6 Perte totale : -481,98

                          Perte maximale atteinte en intraday (MaxIntraDrawDown) : -596,17 (le 13/04/2000)</font id="blue">



                          Le résultat est tout aussi bon sur les actions ... vous pouvez le vérifier en cliquant sur le menu "Règle" puis sur "Fenêtre d'affichage" pour avoir les résultat du backtest et le détail des opérations.


                          seulement il y a un Hic .. cette visualisation triche sur la réalitée.

                          En fait on détecte le retournement de la HULL non pas sur la flèche mais sur le cours de cloture de la barre d'après (barre +1 par rapport à la flèche) et donc on ne peut rentrer en position qu'à l'ouverture de la barre +2 (toujours par rapport à la flèche) comme indiqué ci-dessous :

                          <center><img src='http://images.pro-at.com/200606/b/cac6.png' alt='' /></center>

                          En fait le signal de retournement représenté par la flèche est décalé d'une barre comme dans le programme d'origine que je vous ai fourni dans les outils ci-dessus et voici les conséquences sur le graph INGENICO

                          <center><img src='http://images.pro-at.com/200606/b/d%e9cal%e9.png' alt='' /></center>


                          Et là cela change tout dans le résultat car ce lag d'une barre supplémentaire (en entrée ... mais aussi en sortie ) nous en met plein les gencives.

                          Voici la comparaison des résultats du backtetst avec INGENICO en daily :

                          Backtest "avec l'oeil" :

                          <font color="blue">======== Statistiques sur les opérations d'Achat/Vente SUR HULL

                          Nombre d'opérations : 247 Gagnantes : 167 (67,61%) Perdantes : 80 (32,39%)

                          Total des gains : 139,7 Des opérations gagnantes : 169,34 Des opérations perdantes : -29,64
                          Moyenne des gains : 0,57 Des opérations gagnantes : 1,01 Des opérations perdantes : -0,37

                          Meilleur opération gagnante : 6,21 Plus petite opération gagnante : 0,01
                          Plus grande opération perdante : -2,21 Plus petite opération perdante : 0

                          Maximum d'opérations gagnantes consécutives : 12 Gain total : 16,85
                          Maximum d'opérations perdantes consécutives : 6 Perte totale : -5,69

                          Perte maximale atteinte en intraday (MaxIntraDrawDown) : -10,92 (le 17/05/2001)</font id="blue">

                          Backtest en condition réelle (on rentre à l'open après la close de détection de l'inversion de la HULL) :

                          <font color="blue">======== Statistiques sur les opérations d'Achat/Vente SUR HULL

                          Nombre d'opérations : 247 Gagnantes : 101 (40,89%) Perdantes : 146 (59,11%)

                          Total des gains : 5,43 Des opérations gagnantes : 90,54 Des opérations perdantes : -85,11
                          Moyenne des gains : 0,02 Des opérations gagnantes : 0,9 Des opérations perdantes : -0,58

                          Meilleur opération gagnante : 5,5 Plus petite opération gagnante : 0,01
                          Plus grande opération perdante : -4 Plus petite opération perdante : 0

                          Maximum d'opérations gagnantes consécutives : 5 Gain total : 8,84
                          Maximum d'opérations perdantes consécutives : 8 Perte totale : -6,07

                          Perte maximale atteinte en intraday (MaxIntraDrawDown) : -16,27 (le 24/09/2001)</font id="blue">


                          Si vous regardez d'autres titres, on passe très souvent ... directement en négatif .. et tout cela pour un retard d'entrée en position d'une barre.

                          La question à laquelle je n'ai pas de réponse ... comment peut t-on regagner au minimum cette barre :
                          - Rajouter un indicateur complémentaire .. lesquels?
                          - Anticiper le retournement .. comment ?
                          - C'est un système Stop and Reverse .. est ce la bonne utilisation?
                          - Faut il l'utiliser autrement d'une autre façon (ex : uniquement en période de tendance ..


                          Voili voilo.

                          Bien évidemment, ce post n'a été possible qu'avec les compétences de Smallcaps <img src='http://www.pro-at.com/style/images/icones/icon_hippy.gif' border='0' alt='' title='' align='middle' /> ...

                          FOKI

                          Commentaire


                          • Bonjour FOKI,

                            Bonne idée d'étendre le travail collaboratif ici même sur le sujet après nos nombreux contacts en PV.

                            "Prediction is difficult, especially of the future!..." affirmait Niels Bohr, néanmoins, l'anticipation potentielle des points de retournements de la moyenne de Hull pourrait s'envisager de plusieurs façons.
                            Je propose dans un premier temps la solution suivante : à l'image de ce que j'avais fait sur le "Slope Volatility Predictor", on pourrait chercher la position des points d'inflexion sur la moyenne de Hull.
                            Points d'inflexion?... Oui, les points d'infexion de la Hull caractérisent un infléchissement du trend en cours, à qq barres près évidemment compte tenu du lag inhérent à tout type de moyenne, la Hull malgré ses qualités intéressantes de lissage n'échappant pas à ce lag même si celui-ci est inférieur à celui d'autres types de moyennes pour une valeur identique du recul de calcul.
                            Les points d'inflexion de la Hull en fait nous les avons déjà (à une barre près) avec l'indicateur "Conv_Conc_Hull", lorsqu'il passe de HAUSSE_DEBUT à HAUSSE_FIN ou de BAISSE_DEBUT à BAISSE_FIN et inversement.
                            Voyons néanmoins ce que donnerait cette autre idée qui avait été utilisée dans le "Slope Volatility Predictor" et qui consistait à interpoler la courbe étudiée par des splines cubiques, grâce à quoi on disposait immédiatement de la valeur de la dérivée première à la courbe interpolée et de celle de sa dérivée seconde à chaque période.
                            Si on opère de même ici, le programme : "Hull_Pics_Creux" suivant programme un indicateur qui permet de trouver immédiatement non seulement les pics et les creux de la moyenne de Hull aux points d'annulation de l'indicateur mais aussi les points d'inflexion de la Hull aux points de retournements de l'indicateur lui-même, c'est à dire à ses pics et ses creux.

                            Programme :
                            //===============
                            //HULL_PICS_CREUX
                            //===============

                            //Détermination des pics et creux de la moyenne de Hull du prog HULL
                            //par interpolation à l'aide de splines cubiques naturelles et
                            //approximation de la vitesse de variation de la moyenne de Hull.
                            //smallcaps.90 le 23/05/2006
                            //

                            //Moyenne de Hull
                            //
                            MOY_HULL(0)=HULL.M_HULL


                            SI RANGHISTO=FINHISTO //Après calcul global de la moyenne(?)
                            ALORS

                            POUR FINHISTO COURS
                            SI (RANGHISTO>1) ET (RANGHISTO<FINHISTO)
                            ALORS
                            ALPHA(0)=3*(MOY_HULL(-1)-2*MOY_HULL(0)+MOY_HULL(1))
                            FINSI
                            FINPOUR

                            POUR FINHISTO COURS
                            SI RANGHISTO=1
                            ALORS
                            L(0)=1
                            U(0)=0
                            Z(0)=0
                            FINSI

                            SI (RANGHISTO>1) ET (RANGHISTO<FINHISTO)
                            ALORS
                            L(0)=4-U(1)
                            U(0)=1/L(0)
                            Z(0)=(ALPHA(0)-Z(1))/L(0)
                            FINSI

                            SI RANGHISTO=FINHISTO
                            ALORS
                            L(0)=1
                            Z(0)=0
                            C(0)=Z(0)
                            FINSI

                            FINPOUR

                            POUR FINHISTO COURS
                            SI RANGHISTO=1
                            ALORS
                            J=-FINHISTO+RANGHISTO+1
                            FINSI

                            SI RANGHISTO<=FINHISTO //rétropropagation
                            ALORS
                            C(J)=Z(J)-U(J)*C(J-1)
                            B(J)=MOY_HULL(J-1)-MOY_HULL(J)-(C(J-1)+2*C(J))/3
                            D(J)=(C(J-1)-C(J))/3
                            J=J+2
                            FINSI
                            FINPOUR

                            POUR FINHISTO COURS //Dérivées première et seconde
                            SI RANGHISTO<FINHISTO
                            ALORS
                            FPRIME(0)=B(0)
                            FSECONDE(0)=2*C(0)
                            FINSI

                            SI RANGHISTO=FINHISTO
                            ALORS
                            FPRIME(0)=B(1)+2*C(1)+3*D(1)
                            FSECONDE(0)=2*C(1)+6*D(1)
                            FINSI
                            FINPOUR

                            FINSI

                            //Traitement de la dérivée par triple lissage de son momentum
                            SI RANGHISTO=FINHISTO
                            ALORS
                            POUR FINHISTO COURS

                            MomP(0)=FPRIME-FPRIME(P5)
                            //MomS(0) = FSECONDE-FSECONDE(P5)

                            //Triple lissage exponentiel du momentum de la dérivée première
                            //
                            M1(0)=EXPOSUIV(M1,MomP,P1)
                            M2(0)=EXPOSUIV(M2,M1,P2)
                            M3(0)=EXPOSUIV(M3,M2,P3)

                            ABSMomP=ABSOLU(MomP)

                            M4(0)=EXPOSUIV(M4,ABSMomP,P1)
                            M5(0)=EXPOSUIV(M5,M4,P2)
                            M6(0)=EXPOSUIV(M6,M5,P3)

                            HULL_PICS_CREUX=100*(M3/M6)

                            DERPREMIERE=FPRIME
                            DERSECONDE(0)=FSECONDE

                            M_DERPREM=PONDERE(2*PONDERE(DERPREMIERE,P1/2)-
                            PONDERE(DERPREMIERE,P1),RACINE(P1))

                            //M_DERSEC=PONDERE(2*PONDERE(DERSECONDE,P1/2)-
                            //PONDERE(DERSECONDE,P1),RACINE(P1))

                            //-----------------Extremas de HULL_PICS_CREUX
                            //
                            SI M_DERPREM(2)<M_DERPREM(1) et M_DERPREM(1)>M_DERPREM(0)
                            ALORS
                            SOMMETS_HAUTS(1) = 1
                            FLECHE_BLEUE(1)=(SOMMETS_HAUTS(1)*M_DERPREM(1))*(M_DERPREM(1)>0)
                            *(CONV_CONC_HULL.HAUSSE_DEBUT(1)<>0 OU CONV_CONC_HULL.HAUSSE_FIN(1)<>0)
                            FINSI

                            SI M_DERPREM(2)>M_DERPREM(1) et M_DERPREM(1)<M_DERPREM(0)
                            ALORS
                            SOMMETS_BAS(1) = 1
                            FLECHE_ROUGE(1)= SOMMETS_BAS(1)*M_DERPREM(1)*(M_DERPREM(1)<0)
                            *(CONV_CONC_HULL.BAISSE_DEBUT(1)<>0 OU CONV_CONC_HULL.BAISSE_FIN(1)<>0)
                            FINSI


                            FINPOUR
                            FINSI
                            //fin du code
                            Propriétés :
                            <center><img src='http://images.pro-at.com/200606/b/prop_pic_et_creux.gif' alt='' /></center>
                            Pour ce qui est du CAC40 :
                            <center><img src='http://images.pro-at.com/200606/b/cac40_1.gif' alt='' /></center>
                            Les flèches bleues et rouges repèrent les extremas de l'indicateur. Les pics (flèches bleues) ne seront validés que s'ils ont lieu pour une valeur positive de l'indicateur qui rappelons-le ne représente pas autre chose que la valeur de la pente de la Hull, donc de sa dérivée première. A une valeur positive de l'indicateur correspond un trend haussier sur la Hull.
                            De même les flèches rouges retenues ne valident que les creux pour lesquels la pente de la Hull est négative (trends baissiers).
                            Si l'on s'appuie par exemple sur le petit trend haussier du CAC40 de fin avril 2006, on constate bien qu'aux points 1 et 3 l'indicateur "Hull_Pics_Creux" s'annule et la Hull admet un pic en 1 et un creux en 3.
                            Si maintenant on s'intéresse au pic de l'indicateur repèré 2 sur le graphe, il lui correspond sur la Hull un point d'inflexion où la courbure de la Hull change de convexe en concave. Le point correspondant sur : "Conv_Conc_Hull" est encore en période HAUSSE_DEBUT (vert foncé) mais après la période suivante il passe en HAUSSE_FIN (vert clair).
                            Le point des cours correspondant au point 2 d'inflexion de la Hull se situe 4 périodes avant le pic 3.
                            Ce qui anticipe confortablement le point de fin du trend haussier et peut permettre de se préparer à sortir dans une position plus avantageuse qu'au point 3.

                            Malheureusement, il existe des cas pour lesquels l'anticipation de la fin d'un trend par recherche des points d'inflexion de la Hull, s'avère être trop ... anticipée. Effectivement, tous les trends n'ont pas la régularité de celle de l'exemple ci-dessus. Regardez Total avec une Hull 20 périodes courant mars et avril 2006 par exemple :
                            <center><img src='http://images.pro-at.com/200606/b/total_trend2.gif' alt='' /></center>
                            Le trend haussier qui s'y est développé est formé d'une succession de 4 sous-trends haussiers ayant chacun son point d'inflexion (4 points d'inflexions utiles repèrés par les 4 flèches bleues de l'indicateur en zone positive).
                            A l'évidence, se préparer à sortir après le point 1 ou le point 2 serait prématuré. La position idéale se situerait plutôt après le point 3, légèrement avant le point 4.
                            Pour information chaque tiret rouge, repèré de 1 à 4 sur les cours, correspond au niveau que devrait prendre la clôture à la future période pour que la Hull présente un point de retournement à la prochaine période justement (le programme de recherche de ces valeurs sera communiqué dans un prochain post car le sujet qu'il traite constitue un assez gros pavé à lui seul)...
                            Les clôtures futures des points 1 et 2 ont peu de chances d'êtres atteintes à moins de gaps importants à venir...Par contre le niveau qui correspond au point 3 est tout à fait atteignable vu la proximité plus étroite qu'il a avec les cours. Un indicateur montrant l'écart qui existe entre HUll et clôtures futures de 1 à 4 visualise bien le fait que l'écart diminue sensiblement pour le point d'inflexion 3.
                            <center><img src='http://images.pro-at.com/200606/b/total2_trend1.gif' alt='' /></center>
                            Bien entendu nous sommes dans le plausible donc dans le flou en faisant cette constatation, mais voici néanmoins une information supplémentaire qui pourrait s'avérer précieuse pour prendre ou non en compte un point d'inflexion sur l'indicateur sous les cours et donc tenter d'anticiper une possible fin du trend...tout ceci sans aucune garantie bien sûr...
                            Comment valider ou invalider un tel niveau possible?
                            Reste également à voir ce que donnerait un backtest avec ces nouvelles infos....
                            N'hésitez pas à vous exprimer sur le sujet...tous les avis sont les bienvenus!


                            Cordialement.

                            Commentaire


                            • Bonjour Smallcaps

                              Je viens de mettre ton prog et cela fonctionne chez moi .. j'ai toutefois eu un petit soucis car tu fais référence dans ton programme à "CONV_CONC_HULL" et moi jamais nommé mon programme "Convexe_Concave" ... évidemment, il ne connaissait pas ce programme.
                              J'ai donc corrigé le nom de mon programme dans mon post de présentation , il faut bien mettre comme indiqué maintenant soit :
                              <center><img src='http://images.pro-at.com/200606/b/ss1.png' alt='' /></center>

                              FOKI

                              Commentaire


                              • hello: peut on faire des stats (ou un backtest) sur le portefeuille?
                                Exemple: admettons que j'ai depuis le 15/11/2003 la valeur Sphinx dans mon portefeuille.
                                Depuis cette date j'ai fait avec elle de nombreux aller retour (le nombre de titres n'étant jamais identique), je souhaiterai connaitre :
                                1) le nombre d'opérations réalisées depuis une date à définir (1/1/2004 ) puis une autre date (01/06/2005) par exemple.
                                2) les gains (ou pertes réalisées) avec cette valeur depuis la date choisie
                                3) le PRU des titres que j'ai actuellement en portefeuille depuis une date choisie
                                4) et pour ceux qui ont plusieurs comptes avec la valeur Sphinx, peut on globaliser le tout sur tous les portefeuilles?

                                Commentaire

                                Chargement...
                                X