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

  • Bonsoir à tous,
    Parlons, si vous le voulez bien de backtests.
    je me trouve face à un problème pour lequel j'aimerai avoir vos avis.
    Faire du backtest à la volée sur plusieurs actions, c'est ce que l'on fait en général.
    Mais si l'on affine ça se complique vraiment, car il y a des regroupements d'actions ou split, et des erreurs de cohérence des cours, cela rend le backtest complètement erroné.

    Première solution je trouve un fichier parfait des cours de bourse ! Compliqué à dire, et à vérifier !
    Deuxième solution il n'est pas tenu compte des opérations dont le pourcentage de gains ou de pertes excède 15% par exemple.
    Les autres solutions je vous laisse me les proposer.


    A méditer ! Vos solutions ?
    Bonne soirée

    PS une autre solution rendre caduque les opérations dont la différence clôture -> ouverture est plus important que 20%par exemple (peut-être pour le moment la meilleure solution)
    Max imum de gains et Min imum de pertes

    Commentaire


    • Bonsoir à toutes et tous,


      Puisque j'avais la moyenne du Dr. Manfred Dürschner sous le coude, je la poste ce soir.
      M. Dürschner a gagné le concours annuel de 2011 avec sa moyenne qu'il nomme de 3ème génération. Ce concours est organisé par la VTAD (Vereinigung Technischer Analysten Deutschlands) , l'Association des Analystes Techniques d'Allemagne.
      Le texte de Dürschner est dispo sur le site de la VTAD.

      Dürschner crée une sorte de hiérarchie entre les moyennes qu'il classe en trois générations.
      Dans la première il met : la moyenne mobile simple qui sera notée SMA par la suite, la moyenne mobile exponentielle, notée EMA et la moyenne mobile linéairement pondérée, notée WMA (j’ajoute, pourquoi pas la TMA et bien d'autres?).
      Dans la deuxième génération, il place comme exemple une moyenne zéro-lag qui utilise le twicing, soit-disant créée par J. Ehlers. C’est en fait la DEMA de Mulloy qui repose habituellement sur la EMA alors qu’il serait tout à fait possible d’utiliser une autre moyenne de la génération 1.0. Il ya d'autres moyennes dans cette génération évidemment.
      Dans la troisième génération, il place sa moyenne.

      Avant de la présenter il faut que nous expliquions SIMPLEMENT le théorême de Nyquist-Shannon relatif à la fréquence d'échantillonnage d'un signal.
      Le théorême de Nyquist-Shannon impose que : f échantillonnage > 2* f max, où f max est la fréquence maximale contenue dans le signal à échantillonner.
      Nous choisirons les cours de clôture d'un titre qui seront «lissés» par des moyennes et Dürschner considère cette opération comme une numérisation, un échantillonnage.


      La moyenne de Dürschner utilise deux moyennes standard de première génération, notées M1 et M2.
      On doit donc avoir :
      f d’échantillonnage de M1 > au moins 2 fois la fréquence maxi contenue dans les cours de clôture.
      De même comme M2 sera appliquée à M1, f d’échantillonnage de M2, doit être au moins 2 fois la fréquence maxi contenue dans M1 (f maxi de M1 :
      f échantillonnage de M2 >=2*f maxi de M1

      Si on raisonne maintenant sur les périodes, qui sont les paramètres de réglages habituels que nous définisons pour calculer des moyennes en analyse technique, comme on a :
      fréquence = 1/période, la relation entre les périodes de calculs n1 pour M1 et n2 pour M2 est : 1/n2 > 2*(1/n1) ----> n1>n2

      Qui peut aussi s’écrire en introduisant le coefficient lambda : n1=lambda*n2 avec lambda>2 .

      Dans l’ approche de Mulloy, remarquons que n1 et n2 sont toujours identiques.
      C’est également le cas dans les autres moyennes 2.0 que la DEMA.
      De ce fait, elles sont critiquées par Dürschner car elles ne respectent pas le théorême de Nyquist

      La moyenne mobile 3.0.

      À l'aide du théorème de Nyquist, une relation est maintenant connue entre les périodes de calcul des moyennes utilisées.


      La figure ci-dessus, reprise du document de Dürschner, montre schématiquement les cours de clôture (ligne noire), une moyenne M1 (ligne rouge) avec le retard L1 sur les cours de clôture et une moyenne M2 (ligne bleue) avec le retard L2 sur M1.
      Nous pouvons faire l’approximation suivant laquelle les angles "phi1" et "phi2" sont égaux, alors : D1/L1=D2/L2 et, dans ces conditions, nous avons :

      (1) D1/D2 = L1/L2 = (Clôture - M1) / (M1 – M2)

      Pour le quotient des lags L1/L2, comme nous avons : L1=(n1-1)/2 pour SMA et EMA et L1= (n1-1)/3 pour WMA

      L1/L2 = (n1 - 1) / (n2 - 1) que nous notons alpha.

      Expression dont ont disparu les dénominateurs 2 et 3 des lags des trois types de moyennes 1.0. Le coefficient alpha s'applique donc aux 3 moyennes 1.0.
      Le théorème de Nyquist, nous donnait : n1 = lambda * n2 avec lambda>= 2
      Nous aurons donc :
      (2) alpha = lambda * (n1 - 1) / (n1 - lambda)

      Ce qui reporté dans (1) donne :

      (3 ) (Cloture - M1) = alpha* (M1 - M2)

      En raison de l'approximation que nous avons faite sur l’égalité des angles "phi1" et "phi2" (voir la figure ci-dessus), l’expression (3) n'est pas strictement exacte.
      Si nous remplaçons la clôture dans (3) par la quantité approximative notée NMA (Nyquist Moving Average) et si nous résolvons l'équation, nous obtenons :

      (4) NMA = (1 + alpha)* M1 - alpha* M2

      L'approximation NMA a l’allure d’une moyenne mobile.
      Écrite en détail :

      ------------------------------------------------------------------------------------------------------------------------------
      (5) NMA(Cloture,n1,n2) = (1+alpha)*M1(Cloture,n1) - alpha*M2(M1(Cloture,n1),n2)
      ------------------------------------------------------------------------------------------------------------------------------

      où l'expression (2) s'applique à alpha :

      ---------------------------------------------------------------------------------
      (6) alpha=lambda*(n1)/(n1- lambda) avec lambda>2
      ---------------------------------------------------------------------------------

      Les expressions (5) et (6) sont les équations de la moyenne mobile 3.0 proposée par Dürschner.
      Elle s'applique indifféremment aux SMA, EMA et WMA. Étant donné que la WMA standard a le plus petit retard des trois, cela devrait probablement être le premier choix pour la NMA. Notre choix sera donc : M1=WMA et M2=WMA aussi.

      Le lag pour chaque moyenne mobile standard (SMA, EMA et WMA) est : lag = (n - 1) / k, où k = 2 pour les SMA et EMA et k = 3 pour la WMA.
      Si nous reportons dans (5) cela donne un retard pour l’ajout de M2(M1) dans l’expression de la NMA, quasiment = 0.
      En pratique, cela signifie que dans le cas de périodes n1=20 et n2=5, le retard de la NMA est inférieur à un jour.

      Test de la moyenne mobile de Dürschner sur Bigben (FR0000074072).

      La WMA est utilisée comme moyenne standard dans les trois cas ci-dessous avec n1=20 et n2=5 (Ces valeurs respectent le théorême de Nyquist, je n'ai pas appliqué Fourier pour trouver les fréquences maxi contenues dans les clôtures et dans M1. Je me suis contenté d'utiliser le DPO (Detrended Price Oscillator) et de mesurer les plus petites périodes contenues dans ces signaux, de l'ordre de 2 jours pour les cours et 24 jours pour M1, soit des fréquences maxi de l'ordre de 0.5 période/jour et 0.042 période/jour. Les valeurs de n1 =20 et n2= 5 respectent largement le théorême d'échantillonnage de Nyquist, même si les valeurs des fréquences maxi contenues dans les cours et dans M1 sont approximatives.



      On constate sur ce cas particulier :
      - retard WMA/NWMA ----> 4 jours ici (souvent compris entre 2 et 3 jours habituellement)
      - retard DEMA/NWMA -----> 2 jours ici (souvent compris entre 2 et 3 jours habituellement)
      - retard WMA standard/Cloture ----> 4 jours ici (normalement de 6.67 jours par calcul)
      - le retard de la NMWA /Cloture serait de 0.67 jour dans le pire des cas par calcul.

      Ces valeurs peuvent changer selon les configurations des cours et les valeurs de n1 et n2.

      En résumé, on peut affirmer que la NWMA, sur la base du théorème d'échantillonnage de Nyquist, apporte une amélioration en comparaison avec la DEMA de Mulloy et la WMA standard.


      Bonne soirée.

      Commentaire


      • Bonjour Didier,

        Je n'ai pas vraiment de solution à ton problème. Ne serait-il pas insoluble avec les outils dont nous disposons?
        Peut-être qu'en limitant le nombre de cours sur le quels se fera le backtest on évitera les difficultés dont tu parles mais que vaudra le backtest?
        Pour le split, je n'utilise pas l'outil de GAP, je trouve leurs valeurs sur le site abcbourse et je les entre dans GAP. Cela implique une surveillance attenttive bien sûr.
        Cordialement.

        Commentaire


        • Bonjour Daniel,
          J'ai rechargé les cours sur le site Graph AT et j'ai le sentiment qu'il y a du mieux, même si lorsque l'on charge la suite du 1 janvier à ce jour le logiciel signal de nombreuses incohérences de cours. j'ai mis en place une solution et je ne vais pas tarder à sortir une version d'analyse d'une action en Backtest. Le soleil et le VTTE m'appelle pour gravir la montagne alors la sortie du programme va attendre un petit peu
          Bonne journée
          Max imum de gains et Min imum de pertes

          Commentaire


          • Bonjour,
            Petite astuce lorsque vous copiez des indicateurs, je suppose que vous avez toujours envie d'en changer quelques critères pour adapter à votre goût, alors 2 solutions vous avez un dossier directement "ORIGINE" et vous travaillez sur une copie, facile à dire, plus qu'à gérer, il arrive un moment ou vous ne savez plus
            Alors l'autre solution avoir un vrai dossier sur votre disque dur des indicateurs que vous installez pour la première fois, vous trouverez le dossier : C:\Program Files (x86)\Graphe AT Pro\Base\RegleIndic
            Bon maintenant passons au vif du sujet :
            Les 3 MA_FORMULE... sont les mêmes seuls les nons et donc les indicateurs que vous mettrez à l'intérieur sont différents selon l'objet.
            //=================================================================================================
            // PROGRAMME DE BACKTESTING 2020
            //=================================================================================================

            //=================================================================================================
            // PROGRAMME DE BACKTESTING 2020
            //=================================================================================================
            //Commentaires : (Lire aussi les commentaires sur les lignes de choix)
            // "Si investi sur action à rentabilité équivalente dans les périodes liquide"
            // Une action qui est proche de 100% du temps en position ne peut pas se comparer à une qui laisse disponible les liquidités 50% du temps ou plus.
            // La notion rentabilité à durée de position équivalente est donc importante.
            //
            // Les indicateurs qui repeignent le passé ne peuvent pas être utilisés, car l'indicateur est tracé avant le backtesting,
            // pour les utliser if faudrait qu'ils soient tracés en même temps. Si je vous écris les numéros du Loto la veille,
            // et qu'une fois le tirage effectué que je gomme mon écris pour mettre les bons chiffes, ça ne va pas vous faire gagner, juste vous faire rêver avant de passer au réel
            // Ces indicateurs ne sont pas pour autant sans intérêts, ils ne sont simplement pas adaptés au backtesting.
            //___________________________________________________________________
            //
            // CHOIX DIVERS
            //___________________________________________________________________
            Duree= FINHISTO // 255 BOUCLE sur 255 jours // FINHISTO BOUCLE Duree du programme
            listing=1 // OUI=1 ou NON=0
            Bilan_annuel=0 // OUI=1 ou NON=0
            Seuil_gain_mini=3 // Gain annuel minimum 3% POUR ALARME
            Max_dro=20 // Perte maximum acceptabe 20%
            Gap_alarme=10 // Alarme de Gap excessif à 10% selon votre choix
            Gap_sorti_backtest=10 // Gap excessif à 10% SORTIS DU RESULTAT !!!!
            duree_moyenne=200 // Pour calacul et Alarme
            //___________________________________________________________________
            //
            // CHOIX TYPE D'ACHAT
            //___________________________________________________________________
            Moment_Achat=((HAUT+CLOTURE)/2) // **** Important **** CLOTURE ou HAUT ou (HAUT+CLOTURE)/2) Le reste est compliqué dans la réalité, le plus BAS est du rêve
            ERREUR_TOPACHAT=0.001 // 0.001=+ 0,10% pour achat non conforme à l'ordre du logiciel
            //___________________________________________________________________
            //
            // CHOIX TYPE DE VENTE
            //___________________________________________________________________
            Moment_Vente=((BAS+CLOTURE)/2) // **** Important **** CLOTURE ou BAS ou (BAS+CLOTURE)/2) Le reste est compliqué dans la réalité, le plus HAUT est du rêve
            Sans_stop=0 // OUI=1 ou NON=0
            //___________________________________________________________________
            //
            // CHOIX FRAIS DE COURTAGE
            //___________________________________________________________________
            choix_frais=2
            //______________________________________
            Si choix_frais=1 alors frais=0.0043+ERREUR_TOPACHAT finsi //frais achat+ revente BOURSORAMA TRADER 7750 euros 0,0043
            Si choix_frais=2 alors frais=0.0023+ERREUR_TOPACHAT finsi //frais achat+ revente BOURSE DIRECT PEA POUR ACHAT 7500 euros soit 0,425 pour 4000 euros
            Si choix_frais=3 alors frais=0.014+ERREUR_TOPACHAT finsi //frais achat+ revente CAISSE D'EPARGNE
            Si choix_frais=4 alors frais=0.00304+ERREUR_TOPACHAT finsi //frais achat+ revente FORTUNEO trader
            Si choix_frais=5 alors frais=0.0032+ERREUR_TOPACHAT finsi //frais achat+ revente BOURSORAMA ULTIMATE trader
            Si choix_frais=6 alors frais=0.0104+ERREUR_TOPACHAT finsi //frais achat+ revente BOURSORAMA clasSic 1800 euros à 3490 euros 0,0104
            Si choix_frais=7 alors frais=0.00444+ERREUR_TOPACHAT finsi //frais achat+ revente BOURSORAMA TRADER 7500 euros 0,00444 pour 1 soit 0,44 POUR 100
            Si choix_frais=8 alors frais=0.0095+ERREUR_TOPACHAT finsi //frais achat+ revente BOURSORAMA TRADER 3500 euros 0,0095
            //______________________________________
            Si RangHisto >= FinHisto-Duree ALORS // N°1

            //========================================================================================================================================================
            // FIN INITIALISATION 1er JOUR DEBUT BOUCLE SUR ACTION
            //========================================================================================================================================================
            Si RangHisto < duree_moyenne alors calcul_moyenne=calcul_moyenne+CLOTURE

            si cloture<ouverture alors
            total_baisses_euros=total_baisses_euros+(ouverture-cloture) //CALCUL DU TOTAL DES BAISSES SUR TOUTES LES JOURNEE BAISSIERES
            si Max_baisses<((ouverture-cloture)) alors Max_baisses=(ouverture-cloture)
            cpt_baisses=cpt_baisses+1
            finsi

            si cloture>ouverture alors
            total_hausses_euros=total_hausses_euros+(cloture-ouverture)//CALCUL DU TOTAL DES HAUSSES SUR TOUTES LES JOURNEE HAUSSIERES
            si Max_hausses<((cloture-ouverture)) alors Max_hausses=(cloture-ouverture)
            cpt_hausses=cpt_hausses+1
            finsi

            Si RANGHISTO=1 Alors mini_cour1=10000000

            Si Trade_en_cours=1 alors //N° 2A
            Nombre_jours_en_position=Nombre_jours_en_position+1 // compte le nombre de jours en postion globale

            Si Bas<mini_cour1 alors
            mini_cour1=Bas // pointe la plus basse position
            mini_date1$=DateHisto$
            finsi

            Si BAS<mini_cour2 alors
            mini_cour2=BAS // pointe la plus basse position
            mini_date2$=DateHisto$
            finsi

            Si haut>maxi_cour alors
            maxi_cour=haut // pointe la plus haute position
            maxi_date$=DateHisto$
            mini_cour2=10000000
            finsi
            finsi //FIN 2A


            Fleche_PERTE=0
            Fleche_Achat=0
            Fleche_Vente=0

            // COMPTEUR POUR FIN D'année pour ne pas acheter dans les 4 jours après bilan pouvant être encore sur la même année
            SI cpte_Bilan>=1 alors cpte_Bilan=cpte_Bilan+1
            si cpte_Bilan>4 alors cpte_Bilan=0
            // FIN COMPTEUR

            // Nouvelle annee
            si annee1<>annee alors
            Si listing=1 alors Afficher ""
            Si listing=1 alors Afficher annee
            annee1=annee
            finsi // Fin Nouvelle annee

            TOP_PROTECTION_JOUR=TOP_PROTECTION(1) //pour graphique tiret bleu = stop du jour, tiret rouge stop demain
            TOP_PROTECTION=MA_FORMULE_STOP_2020_A.MAGIC
            ma_clef_achats=MA_FORMULE_ACHAT_2020_A.MAGIC
            ma_clef_vente=MA_FORMULE_VENTE_2020_A.MAGIC//============================================================================================================================
            // DEBUT ACHAT
            //============================================================================================================================
            Si ma_clef_achats et Trade_en_cours < 1 ET cpte_Bilan=0 alors // N°2
            type_achat$=""
            Si MA_FORMULE_ACHAT_2020_a.MAGIC alors type_achat$=type_achat$ & " "
            Si MA_FORMULE_ACHAT_2020_a.MAGIC1 alors type_achat$=type_achat$ & " M1 "
            Si MA_FORMULE_ACHAT_2020_a.MAGIC2 alors type_achat$=type_achat$ & " M2 "
            Si MA_FORMULE_ACHAT_2020_a.MAGIC3 alors type_achat$=type_achat$ & " M3 "
            Si MA_FORMULE_ACHAT_2020_a.MAGIC4 alors type_achat$=type_achat$ & " M4 "
            Si MA_FORMULE_ACHAT_2020_a.MAGIC5 alors type_achat$=type_achat$ & " M5 "
            Si MA_FORMULE_ACHAT_2020_a.MAGIC6 alors type_achat$=type_achat$ & " M6 "
            Si MA_FORMULE_ACHAT_2020_a.MAGIC7 alors type_achat$=type_achat$ & " M7 "
            Si MA_FORMULE_ACHAT_2020_a.MAGIC8 alors type_achat$=type_achat$ & " M8 "
            Si MA_FORMULE_ACHAT_2020_a.MAGIC9 alors type_achat$=type_achat$ & " M9 "
            Si MA_FORMULE_ACHAT_2020_a.MAGIC10 alors type_achat$=type_achat$ & " M10 "
            Si MA_FORMULE_ACHAT_2020_a.MAGIC11 alors type_achat$=type_achat$ & " M11 "
            Si MA_FORMULE_ACHAT_2020_a.MAGIC12 alors type_achat$=type_achat$ & " M12 "
            Si MA_FORMULE_ACHAT_2020_a.MAGIC13 alors type_achat$=type_achat$ & " M13 "
            Si MA_FORMULE_ACHAT_2020_a.MAGIC14 alors type_achat$=type_achat$ & " M14 "
            Si MA_FORMULE_ACHAT_2020_a.MAGIC alors TM0=1
            Si MA_FORMULE_ACHAT_2020_a.MAGIC1 alors TM1=1
            Si MA_FORMULE_ACHAT_2020_a.MAGIC2 alors TM2=1
            Si MA_FORMULE_ACHAT_2020_a.MAGIC3 alors TM3=1
            Si MA_FORMULE_ACHAT_2020_a.MAGIC4 alors TM4=1
            Si MA_FORMULE_ACHAT_2020_a.MAGIC5 alors TM5=1
            Si MA_FORMULE_ACHAT_2020_a.MAGIC6 alors TM6=1
            Si MA_FORMULE_ACHAT_2020_a.MAGIC7 alors TM7=1
            Si MA_FORMULE_ACHAT_2020_a.MAGIC8 alors TM8=1
            Si MA_FORMULE_ACHAT_2020_a.MAGIC9 alors TM9=1
            Si MA_FORMULE_ACHAT_2020_a.MAGIC10 alors TM10=1
            Si MA_FORMULE_ACHAT_2020_a.MAGIC11 alors TM11=1
            Si MA_FORMULE_ACHAT_2020_a.MAGIC12 alors TM12=1
            Si MA_FORMULE_ACHAT_2020_a.MAGIC13 alors TM13=1
            Si MA_FORMULE_ACHAT_2020_a.MAGIC14 alors TM14=1
            Nombre_jours_du_trade=1
            Numero_operation=Numero_operation+1
            Si Sans_stop=1 alors TOP_PROTECTION=0.01 finsi
            cour_achat=Moment_Achat
            si cour_achat_premier=0 alors cour_achat_premier=Moment_Achat


            // CHANGEMENT DE MOIS
            Si Mois1<>MOIS alors
            Mois1=MOIS
            Si listing=1 alors Afficher "¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ "
            Gains_du_mois_euros=0
            finsi // Si Mois1<>MOIS alors

            Si listing=1 alors Afficher "N° " & Numero_operation & " Achat le " & DateHisto$ & " au cour de " & CTXT$(cour_achat,2) & " clés " & type_achat$
            Trade_en_cours=1
            Fleche_Achat=-1
            //============================================================================================================================
            // FIN DE DEBUT ACHAT
            //============================================================================================================================
            Sinon // N°2 SI PAS ACHAT pour ne pas revendre le même jour

            Si (TOP_PROTECTION_JOUR>=bas OU ma_clef_vente<>0) et Trade_en_cours=1 alors // N° 3
            //==================================================================================================
            // VENTE SUR SIGNAL STOP OU SIGNAL VENTE
            //==================================================================================================
            Si ma_clef_vente<>0 et Trade_en_cours=1 alors
            cour_vente=Moment_Vente
            type_vente$= " VENTE SUR SIGNAL "
            finsi

            //==================================================================================================
            // VENTE SUR PROTECTION STOP
            //==================================================================================================
            Si TOP_PROTECTION_JOUR>=bas et Trade_en_cours=1 alors // N°4
            cour_vente=TOP_PROTECTION(1) // VENTE SUR BAISSE TOP

            Si cour_vente>ouverture alors cour_vente=ouverture //--- Si ouverture sous top vente
            type_vente$= " TOP PROTECTION "
            finsi // Fin N°4

            //==================================================================================================
            // FIN INITIALISATION VENTE SUR SIGNAL et VENTE DE PROTECTION STOP
            //==================================================================================================
            Sinon // N°3
            //=================================================================================================================
            // VENTE POUR BILAN ANNUEL
            //=================================================================================================================
            Si (Bilan_annuel=1) ET (Trade_en_cours=1) ET (Mois=12 et jour>27 ) et cpte_Bilan=0 alors
            type_vente$= " BILAN ANNUEL "
            cour_vente=ouverture
            cpte_Bilan=1
            finsi


            finsi //N°2
            //=================================================================================================================
            // FIN OPERATION ACHAT OU VENTE ou vente ou stop
            //=================================================================================================================

            Si Trade_en_cours=1 alors Nombre_jours_du_trade=Nombre_jours_du_trade+1

            //=================================================================================================================
            // Calcul apres operations Vente ou bilan ou vente sur stop
            //=================================================================================================================
            Si (Blan_annuel=1 ET Trade_en_cours=1 ET Mois=12 et jour>27 et cpte_Bilan=1) ou (Trade_en_cours=1 ET TOP_PROTECTION(1)>=bas) ou ( ma_clef_vente<>0 et Trade_en_cours=1) alors // N° 5
            Numero_operation=Numero_operation+1

            gain_operation_euros=Arrondi(((cour_vente-cour_achat)-(cour_vente*frais)),2)


            Gains_du_mois_euros=Gains_du_mois_euros+gain_operation_euros
            Resultat_cumul_global_euros=Resultat_cumul_global_euros+gain_operation_euros

            Si TM0=1 alors Resultat_cumul_global_euros_M01=Resultat_cumul_global_euros_M01+gain_operation_euros
            Si TM1=1 alors Resultat_cumul_global_euros_M1=Resultat_cumul_global_euros_M1+gain_operation_euros
            Si TM2=1 alors Resultat_cumul_global_euros_M2=Resultat_cumul_global_euros_M2+gain_operation_euros
            Si TM3=1 alors Resultat_cumul_global_euros_M3=Resultat_cumul_global_euros_M3+gain_operation_euros
            Si TM4=1 alors Resultat_cumul_global_euros_M4=Resultat_cumul_global_euros_M4+gain_operation_euros
            Si TM5=1 alors Resultat_cumul_global_euros_M5=Resultat_cumul_global_euros_M5+gain_operation_euros
            Si TM6=1 alors Resultat_cumul_global_euros_M6=Resultat_cumul_global_euros_M6+gain_operation_euros
            Si TM7=1 alors Resultat_cumul_global_euros_M7=Resultat_cumul_global_euros_M7+gain_operation_euros
            Si TM8=1 alors Resultat_cumul_global_euros_M8=Resultat_cumul_global_euros_M8+gain_operation_euros
            Si TM9=1 alors Resultat_cumul_global_euros_M9=Resultat_cumul_global_euros_M9+gain_operation_euros
            Si TM10=1 alors Resultat_cumul_global_euros_M10=Resultat_cumul_global_euros_M10+gain_operation_euros
            Si TM11=1 alors Resultat_cumul_global_euros_M11=Resultat_cumul_global_euros_M11+gain_operation_euros
            Si TM12=1 alors Resultat_cumul_global_euros_M12=Resultat_cumul_global_euros_M12+gain_operation_euros
            Si TM13=1 alors Resultat_cumul_global_euros_M13=Resultat_cumul_global_euros_M13+gain_operation_euros
            Si TM14=1 alors Resultat_cumul_global_euros_M14=Resultat_cumul_global_euros_M14+gain_operation_euros
            TM0=0
            TM1=0
            TM2=0
            TM3=0
            TM4=0
            TM5=0
            TM6=0
            TM7=0
            TM8=0
            TM9=0
            TM10=0
            TM11=0
            TM12=0
            TM13=0
            TM14=0

            Si gain_operation_euros>0 alors
            total_gains_euros=total_gains_euros+((cour_vente-cour_achat)-(cour_vente*frais))
            Fleche_Vente=-1
            N_gagnant=N_gagnant+1
            finsi

            Si gain_operation_euros<0 alors
            total_perte_euros=total_perte_euros+((cour_achat-cour_vente)+(cour_vente*frais))
            Fleche_PERTE=-1
            N_perte=N_PERTE+1
            finsi // Si gain_operation_euros



            Si listing=1 alors Afficher "N° " & Numero_operation & type_vente$ & " le " & DateHisto$ & " au cour de " & CTXT$(cour_vente,2) & "€ BRUT:" & CTXT$(ARRONDI(cour_vente,2)-ARRONDI(cour_achat,2),2) & "€" & " Frais : " & CTXT$(frais*100,2) & "% soit: " & CTXT$(gain_operation_euros,2) & "€ (" & Nombre_jours_du_trade & " J. d'ouv) | cumul du " & mois1 & "° mois " & CTXT$(Gains_du_mois_euros,2) & "€ | cumul total : " & CTXT$(Resultat_cumul_global_euros,2) & " euros " finsi
            Si listing=1 ET (Trade_en_cours=1 ET Bilan_annuel=1 ET Mois=12 et jour>27 ) alors Afficher "¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ " finsi
            Si listing=1 alors Afficher ""
            Trade_en_cours=0

            si top_perte_operation_euros>gain_operation_euros alors
            top_perte_operation_euros=gain_operation_euros
            top_perte_date$=DateHisto$//jour & "/" & mois & "/" & annee
            finsi

            si top_gain_operation_euros<gain_operation_euros alors
            top_gain_operation_euros=gain_operation_euros
            top_gain_date$=DateHisto$// jour & "/" & mois & "/" & annee
            finsi

            finsi //N°5 Si (Trade_en_cours=1 ET Bilan_annuel=1 ET Mois=12 et jour>27 ) ou (Trade_en_cours=1 ET TOP_PROTECTION(1)>=bas) ou ( ma_clef_vente<>0 et Trade_en_cours=1)
            //=================================================================================================================
            // FIN Calcul apres operations Vente ou bilan ou vente sur stop
            //=================================================================================================================

            finsi // FIN N°3
            //==================================================================================================
            // VENTE SUR SIGNAL STOP OU SIGNAL VENTE
            //==================================================================================================




            Max_drawdown_euros=((cour_achat_premier-mini_cour1)/cour_achat_premier)*100 // perte maxi en % sur la première postion
            meilleure_position_euros=((maxi_cour-cour_achat_premier)/cour_achat_premier)*100 // Meilleure position, meilleur gain possible en %
            Max_drawdown_mp_euros=((maxi_cour-mini_cour2)/maxi_cour)*100 // perte maxi en % sur la Meilleure position
            gap_calcul=ARRONDI((((cloture(1)-ouverture)/cloture)*100),2)
            Si gap_calcul<-Gap_alarme alors Gap_B_excessifs$=Gap_B_excessifs$ & "| le " & jour & "/" & mois & "/" & annee & " de " & gap_calcul & " % |"
            Si gap_calcul>Gap_alarme alors Gap_H_excessifs$=Gap_H_excessifs$ & "| le " & jour & "/" & mois & "/" & annee & " de " & gap_calcul & " % |"



            Si RANGHISTO=FINHISTO alors //N°6 si dernier passage+ RESULTATS (FIN DE BOUCLE SUR LA DUREE DES ACTIONS)
            //================================================================================================
            // RESULTATS
            //================================================================================================

            Afficher ""
            Afficher "================================================================================================"
            Afficher " RESULTATS sur l'action "& NomAction$ & " code: " & CodeAction$
            Afficher ""
            Afficher " Situation au " & DateHisto$ &" sur " & Duree & " Jours de cotations, " & Entier(Duree/255) & " années environ"
            Afficher "================================================================================================"
            Afficher ""
            Resultat_cumul_global_p_cent=(Resultat_cumul_global_euros/COUR_ACHAT_PREMIER)*100
            SI ARRONDI(((( Resultat_cumul_global_p_cent)/Duree)*252),2)> Seuil_gain_mini alors
            Afficher " <<<<<< " & ARRONDI(((( Resultat_cumul_global_p_cent)/Duree)*252),2) & " % par an >>>>>> Sans réemploi dans les périodes liquides "
            sinon
            Afficher "************************* <<<<<< " & ARRONDI(((( Resultat_cumul_global_p_cent)/Duree)*252),2) & " % par an >>>>>> ******** HORS NORMES ACCEPTABLES DE " & Seuil_gain_mini & " %"
            finsi

            Afficher "____________________________________________________________________________________________________"
            Afficher ""
            Afficher " <<<<<< " & ARRONDI(((( Resultat_cumul_global_p_cent)/Nombre_jours_en_position)*252),2) & " % par an >>>>>> si investi sur action à rentabilité équivalente dans les périodes liquides "
            Afficher ""
            Afficher "================================================================================================"
            Afficher" |____ Comparatif long terme ___|"
            Afficher ""
            AFFICHER "Sur la moyenne " & duree_moyenne & " jours du début : " & ARRONDI(calcul_moyenne/duree_moyenne,0) & "€ et la moyenne " & duree_moyenne & " jours de fin : " & ARRONDI(MOYENNE(CLOTURE,200),0)& "€"
            gain_sur_moyenne=(ARRONDI(MOYENNE(CLOTURE,200),0)-ARRONDI(calcul_moyenne/duree_moyenne,0))/ARRONDI(calcul_moyenne/duree_moyenne,0)*100
            si gain_sur_moyenne>0 ALORS Afficher "sur un investissement long terme le résultat est de >>> " & arrondi(gain_sur_moyenne,2) & "% <<< sur la durée totale et " & arrondi(((gain_sur_moyenne/Duree)*252),2) & "% par an"
            si gain_sur_moyenne>Resultat_cumul_global_p_cent ALORS Afficher "***** LES FORMULES NE SONT PAS BONNES, " & ENTIER(Numero_operation/2) & " trades pour un résultat inférieur à l'évolution normale de l'action"
            Afficher ""
            Afficher "================================================================================================"
            Afficher" |____ Durée des opérations ___|"
            Afficher ""
            Afficher "Nombre d'opérations : " & ENTIER(Numero_operation/2)
            Afficher "Durée moyenne des opérations : " & ARRONDI((Nombre_jours_en_position/(Numero_operation/2)),0) & " jours"
            Afficher "Liquide entre chaque opération : " & ARRONDI((Duree-Nombre_jours_en_position)/(N_perte+N_gagnant),0) & " jours"
            Afficher "____________________________________________________________________________________________________"
            Afficher " |____ Ratio nombre d'opération ___|"
            Afficher ""
            Afficher "Nombre d'opérations gagnantes : " & N_gagnant & " Ratio : " & ARRONDI(N_gagnant/(N_perte+N_gagnant)*100,0) & " % des opérations, total des gains : " & ARRONDI(total_gains_euros,2)& "€ " & ARRONDI((total_gains_euros/N_gagnant),2) & " € gains par trade "
            Afficher "Nombre d'opérations perdantes : " & N_perte & " Ratio : " & ARRONDI(N_perte/(N_perte+N_gagnant)*100,0) & " % des opérations, total des pertes : " & ARRONDI((total_perte_euros),2) & "€ " & ARRONDI((total_perte_euros/N_perte),2) & " € pertes par trade "
            Afficher ""
            Afficher "____________________________________________________________________________________________________"
            Afficher " |____ Gains ___|"
            Afficher ""
            Afficher "Résultat : " & ARRONDI(Resultat_cumul_global_p_cent,2) & " % sur " & Duree & " Jours de cotations, " & Entier(Duree/255) & " années environ" & " Solde de trésorie " & ARRONDI(total_gains_euros-total_perte_euros,0) & "€"
            Afficher "GAINS : " & ARRONDI(total_gains_euros,2)& "€ "& ARRONDI((total_gains_euros/N_gagnant),2) & " € gains par trade Ratio :" & ARRONDI((( total_gains_euros/(total_perte_euros+total_gains_euros))*100),2) & " % des sommes sont des gains"
            Afficher "Pertes : " & ARRONDI((total_perte_euros),2) & "€ " & ARRONDI((total_perte_euros/N_perte),2) & " € pertes par trade Ratio :" & ARRONDI((( (ABSOLU(-total_perte_euros))/((total_perte_euros+total_gains_euros)))*100),2) & " % des sommes sont des pertes"
            Afficher ""

            Si Resultat_cumul_global_euros>0 alors
            Afficher "GAINS Brut : " & ARRONDI(Resultat_cumul_global_p_cent,2) & " % sur " & Nombre_jours_en_position & " jours en Position soit sur " & Duree & " jours d'ouverture : " & ARRONDI((Resultat_cumul_global_p_cent/Nombre_jours_en_position)*Duree,2) & "%"
            Afficher "GAINS brut : " & ARRONDI(Resultat_cumul_global_p_cent,2) & " % sur " & Nombre_jours_en_position & " jours en Position soit sur 21 jours d'ouverture : " & ARRONDI(((( Resultat_cumul_global_p_cent)/Nombre_jours_en_position)*21),2) & " % par mois"
            Afficher "GAINS brut : " & ARRONDI(Resultat_cumul_global_p_cent,2) & " % sur " & Nombre_jours_en_position & " jours en Position soit sur 252 jours d'ouverture : " & ARRONDI(((( Resultat_cumul_global_p_cent)/Nombre_jours_en_position)*252),2) & " % par an"
            Afficher "GAINS brut : " & ARRONDI(Resultat_cumul_global_p_cent,2) & " % sur " & Nombre_jours_en_position & " jours en Position soit sur 1 jours d'ouverture : " & ARRONDI(((( Resultat_cumul_global_p_cent)/Nombre_jours_en_position)),2) & " % par jour"
            Afficher "____________________________________________________________________________________________________"
            Afficher " |____ Pour en vivre avec un revenu ___|"
            Afficher ""
            Afficher "Un capital de " & ARRONDI((1000/21)/((Resultat_cumul_global_p_cent/Nombre_jours_en_position)/100),0) & " euros nécessaire pour un résultat 1000 euros/mois Position 100%, avant impôts"
            Afficher "Un capital de " & ARRONDI((1000/21)/((Resultat_cumul_global_p_cent/Duree)/100),0) & " euros nécessaire pour un résultat 1000 euros/mois Position normale, avant impôts"
            Sinon
            Afficher "Pertes sur " & Duree & " jours : " & ARRONDI((( Resultat_cumul_global_p_cent)),2) & " % brut, sans réemploi ****** HORS NORMES ACCEPTABLES "
            Afficher "Pertes par mois : " & ARRONDI((( Resultat_cumul_global_p_cent/Duree)*21),2) & " % sans réemploi ****** HORS NORMES ACCEPTABLES "
            Afficher "Pertes par mois : " & ARRONDI((( Resultat_cumul_global_p_cent/Nombre_jours_en_position)*21),2) & " % avec réemploi ****** HORS NORMES ACCEPTABLES "
            Afficher "Pertes par an : " & ARRONDI((( Resultat_cumul_global_p_cent/Duree)*252),2) & " % sans réemploi ****** HORS NORMES ACCEPTABLES "
            Afficher "Pertes par an : " & ARRONDI((( Resultat_cumul_global_p_cent/Nombre_jours_en_position)*252),2) & " % avec réemploi ****** HORS NORMES ACCEPTABLES "
            finsi //Si Resultat_cumul_global_euros

            Afficher "____________________________________________________________________________________________________"
            Afficher " |____ Gestion des risques ___|"
            Afficher ""
            Afficher "Meilleure position " & maxi_cour & " € le " & maxi_date$ & " de " & ARRONDI(meilleure_position_euros,2) & " % sur capital investi de " & cour_achat_premier & " € au premier trade "

            si ARRONDI(Max_drawdown_euros,2)<Max_dro alors
            Afficher "Plus mauvaise position " & mini_cour1 & " € le " & mini_date1$ & " de " & ARRONDI(Max_drawdown_euros,2) & " % sur capital investi de " & cour_achat_premier & " € au premier trade "
            sinon
            Afficher "********* Perte position " & mini_cour1 & " € le " & mini_date1$ & " de " & ARRONDI(Max_drawdown_euros,2) & " % sur capital investi de " & cour_achat_premier & " € au premier trade ****** HORS NORMES ACCEPTABLES DE " & Max_dro & " %"
            finsi

            si Max_drawdown_mp_euros<Max_dro alors
            Afficher "Perte sur position " & mini_cour2 & " € le " & mini_date2$ & " de " & ARRONDI(Max_drawdown_mp_euros,2) & " % suite à meilleure position " & maxi_cour & " € le " & maxi_date$
            sinon
            Afficher "********* Perte sur position " & mini_cour2 & " € le " & mini_date2$ & " de " & ARRONDI(Max_drawdown_mp_euros,2) & " % suite à meilleure position " & maxi_cour & " € le " & maxi_date$ & " ****** HORS NORMES ACCEPTABLES DE "& Max_dro & " %"
            finsi
            Afficher "____________________________________________________________________________________________________"
            Afficher " |____ Gestion des Gains et Pertes extrêmes pour contrôle ___|"
            Afficher ""

            SI ARRONDI((top_gain_operation_euros),2)<15 alors
            Afficher "Top des gains sur 1 trade le " & top_gain_date$ & " de " & ARRONDI((top_gain_operation_euros),2) & " %"
            sinon
            Afficher "******* A vérifier ce qui justifie et peut changer le résultat top des gains sur 1 trade le " & top_gain_date$ & " de " & ARRONDI((top_gain_operation_euros),2) & " €"
            finsi

            SI ARRONDI((top_perte_operation_euros),2)>-15 alors
            Afficher "Top des pertes sur 1 trade le " & top_perte_date$ & " de " & ARRONDI((top_perte_operation_euros),2) & " %"
            sinon
            Afficher "******* A vérifier ce qui justifie et peut changer le résultat top des pertes sur 1 trade le " & top_perte_date$ & " de " & ARRONDI((top_perte_operation_euros),2) & " €"
            finsi

            Afficher "____________________________________________________________________________________________________"
            Afficher " |____ Gestion des GAPS anormaux ___|"
            Afficher ""
            SI NBCAR(Gap_H_excessifs$)>2 alors Afficher "*******Gap à la hausse douteux à vérifier " & Gap_H_excessifs$ finsi
            SI NBCAR(Gap_B_excessifs$)>2 alors Afficher "*******Gap à la baisse douteux à vérifier " & Gap_B_excessifs$ finsi
            Afficher "____________________________________________________________________________________________________"
            Afficher ""
            AFFICHER "Hausse moyenne " & ARRONDI((total_hausses_euros/cpt_hausses),2) & " € Jour Hausse maximum " & ARRONDI((Max_hausses),2) & " € en 1 Jour"
            AFFICHER "Baisse moyenne " & ARRONDI((total_baisses_euros/cpt_baisses),2) & " € Jour Baisse maximum " & ARRONDI((Max_baisses),2) & " € en 1 Jour"
            Afficher ""
            Afficher "================================================================================================"
            Afficher " ========== Top protection DEMAIN " & arrondi(TOP_PROTECTION,2) & " à " & arrondi((((TOP_PROTECTION-cloture)/CLOTURE)*100),2) & " % de la cloture (" & cloture & ")"
            Afficher "================================================================================================"
            Afficher ""
            Afficher "____________________________________________________________________________________________________"
            Afficher " |____ Récpatitulatif rapide pour coller sur l'indicateur ___|"
            Afficher ""
            Afficher ARRONDI(((( Resultat_cumul_global_p_cent)/Duree)*252),2) &"% " & ARRONDI(((( Resultat_cumul_global_p_cent)/Nombre_jours_en_position)*252),2) & "% stop à " & ARRONDI(((Cloture/MA_FORMULE_STOP_2020_A.magic)*100)-100,2)& " % " & ENTIER(Numero_operation/2) & " Op. de " & ARRONDI((Nombre_jours_en_position/(Numero_operation/2)),0) & " j. " & ARRONDI((Duree-Nombre_jours_en_position)/(N_perte+N_gagnant),0) & "J. liquide par OP"

            Afficher ""
            Afficher "____________________________________________________________________________________________________"
            Afficher ""
            Afficher ""
            finsi // FIN N°6 si dernier passage+ RESULTATS (FIN DE BOUCLE SUR LA DUREE DES ACTIONS)
            finsi // FIN N°1 Si RangHisto
            Max imum de gains et Min imum de pertes

            Commentaire


            • le fichier zip est ici : http://didier.guillemot.free.fr/grap...CKTEST2020.zip
              Version actualisée au 12/8/2020 11H
              Max imum de gains et Min imum de pertes

              Commentaire


              • Bonjour Didier,

                Chapeau pour ton programme de backtest! Il esr "monumental" et je devrai passer sans doute du temps pour tout comprendre.
                Passage rapide sur le forum depuis l'Helvétie où je suis en vacances.
                Pour ce qui concerne ta remarque au sujet des règles, perso j'ai créé plusieurs dossiers" et je m'en sort pas trop mal.



                Je mets dans" RegleIndic" les indicateurs qui sont au point et que j'utilise.
                J'ai créé plusieurs autres dossiers dans "Base", car mon dossier "RegleIndic" a été très vite très occupé et comme GrapheAT Pro charge son contenu au démarrage, inutile de charger des indicateurs qui seront inutilisés.
                Le dossier "RegleIndic_0" stocke les indicateurs en cours d'écriture ou de modifs que je rebalance dans "RegleIndic" lorsqu'ils sont à vérifier in situ.
                Les dossiers "RegleIndic_1" et "RegleIndic_2' sont des dossiers qui contiennent d'anciens indicateurs que je n'utilise plus couramment mais qui peuvent à l'occasion repasser dans "RegleIndic".
                Bon maintenant chacun fait comme il veut, comme il peut.
                Bon dimanche et encore merci pour ton programme de backtest que je ne manquerai pas de tester.

                Cordialement

                Commentaire


                • La version qui ne repeint pas le passé pour tester si vous le souhaitez, je l'ai commenté et changé les variables pour mieux comprendre surtout pour les non spécialistes :

                  //===============
                  // SUPER_TREND_OSC_NRP // NRP=ne repeint pas le passé
                  //===============


                  //Ecart_entre_moyennes
                  //
                  Moyenne_de_P1_jours=Moyenne((Haut+Bas+Cloture)/3,P1)
                  Ecart_entre_moyennes(0)=((Haut+Bas+Cloture)/3-Moyenne_de_P1_jours) // Ecart entre la moyenne jour et la moyenne de P1 jours

                  //ATR5
                  //
                  Tr5(0)=MaxVal(Haut,Cloture(1))-MinVal(Bas,Cloture(1)) // ecart entre (Maxi haut du jour ou cloture de la veille) - (plus bas du jour ou cloture de la veille)
                  ATR5=Moyenne(Tr5,P2) // MOYENNE DE L'ecart DE P2 JOURS

                  //Règles
                  // ici on repeind le passé
                  //Si Ecart_entre_moyennes(0)>0 ET Ecart_entre_moyennes(1)<0 Alors Trait_vert_achat(1)=Trait_rouge_vente(1)// ligne annulée car on repeint la couleur de la veille d'achat à vente
                  //Si Ecart_entre_moyennes(0)<0 ET Ecart_entre_moyennes(1)>0 Alors Trait_rouge_vente(1)=Trait_vert_achat(1)// ligne annulée caron repeint la couleur de la veille de vente à achat
                  //================================


                  Si Ecart_entre_moyennes>0
                  Alors
                  Trait_vert_achat=Bas-ATR5
                  Si Trait_vert_achat<Trait_vert_achat(1) Alors Trait_vert_achat=Trait_vert_achat(1) // on ne repeint pas le passé ici, on prend le niveau de la veille
                  FinSi


                  Si Ecart_entre_moyennes<0
                  Alors
                  Trait_rouge_vente=haut+ATR5
                  Si Trait_rouge_vente>Trait_rouge_vente(1) et Trait_rouge_vente(1)>0 Alors Trait_rouge_vente=Trait_rouge_vente(1) // on ne repeint pas le passé ici, on prend le niveau de la veille
                  Finsi

                  //Fin du Code

                  Il faudra changer le nom des 2 courbes en conséquence:
                  Trait_vert_achat
                  Trait_rouge_vente

                  et dans
                  MA_FORMULE_ACHAT_2020_a mettre : Magic=S_TREND_OSC_ORIGINE_NRP.Trait_vert_achat

                  MA_FORMULE_VENTE_2020_a mettre : Magic=S_TREND_OSC_ORIGINE_NRP.Trait_rouge_vente
                  et les autres MAGIC à 0

                  Ceci confirme mes propos, repeindre le passé avec les dernières données pour mieux juger de l'avenir c'est cohérent, et ne remet pas en cause ces indicateurs, mais ne surtout pas les utiliser en pensant qu'ils donnent des signaux, ils ne donnent pas de signaux mais plus des tendances.
                  Il serait judicieux d'ailleurs d'avoir une fin de nom des indicateurs comme MACD_NRP ou SUPER_TREND_OSC_RP ce qui d'un simple coup d'oeil permet de savoir si c'est un indicateur de signal ou pas. Bon je ne vais pas refaire le monde ce soir !

                  Bonne soirée, et bonnes analyses
                  Max imum de gains et Min imum de pertes

                  Commentaire


                  • Petit programme réduit, qui est extrait malheureusement d'un gros, et qui m'a fait perdre beaucoup de temps. Si vous ne mettez pas "finsi" ou la variable bidon et bien le programme bug en demandant un "finsi" étrange, mais si ça peut vous faire gagner du temps !!
                    si l'on place un finsi avant le sinon ça ne fonctionne pas (logique il faut vraiment le mettre en fin de ligne alors que ce n'est pas normalement utile compte tenu que la condition comporte une suite au mot "Alors" sur la même ligne.
                    //=============================
                    // BUG ETRANGE
                    //=============================
                    Si bidon=0 alors // N°2
                    a=0
                    Si Bidon=1 alors A=2 // Finsi //ici ou variable bidon
                    //variable_bidon_anti_bug=0
                    Sinon // N°2
                    bidon=0 //variable pour éviter la condition vide
                    finsi //N°2
                    Max imum de gains et Min imum de pertes

                    Commentaire


                    • Envoyé par max_et_min Voir le message
                      le fichier zip est ici : http://didier.guillemot.free.fr/grap...CKTEST2020.zip
                      Version actualisée au 12/8/2020 11H
                      Petite question: comment fait-on pour utiliser ton fichier dans graph at pro ?
                      Faut-il le dézipper quelque part (où ?)
                      ou faut il un logiciel tiers ?
                      Merci d'avance

                      Commentaire


                      • Bonjour bambi,
                        2 solutions soit le dézipper dans le dossier de téléchargement et ensuite copier le dossier complet dans C:\Program Files (x86)\Graphe AT Pro\Base\RegleIndic
                        soit le dézipper directement dans le dossier ci-dessus.
                        Moi j'aime mieux en 2 étapes pour plus de sécurité et de maîtrise, mais ça !! c'est mon aspect "Sécurité" parfois excessif !
                        Attention j'ai changé la version directement à la place de l'ancienne il y a 2 jours, (l'ancienne utilisé les pourcentages, et les additionnait sur 1 an pas très grave, sur 30 ans c'était pas la bonne façon de faire.
                        Bons testes et bonne soirée
                        Max imum de gains et Min imum de pertes

                        Commentaire


                        • Bonne soirée aussi et bon week-end

                          Commentaire


                          • Bonsoir Didier,

                            Un petit passage sur le forum par temps de pluie en Helvétie...

                            //====================
                            // BUGs moins ETRANGEs
                            //====================

                            1- CAS SANS SINON

                            Si bidon=0 Alors a$="çà gaze même sans FinSi"

                            Si bidon=0
                            Alors a$="çà gaze même sans FinSi"

                            Si bidon=0 Alors
                            a$="çà gaze mais avec un FinSi"

                            Si bidon=0
                            Alors
                            a$="çà gaze mais avec un FinSi"


                            CONCLUSION :
                            Si l'action qui suit le Alors en est séparée sur une autre ligne,
                            le FinSi est obligatoire
                            (il pourrait être sur la même ligne que le Alors mais ce n'est pas l'habitude).


                            2- CAS AVEC SINON

                            Si bidon=0
                            Alors a$="çà gaze"
                            Sinon a$="çà gaze aussi" //pas de FinSi attendu

                            Si bidon=0
                            Alors
                            a$="çà gaze"
                            Sinon b$="çà gaze aussi" //pas de FinSi attendu

                            Si bidon=0
                            Alors a$="çà gaze"
                            Sinon
                            b$="çà ne gaze pas" //FinSi attendu

                            Si bidon=0
                            Alors
                            a$="çà gaze"
                            Sinon
                            b$="çà ne gaze pas" //FinSi attendu


                            CONCLUSION :
                            Si l'action qui suit le Sinon en est séparée,, il faut un FinSi quelle que soit la position
                            de l'action qui suit le Alors, séparée ou non sur une autre ligne.



                            REMARQUE : on peut écrire aussi dans tous les cas la condition
                            sous le si, mais çà n'est pas l'habitude.

                            Bon week end.

                            Commentaire


                            • Bonsoir Daniel,
                              Je vois que tu maîtrises le sujet des conditions, mon exposé sur le sujet est très très loin d'être incontournable (la preuve dans mon commentaire), juste une perte de temps à trouver le finsi qui me manquait dans mon roman de ligne de code.

                              Et tu commences à me connaitre ! Même si ton exposé est parfait, je reste perplexe (10 secondes pas plus) . Et voici pourquoi :
                              Si je prend ta dernière formule qui est parfaite :
                              //==========================
                              Si bidon=0
                              Alors
                              a$="çà gaze"
                              Sinon
                              b$="çà ne gaze pas" //FinSi attendu
                              finsi

                              //==========================

                              Ensuite, je prend ta première formule parfaite :

                              Si bidon=0 Alors a$="çà gaze même sans FinSi"

                              et que je place cette ligne dans mon code, le mixte ne fonctionne plus :

                              Si bidon=0
                              Alors
                              a$="çà gaze"

                              Si bidon=0 Alors a$="çà gaze même sans FinSi"
                              Sinon
                              b$="çà ne gaze pas" //FinSi attendu
                              finsi


                              ça non plus:
                              Si bidon=0
                              Alors
                              a$="çà gaze"
                              Si bidon=0

                              Alors a$="çà gaze même sans FinSi"
                              finsi
                              Sinon
                              a$="çà ne gaze pas" //FinSi attendu
                              Finsi


                              à l'inverse, en rajoutant une variable, ça c'est bon:
                              //====================================================
                              Si bidon=0
                              Alors
                              a$="çà gaze"
                              Si bidon=0
                              Alors a$="çà gaze même sans FinSi"
                              a$="çà gaze"
                              Sinon
                              a$="çà ne gaze pas" //FinSi attendu
                              Finsi
                              //====================================================
                              ou en rajoutant un finsi en fin de ligne :

                              Si bidon=0
                              Alors
                              a$="çà gaze"
                              Si bidon=0
                              Alors a$="çà gaze même sans FinSi" FINSI
                              Sinon
                              a$="çà ne gaze pas" //FinSi attendu
                              Finsi


                              Conclusion il a une règle qui m'échappe, mais c'est pas grave, j'avance sur mon projet.
                              2 solutions
                              a) je n'ai rien compris aux conditions
                              b) c'est un petit bug non incontournable et même avec de gros capitaux et des "têtes" de programmeurs Windows et bien d'autres ont des bugs dans leurs programmes. (et moi aussi ! )
                              Bonne soirée Daniel et rassures toi la pluie n'est pas qu'en Helvétie, hier soir ça claqué très fort ici.
                              Max imum de gains et Min imum de pertes

                              Commentaire


                              • Bonjour max_et_min

                                Quand tu parles de repeindre le passé, je pense que tu considères essentiellement les signaux donnés par les règles de décision.
                                Est-ce que tu veux dire par là que le signal de décision d'achat ou de vente a besoin d'une confirmation qui arrive le lendemain et peut modifier le signal a posteriori ?

                                Merci aussi pour ton travail de restauration et d'indexation du contenu de la file. Avec ça, c'est vraiment très facile de retrouver les différentes contributions sur un indicateur.

                                Caramba! Encore raté ...

                                Commentaire

                                Chargement...
                                X