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

  • bambi
    a répondu
    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

    Laisser un commentaire:


  • max_et_min
    a répondu
    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

    Laisser un commentaire:


  • max_et_min
    a répondu
    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

    Laisser un commentaire:


  • smallcaps90
    a répondu
    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

    Laisser un commentaire:


  • max_et_min
    a répondu
    le fichier zip est ici : http://didier.guillemot.free.fr/grap...CKTEST2020.zip
    Version actualisée au 12/8/2020 11H

    Laisser un commentaire:


  • max_et_min
    a répondu
    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

    Laisser un commentaire:


  • max_et_min
    a répondu
    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

    Laisser un commentaire:


  • smallcaps90
    a répondu
    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.

    Laisser un commentaire:


  • smallcaps90
    a répondu
    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.

    Laisser un commentaire:


  • max_et_min
    a répondu
    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)

    Laisser un commentaire:


  • smallcaps90
    a répondu
    Bonsoir phg,

    Merci pour tes nouvelles du front...des vacances. Chanceux qui plane en Pyrénées! Perso je partirai demain pour une quinzaine en Suisse...sans confinement hein!
    Où en es-tu de l'utilisation de la SSA avec Metatrader? T'en serais-tu éloigné?
    Le PGO? Ce n'est finalement qu'une autre façon de représenter les Bollinger's sous les cours donc rien de bien nouveau à en attendre.
    Le WTO par contre, çà fonctionne bien.
    Pour le moment ici nous sommes toujours sur les filtres/moyennes que Ramon décortique "spectralement". Et c'est super intéressant.
    Rien d'étonnant que Parisboy y mette du sien aussi.

    Je te souhaite bon séjour sans écran.

    Laisser un commentaire:


  • phg
    a répondu
    Envoyé par smallcaps90 Voir le message
    Bonsoir Ramon...et Parisboy,

    Je réponds à ton message d'il y a quelques jours. J'étais absent ce week end et ma réponse date un peu excuse-m'en.
    J'aime beaucoup ta métaphore du lissage à l'enduit pour imager ce qu'est le twicing de Tukey.

    Je n'avais pas vu que Jurik utilisait le mode twicing en catimini! Après tout il en avait le droit et il n'a pas été le seul...
    Je ne doutais pas que tu connaissais la Hull moving average de Alan Hull, à ne pas confondre avec la moyenne de Uhl (du prof Andréa Uhl de l'Université de Salzburg) qui n'est pas mal non plus. A poster...
    Pendant que nous y sommes, on peut citer aussi la moyenne de 3ème génération de l'allemand Dürchner. Je la posterai aussi...car c'est à ma connaissance une "vraie" zéro lag...quasiment.
    Pour revenir à la moyenne de Hull, le schéma bloc de la figure 9 de l'article :
    "Reduced-Delay Data Smoothing" de R.Lyons que j'ai cité dans mon post sur le twicing est très explicite dans sa conception.



    On y voit bien les 3 sous-filtres qui la composent :
    - un filtre composé d'une moyenne mobile simple( N périodes de calcul),
    - un filtre moyenne simple ( N/2 périodes de calcul) dont la sortie est multipliée par 2 et dont ce résultat est retranché de celui du premier sous filtre,
    - un filtre moyenne mobile simple de période racine carrée de N qui reçoit le résultat des deux premiers filtres agencés comme dit.
    Je ne parle pas des coefficients qui sont appliqués aux différents sous-filtres.
    Elle est originale la moyenne de Hull! Comment Alan Hull a-t-il procédé pour trouver cette petite merveille? Difficile de le savoir.

    Oui, pour réduire le lag d'un lissage tout en ayant un "bon lissage" (il existe des critères pour l'apprécier), on peut utiliser des techniques un peu semblables.
    Un article présente 3 méthodes pour débruiter des image 2D mais qui les développe avec des vecteurs, donc 1D, pour les explications :
    "A General Iterative Regularization Framework for Image Denoising3 Par Michael Charest et d'autres
    téléchargeable sur citeseer.ist.edu
    Le twicing de Tukey y est présenté (la 2ème dans le développement de l'article).
    Celle proposée par les auteurs( la 3ème) semble intéressante aussi mais je n'ai pas encore eu le temps de la tester.
    A voir aussi comme tu le conseilles, la "SSA des résidus"...pas le temps encore.

    Oui la ULLMA m'intéresse toujours et je souhaitais un trancodage du programme pour Metatrader en un peudo-langage qui serait facilement transposable sur GAP. Merci à qui voudrait bien le faire.
    Dans le même domaine, Mladic encense une autre moyenne à l'occasion d'un post sur le PGO (Pretty good Oscillator de M. Johnson, une vision différente des bandes de Bollinger). Ce PGO n'a jamais été posté ici, c'est un indicateur sympa....encore plus sympa une fois "twicingué". Mladic lisse ce PGO, qui est souvent bruyant, avec une moyenne due à Tim Morris dont j'ai le programme pour Metatrader. Encore un à trancoder...Je sais que notre ami phg utilise (utilisait?) le PGO.

    Enfin dans le domaine des FIR, n'oublions pas Ehlers qui, bien que mis de côté pour ne pas dire exclu, par les membres de la file "Optimized Trend Trading" (que tu analyses sur ForexFactory), Ehlers disais-je, proposait : "Zero-Lag Data Smoothers" un article en juillet 2002 sur TASC, dispo sur le web. Dans cet article il expliquait simplement quelques notions sur la théorie du signal et développait son filtre/moyenne préféré à l'époque, car depuis il a fait du chemin... C'est un FIR sans twicing, à quasiment zero lag d'ordre 6 (7 coefficients).
    Il n'a pas été posté ici sur l'ancien site. Je vous en donne l'équation :

    Filtre_Zero_Lag = (Price+3.5*Price[1]+4.5*Price[2]+3*Price[3]+0.5*Price[4]-0.5*Price[5]-1.5*Price[6])/10.5

    On peut choisir pour la variable d'entrée "Price" pratiquement ce que l'on veut : des éléments des cours, des indicateurs...

    Merci aussi pour ton étude fréquentielle des résidus "hurstien" et "non centrés" de la TMA. Très intéressant sujet.

    Merci aussi à Parisboy pour ses extraits du bouquin de Hurst, une vue autre mais du même sujet..
    Il y aurait encore beaucoup de choses à dire...Ce sera pour une autre fois.
    Bonne soirée.






    Bonsoir small caps,
    Je suis au fin fond des Pyrénées pour un temps suffisant à oublier ce qu'est un écran.
    Vrai que j'apprécie pgo, cependant y aura-t-il un jour quelque chose qui culmine en même temps que les prix et pas avant ? *
    (lorsque le sous jacent persiste à monter)
    Voir pgo en hebdo et mensuel.
    ​​​​​​
    *Wto imbattable sur ce plan ?

    ​​​​​​Ici ce sont d'autres courbes.... Planeur is tes entre-autres..

    Au plaisir, cordialement,
    Philippe.

    Laisser un commentaire:


  • smallcaps90
    a répondu
    Bonsoir Ramon...et Parisboy,

    Je réponds à ton message d'il y a quelques jours. J'étais absent ce week end et ma réponse date un peu excuse-m'en.
    J'aime beaucoup ta métaphore du lissage à l'enduit pour imager ce qu'est le twicing de Tukey.

    Je n'avais pas vu que Jurik utilisait le mode twicing en catimini! Après tout il en avait le droit et il n'a pas été le seul...
    Je ne doutais pas que tu connaissais la Hull moving average de Alan Hull, à ne pas confondre avec la moyenne de Uhl (du prof Andréa Uhl de l'Université de Salzburg) qui n'est pas mal non plus. A poster...
    Pendant que nous y sommes, on peut citer aussi la moyenne de 3ème génération de l'allemand Dürchner. Je la posterai aussi...car c'est à ma connaissance une "vraie" zéro lag...quasiment.
    Pour revenir à la moyenne de Hull, le schéma bloc de la figure 9 de l'article :
    "Reduced-Delay Data Smoothing" de R.Lyons que j'ai cité dans mon post sur le twicing est très explicite dans sa conception.



    On y voit bien les 3 sous-filtres qui la composent :
    - un filtre composé d'une moyenne mobile simple( N périodes de calcul),
    - un filtre moyenne simple ( N/2 périodes de calcul) dont la sortie est multipliée par 2 et dont ce résultat est retranché de celui du premier sous filtre,
    - un filtre moyenne mobile simple de période racine carrée de N qui reçoit le résultat des deux premiers filtres agencés comme dit.
    Je ne parle pas des coefficients qui sont appliqués aux différents sous-filtres.
    Elle est originale la moyenne de Hull! Comment Alan Hull a-t-il procédé pour trouver cette petite merveille? Difficile de le savoir.

    Oui, pour réduire le lag d'un lissage tout en ayant un "bon lissage" (il existe des critères pour l'apprécier), on peut utiliser des techniques un peu semblables.
    Un article présente 3 méthodes pour débruiter des image 2D mais qui les développe avec des vecteurs, donc 1D, pour les explications :
    "A General Iterative Regularization Framework for Image Denoising3 Par Michael Charest et d'autres
    téléchargeable sur citeseer.ist.edu
    Le twicing de Tukey y est présenté (la 2ème dans le développement de l'article).
    Celle proposée par les auteurs( la 3ème) semble intéressante aussi mais je n'ai pas encore eu le temps de la tester.
    A voir aussi comme tu le conseilles, la "SSA des résidus"...pas le temps encore.

    Oui la ULLMA m'intéresse toujours et je souhaitais un trancodage du programme pour Metatrader en un peudo-langage qui serait facilement transposable sur GAP. Merci à qui voudrait bien le faire.
    Dans le même domaine, Mladic encense une autre moyenne à l'occasion d'un post sur le PGO (Pretty good Oscillator de M. Johnson, une vision différente des bandes de Bollinger). Ce PGO n'a jamais été posté ici, c'est un indicateur sympa....encore plus sympa une fois "twicingué". Mladic lisse ce PGO, qui est souvent bruyant, avec une moyenne due à Tim Morris dont j'ai le programme pour Metatrader. Encore un à trancoder...Je sais que notre ami phg utilise (utilisait?) le PGO.

    Enfin dans le domaine des FIR, n'oublions pas Ehlers qui, bien que mis de côté pour ne pas dire exclu, par les membres de la file "Optimized Trend Trading" (que tu analyses sur ForexFactory), Ehlers disais-je, proposait : "Zero-Lag Data Smoothers" un article en juillet 2002 sur TASC, dispo sur le web. Dans cet article il expliquait simplement quelques notions sur la théorie du signal et développait son filtre/moyenne préféré à l'époque, car depuis il a fait du chemin... C'est un FIR sans twicing, à quasiment zero lag d'ordre 6 (7 coefficients).
    Il n'a pas été posté ici sur l'ancien site. Je vous en donne l'équation :

    Filtre_Zero_Lag = (Price+3.5*Price[1]+4.5*Price[2]+3*Price[3]+0.5*Price[4]-0.5*Price[5]-1.5*Price[6])/10.5

    On peut choisir pour la variable d'entrée "Price" pratiquement ce que l'on veut : des éléments des cours, des indicateurs...

    Merci aussi pour ton étude fréquentielle des résidus "hurstien" et "non centrés" de la TMA. Très intéressant sujet.

    Merci aussi à Parisboy pour ses extraits du bouquin de Hurst, une vue autre mais du même sujet..
    Il y aurait encore beaucoup de choses à dire...Ce sera pour une autre fois.
    Bonne soirée.







    Laisser un commentaire:


  • Parisboy
    a répondu
    je continue mes petites publications "hurstiennes"

    - Profit Magic - Ch. 6 - P 112

    TRY THE INVERSE AVERAGE IN OTHER WAYS

    An inverse Moving Average can be formed from an average of any span.

    Any time you wish to inspect a given component more accurately, simply form an average of span equal to the component duration.

    The associated inverse average must show the desired fluctuation at exactly the correct magnitude, since it is present in price to this extent but is precisely zero in the Moving Average.

    Taking the difference between the two displays this particular fluctuation on a zero baseline in all its glory !

    This usage is particularly important as you are approaching buy and sell points.

    Extract the higher frequency components in this way, and you will never have to guess about trend line validity and channel turn-around.


    Another excellent application :
    Extract your trading cycle in this manner before you act on buy signals.

    The state of the magnitude-duration fluctuation situation is clearly discernible once the large, long components are removed.

    You may save yourself from acting on a perfectly valid buy signal only to find your trading cycle has shrunk to near zero in size !


    Try the Inverse Average at Triangle resolution points.

    Once again, the mechanics of formation of these patterns via magnitude-duration fluctuation of short duration components will be made very clear.

    In addition, the short duration component information derived willaid greatly in pinpointing pattern resolution times.

    Laisser un commentaire:


  • Ramon
    a répondu
    C'est la dernière phrase de Hurst que tu citais dans ton premier post Parisboy, qui m'a mis la puce à l'oreille et amené à considérer deux types de résidu (traduction DeepL) :
    "Le seul élément essentiel à retenir (comme toujours) est de faire correspondre correctement la moyenne mobile et les points de données de prix avant de soustraire, en tenant compte du décalage de la moitié de la durée décrite précédemment."

    Pour confirmer l'intuition que les deux résidus n'avaient pas le même contenu spectral, j'ai fait une analyse sur le CAC40 de 2011 à 2019 (2300 jours) lissé avec une TMA de longueur 19 dont les caractéristiques sont sur le post #2804 (retard de 9 UT, fréquence de coupure 0.032). Les deux résidus RH et R sont calculés selon les définitions données précédemment : pour le résidu de Hurst RH, la TMA est translatée de 9 jours vers la gauche avant d'effectuer la soustraction et pour le résidu commun R on soustrait directement sans rien changer.

    Les deux résidus sont analysés de la même façon par une procédure classique d'analyse spectrale (Welch). Dans une fenêtre glissante (comme pour une MA), on fait une transformée de Fourier, puis on déplace cette fenêtre, on recommence et à chaque fois on somme les énergies des raies spectrales. On finit par obtenir pour les deux résidus une distribution de l'énergie moyenne sur l'échelle des fréquences (normalisées) comme représenté ci-dessous.


    Cliquez sur l'image pour la voir en taille réelle   Nom : 		CAC40_residus_TMA.jpg  Affichages :	0  Taille :		80,7 Ko  ID : 			1980204




    La ligne verticale représente la séparation entre la bande-passante (fréquences inférieures à 0.032 donc périodes supérieures à 31 UT) et la bande atténuée (fréquences supérieures à 0.032). La différence entre les deux résidus est clairement visible :

    Le résidu de Hurst RH (où la TMA a été translaté de 9 pas vers le passé) ne contient pratiquement plus d'énergie en dessous de la fréquence de coupure 0.032 de la TMA. Si on veut extraire des périodes plus courtes c'est ce résidu qu'il faudra utiliser.

    Le résidu commun R contient toujours une quantité d'énergie non négligeable en dessous de la fréquence de coupure. On comprend que parce que la TMA n'est pas à sa place, la soustraction des composantes de la bande passante est imparfaite pour les éliminer complètement du résidu. Mais ce phénomène a été mis en œuvre par Tukey dans le twicing pour combler les aspérités par des filtrages successifs de ce résidu (en rajoutant des couches d'enduit ).

    C'est anecdotique, mais vous remarquerez que les deux endroits après la fréquence de coupure où les courbes s'écartent légèrement, c'est quand les lobes de la fonction de transfert de TMA réduisent localement l'affaiblissement (à 0.15 et 0.25 environ).

    Laisser un commentaire:

Chargement...
X