Le code qui pourrait amélioré votre Stratégie

Viewing 15 posts - 16 through 30 (of 33 total)
  • Author
    Posts
  • #66746 quote
    FREDNC
    Participant
    Senior
    // Définition des paramètres du code
    DEFPARAM CumulateOrders = False // Cumul des positions désactivé
     
    //STOP SI PLUS X% DE PERTE
    gain=0
    ordre=0
     
    //boucle dans les 1000 derniers ordres
    for i = 1 to 1000 do
    distance=barindex-tradeindex(i)<10080//si l'ordre n'a pas plus d'1 semaine
    if distance then
    ordre=ordre+1
    if positionperf(i)>0 then
    gain=gain+1
    endif
    endif
    if not distance then
    break
    endif
    next
    ratio = gain/ordre
     
    If (ratio*100)<25 then // taux de perte acceptable avant arrêt de la stratégie
    ON=1
    else
    ON=0
    endif
    
    //************************redémarrage stratégie******************************
    MM=average[160]
    if ON=0 and close crosses over MM then
    ON=1
    endif
     
    // Conditions pour ouvrir une position acheteuse
     
    C1= RSI[11](close) crosses over 40 and Stochastic[128,8](close)> 50 //***C1
     
    //Entrée en position
    if ON AND C1 THEN
    BUY 1 CONTRACT AT MARKET
    ENDIF
     
    SET STOP pLOSS 20
    SET TARGET pPROFIT 20
    #66747 quote
    FREDNC
    Participant
    Senior
    // Définition des paramètres du code
    DEFPARAM CumulateOrders = False // Cumul des positions désactivé
     
    //STOP SI PLUS X% DE PERTE et ré-démarrage sur croisement à la hausse de MM
    gain=0
    ordre=0
     
    //boucle dans les 1000 derniers ordres
    for i = 1 to 1000 do
    distance=barindex-tradeindex(i)<10080//si l'ordre n'a pas plus d'1 semaine
    if distance then
    ordre=ordre+1
    if positionperf(i)>0 then
    gain=gain+1
    endif
    endif
    if not distance then
    break
    endif
    next
    ratio = gain/ordre
     
    If (ratio*100)<25 then // taux de perte acceptable avant arrêt de la stratégie
    ON=1
    else
    ON=0
    endif
    
    //************************re-démarrage stratégie******************************
    MM=average[160]
    if ON=0 and close crosses over MM then
    ON=1
    endif
     //*******************************************************************
    
    
    
    // Conditions pour ouvrir une position acheteuse
     
    C1= RSI[11](close) crosses over 40 and Stochastic[128,8](close)> 50 //***C1
     
    //Entrée en position
    if ON AND C1 THEN
    BUY 1 CONTRACT AT MARKET
    ENDIF
     
    SET STOP pLOSS 20
    SET TARGET pPROFIT 20
    #66748 quote
    FREDNC
    Participant
    Senior

    J’arrive pas à poster le code modifié avec la fonction PRT code. Voici donc ci-dessous la partie du code que j’ai modifié pour obtenir le courbe de gain N°3.

     

    //STOP SI PLUS X% DE PERTE et RE-DEMARRAGE
    gain=0
    ordre=0
    
    //boucle dans les 1000 derniers ordres
    for i = 1 to 1000 do
    distance=barindex-tradeindex(i)<10080//si l'ordre n'a pas plus d'1 semaine
    if distance then
    ordre=ordre+1
    if positionperf(i)>0 then
    gain=gain+1
    endif
    endif
    if not distance then
    break
    endif
    next
    ratio = gain/ordre
    
    If (ratio*100)<25 then // taux de perte acceptable avant arrêt de la stratégie
    ON=1
    else
    ON=0
    endif
    
    //********************************Re-démarrage stratégie*************************
    MM=average[160]
    
    if ON=0 and close crosses over MM then
    ON=1
    endif
    //***************************************************************************
    Nicolas thanked this post
    #66751 quote
    Nicolas
    Keymaster
    Master

    Merci pour le retour. Puisque cette stratégie est “long only” avec l’utilisation d’oscillateurs bornés autour d’un centre du prix et que  tu as semble-t’il uniquement ajouté un filtre de moyenne mobile de tendance long terme, je me demande si le code d’arrêt est vraiment nécessaire finalement ?  As-tu essayé d’insérer simplement le filtre avec la MM (si close>MM160 alors ON=1) et sans le code d’arrêt ?

    La fonction que l’on a codé ensemble est très intéressante pour switcher d’une stratégie à une autre, mais je pense que l’exemple choisit pour démontrer son efficacité n’est peut être pas le meilleur, mais je me trompe peut-être 🙂

    #66776 quote
    FREDNC
    Participant
    Senior
    //STOP SI PLUS X% DE PERTE
    gain=0
    ordre=0
     
    //boucle dans les 1000 derniers ordres
    for i = 1 to 1000 do
    distance=barindex-tradeindex(i)<10080//si l'ordre n'a pas plus d'1 semaine
    if distance then
    ordre=ordre+1
    if positionperf(i)>0 then
    gain=gain+1
    endif
    endif
    if not distance then
    break
    endif
    next
    ratio = gain/ordre
     
    If (ratio*100)<25 then // taux de perte acceptable avant arrêt de la stratégie
    ON=1
    else
    ON=0
    endif
    
    //redémarrage stratégie
    MM=average[160]// Paramètre à optimiser
    
    if ON=0 and close crosses over MM then
    ON=1
    endif

    Ce mode de réactivation par croisement MM est très aléatoire et que très peut orienté sur un retour à des conditions réellement favorables. Il génère de nombreuse réactivations de la stratégie suivie d’un arrête presque immédiat car les conditions ne sont toujours pas bonnes. Pour autant la méthode fonctionne et on constate une nette amélioration de la courbe de gain. Le problème, c’est qu’on teste les conditions de marché en réactivant la stratégie de manière presque aléatoire et on corrige en validant ou invalidant.     Quelqu’un aurait une (ou des idée)s pour réactive la stratégie quand le marché redeviens vraiment  favorable ?

    #66781 quote
    FREDNC
    Participant
    Senior

    Je ne sais pas pourquoi mais j’ai toujours un décalage entre tes posts et mes réponses….ça rends le dialogue plutôt surprenant par moment. bref…

    Oui effectivement on à fait ce code pour effectuer un switch entre différentes stratégies incluse dans le même robot. Du reste le code rempli sont rôle et peut très bien désactivé un code au profit d’un autre et faire basculer sur trois code différente afin de trouvé le code le plus adapter en fonction de l’humeur du marché.

    J’ai essayer de faire simple pour l’instant. Je n’ai pas oublié que le but final qui consiste à faire un système autonome sur 3 stratégies (long and short) inclus dans le même robot et d’aller à la plage plutôt que surveiller ses robots 😉

    Pour autant, j’aimerai trouver un moyen intelligent de tester une stratégie avant de la mettre (ou remettre) en route. Ça pourrait nous évité de générer des pertes pour finalement décidé que le marché n’ai pas favorable à la stratégie que l’on teste. J’ai toujours en tête qu’il n’est pas encore possible de créer des tableaux de donnée dans PRT mais je cherche… une idée peut être ? je suis sur que tu vas me trouvé un pirouette et résoudre ce problème de prise de positions obligatoire pour tester  😉

    Le Robots finale le l’ai déjà en tête. Les switch entre stratégies internes devraient être fastidieux (entre les allés retour et switch croisé) mais assez facile à écrire grâce à ton code. l’optimisation de la duré de la boucle et taux de perte autorisé multiplié en 3 stratégies “long” et 3 “short” devrait prendre pas mal de temps aussi. Heureusement que nous avons abandonné le filtre avec la volatilité lol

    Ça promet certainement une bonne migraine mais ça reste dans mes compétences 😉

     

    PS: Je vais tester le on et off sur MM 160 sans l’aide de  ton code.

    #66785 quote
    FREDNC
    Participant
    Senior

    Voici la comparaison entre la version avec ton code et la version avec juste le ON et OFF sur MM160.  Je te laisse apprécié par toi même. Le gain total penche en faveur de ton code mais le profil factor et le taux de réussite penche en faveur de la moyenne mobile.

    N’oublions pas  que le MM160 est le fruit d’une optimisation. Ses performances ne seront pas égale en fonction de l’instrument et vont se dégradé avec le temps. Par contre tes lignes de code s’adapterons à n’importe quel instrument et resterons fiable dans le temps. Pour autant, se teste reste instructif.

    20180330_204858.jpg 20180330_204858.jpg 20180330_205241.jpg 20180330_205241.jpg
    #66788 quote
    FREDNC
    Participant
    Senior

    La différence entre les drawdowns s’explique que dans un cas on est obligé de perdre pour s’arrêter  (ton code) alors que dans le cas de la MM160 on peut perdre du profit mais rester positif tout en croisant la MM et s’arrêter.

    Il faudrait optimiser les paramètres de durée de boucle et pourcentage de perte acceptable pour corriger  le drawdown du code.

    #66850 quote
    FREDNC
    Participant
    Senior

    Bonjour à tous,

    J’ai fini la partie “long” du robot en utilisant le switch de @Nicolas et trois sous programme de base.

    Le défit était de prendre 3 robots médiocre et les transformer en une stratégie améliorée et surtout plus robuste en terme de performances et longévité.

    Cette façon de concevoir un robot, switch entre les trois sous robots et essaye d’exploiter le meilleur des trois robots en fonction du marché présent.

    Le seul bémol c’est qu’ il faut qu’un robot démarre et perde pour que le switch s’opère.    La sélection du robot le plus adapté part rapport au moment ce fait comme cela.  C’est dommage, ça génère des pertes inutile.

    J’aurai souhaiter tester les robots avec des positions fictivement et décider en fonctions des résultats fictifs de démarrer(ou pas démarrer) le robot le plus adapté.

    En tout cas, pari tenue, pari réalisé et ça fonctionne !

    Vous trouverez ci-dessous les Screenshots des 3 robots séparément et le résultat de l’assemblage avec le switch.

    Test effectué sur Eur/Usd M1

    Les conditions du teste sont : La partie “long” uniquement.   AUCUNE optimisation du Robot final,  switch réglé sur 1% de perte autorisé. Pour les sous programmes, ils ont été optimisé sur seulement 10 000 bougies et se ne sont que des robots très simpliste.

    On noteras une amélioration global des performances. Aucun des sous programme n’arrivent à rivalisé avec la stratégie que j’ai appelé D.S.S (démarrer/switch/stop)

    La courbe de gain et le gain ainsi que le taux de réussite, profit factor, le drawdown (en dollars et nombre de pertes consécutives) , tous ces éléments sont en nette amélioration.

    20180331_182422-1.jpg 20180331_182422-1.jpg 20180331_184545-1.jpg 20180331_184545-1.jpg EURUSD-1-minute-x3.png EURUSD-1-minute-x3.png
    #66880 quote
    Gertrade
    Participant
    Veteran

    Un grand merci à Nicolas et FREDNC qui ont oeuvrés sur ce code.

    J’ai bien amélioré mes stratégies, améliorer les gains, réduit les pertes et diminuer le drawdown.

    Cordialement

    Gertrade

    FREDNC thanked this post
    #66887 quote
    FREDNC
    Participant
    Senior

    welcome @Gertrade.  N’hésite pas à optimiser le taux de perte et MM de redémarrage  😉

    Gertrade thanked this post
    #66893 quote
    Gertrade
    Participant
    Veteran

    N’hésite pas à optimiser le taux de perte et MM de redémarrage

    J’ai déjà optimisé le taux de perte à 29.

    Par contre, j’ai remplacé la MM de redémarrage par une autre condition de ma stratégie, et çà marche super.

    dibull=DIplus[1](close)>DIminus[3](close)
    
    //***************Re-démarrage stratégie***********************
    if ON=0 and dibull then
    ON=1
    endif
    //************************************************************
    
    
    #66895 quote
    FREDNC
    Participant
    Senior

    Merci pour l’info. Effectivement le DIplus apporte une belle amélioration. Ci dessous le Screenshots de la même stratégie 3 sous robots(médiocres)

    Je ne connaissais pas le DIDI

    J’ai chercher dans le guide de programmation et je trouve:

    DI DI[N](price) Désigne le Demand Index
    DIminus DIminus[N](price) Désigne le DIDIplus
    DIplus[N](price) Désigne le DI+

    Peux nous en dire plus sur DIDI ?

    EURUSD-1-diplus.png EURUSD-1-diplus.png
    #66902 quote
    Gertrade
    Participant
    Veteran

    Il s’agit de l’indicateur DMI (Directional Movement Index)

    DI – Indicateur Directionnel

    Interprétation : Le DI+ mesure les mouvement haussiers. Le DI- mesure les mouvements baissiers. Un signal d’achat peut apparaître quand le DI+ croise le DI- à la hausse et un signal de vente peut apparaître quand le DI+ croise le DI- à la baisse.

    Aspect pratique : Pour valider les signaux d’achat et de vente lors des croisements du DI+ et du DI-, il faut que la tendance soit identifiée, avec notamment un ADX élevé (supérieur à un certain seuil, par exemple 17 ou 23).

    #66910 quote
    Gertrade
    Participant
    Veteran

    Définition : DI+ = DM+ / TR; DI- = DM- / TR
    avec TR = max[abs(PlusHaut – PlusBas) abs(PlusHaut – ClôtureVeille) abs(PlusBas – ClôtureVeille)] DM+ = max[0;PlusHaut-PlusHautVeille] DM- = max[0;PlusBasVeille – PlusBas]
    Le paramètre détermine le nombre de jours considérés qui lisse les deux lignes à l’aide de la méthode des moyennes mobiles. En mode histogramme, les barres représentent DI+ moins DI-

Viewing 15 posts - 16 through 30 (of 33 total)
  • You must be logged in to reply to this topic.

Le code qui pourrait amélioré votre Stratégie


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
FREDNC @frednc Participant
Summary

This topic contains 32 replies,
has 4 voices, and was last updated by Nicolas
7 years, 11 months ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 03/29/2018
Status: Active
Attachments: 7 files
Logo Logo
Loading...