Quand le hasard fait mieux que 80% des backtests
Ou l’utilité du money management et du stop loss…
Je suis tombé il y a peu sur un backtest tout à fait original.
En effet, la stratégie est de rentrer au hasard sur un titre soit pour jouer la hausse, soit pour jouer la baisse, mais vraiment totalement au hasard. Ensuite, si le système reste sur le trade pendant X jours (variable à optimiser).
En cas de perte de plus de 3%, le système sort tout de suite du trade en cours. S’il se trompe une 2e fois, il sort à nouveau puis initie un nouveau trade, mais dans l’autre sens (s’il jouait la hausse, il joue à présent la baisse et inversement).
En gros, les pertes sont coupées de suite, et les gains sont pris quand il y en a, au bout de X jours, X étant toujours le même nombre de jours.
Voici, le résultat sur un tracker qui répercute le CAC40:

+92% de gains, pour une stratégie basée sur le hasard
Voilà de quoi se pencher sérieusement sur l’intéret que présent le money management!
Voici le code pour ceux qui veulent tester (mettre x en variable, de 1 à 100 par exemple):
ONCE nbTrades = 0 IF BarIndex < 2 THEN wasLong = 0 wasShort = 0 ENDIF random = ROUND((Volume MOD 2)/2) //True ou false généré au hasard IF BarIndex > 1 THEN IF (random = 0) AND (NOT LongOnMarket AND NOT ShortOnMarket) THEN IF nbTrades >= 2 THEN IF (PreviousTrade(1) < 0 AND PreviousTrade(2) < 0) AND (wasLong = 1 AND wasLong[1] = 1) THEN SELLSHORT 300 %capital AT MARKET nbTrades = nbTrades +1 wasShort = 1 wasLong = 0 ELSE BUY 300 %capital AT MARKET nbTrades = nbTrades +1 wasLong = 1 wasShort = 0 ENDIF ELSE BUY 300 %capital AT MARKET nbTrades = nbTrades +1 wasLong = 1 wasShort = 0 ENDIF ENDIF IF (random = 1) AND (NOT LongOnMarket AND NOT ShortOnMarket) THEN IF nbTrades >= 2 THEN IF (PreviousTrade(1) < 0 AND PreviousTrade(2) < 0) AND (wasShort = 1 AND wasShort[1] = 1) THEN BUY 300 %capital at MARKET nbTrades = nbTrades +1 wasLong = 1 wasShort = 0 ELSE SELLSHORT 300 %capital AT MARKET nbTrades = nbTrades +1 wasShort = 1 wasLong = 0 ENDIF ELSE SELLSHORT 300 %capital AT MARKET nbTrades = nbTrades +1 wasShort = 1 wasLong = 0 ENDIF ENDIF IF LongOnMarket AND BarIndex = ENTRYINDEX+x THEN SELL CountOfLongShares SHARES AT MARKET ENDIF IF ShortOnMarket AND BarIndex = ENTRYINDEX+x THEN EXITSHORT CountOfShortShares SHARES AT MARKET ENDIF ENDIF
Si vous avez apprécié cet article, s'il vous plait, prenez le temps de laisser un commentaire ou de souscrire au flux afin de recevoir les futurs articles directement dans votre lecteur de flux.
Commentaires
Intéressant…
Mérite d’être analysé. Les gains les plus sensibles ont été réalisés depuis début 2008, période à partir de laquelle on a vu des écarts de cours très importants.
Est-il possible d’affiner les conditions de sortie des trades en y intégrant un paramètre conditionnel ?
Petite question : le code que vous donnez il va sur quoi ?
comment le retranscrire ?
Merci d’avance pour la réponse
Est-il possible d’affiner les conditions de sortie des trades en y intégrant un paramètre conditionnel ?
Oui, certainement. Mais le principe du backtest est juste d’inciter à se poser des questions sur le money management.
Petite question : le code que vous donnez il va sur quoi ?
C’est un code pour http://www.prorealtime.com
Le X est un nombre de jours fixe, à mettre en optimisation de variable, durant lequel on tient le trade quoi qu’il arrive.
Par exemple, mon entrée se fait au hasard aujourd’hui et je tiens ma position X jours avant d’en sortir, sauf si mon stop est tapé.
Bonjour,
Tout cela conforte pas mal mon idée sur la chose…
Petite question :
- les pertes correspondent à X % (3% sur l’exemple)
- les gains correspondent à X jours , il n’est
plus question de % ?!
Quelle en est la raison principale ?
Merci.
Je ne saisi pas très bien le sens de votre question.
Si vous parlez de la variable X, elle définit le nombre de jours durant lesquels la position est conservée. C’est à mettre en variable à optimiser dans votre backtest.
Mais l’unique but de ce backtest n’est pas de définir une stratégie gagnante, mais bel et bien de montrer qu’en s’en remettant au hasard, on est déjà sur 50% de chances de réussite, donc si on doit définir une stratégie, quelle qu’elle soit, il est préférable d’utiliser une stratégie à plus de 50% de réussite.
Un peu plus haut dans votre article, il ne s’agit pas de 50% de réussite mais de 92%…c’est pas pareil !
Ma question portait sur le choix des variables ;
tantôt en % pour ce qui est de couper les pertes, tantôt
en jours pour laisser filer une position gagnante.
92% correspond au gain total (retour sur investissement) du backtest sur la période.
50% correspond au pourcentage de chance théorique de faire un trade gagnant en se basant sur le hasard.
Bonjour
Lorsque je lance le programme j’ai cette erreur?
Erreur dans l’indicateur: ProBacktest - Courbe gains & pertes
-1
Pourquoi?
Merci quand meme, je vais essayer de fouiller, mais si une idée vous viens… merci de la communiquer.Si je trouve, je communiquerai.
Autre question: ou trouver d’autres Backtests efficaces, est il possible d’automatiser les ordres Prorealtime sur une plateforme(impossible sur bourso)
J’utilise le code tel quel sans probleme. Ca doit donc venir d’une question de paramétrage de la gestion de capital.
Pour utiliser les ordres automatiques chez PRT, cela n’est pas encore possible à ma connaissance.
J’utilise votre code pour une valeur et il me donne un certain % de retour sur investissement et une courbe ‘perte et gain’. Ok.
Je modifie le code en passant les “300%” à “100%” pour ne pas avoir d’effet de levier et surprise j’ai exactement le même % de retour sur investissement et la même courbe ‘perte et gain’ (même en faisant une nouvelle optimisation).
Comment est-ce possible ?
Dans “gestion de capital”, si votre investissement max est de 100%, il ne les dépassera jamais dans le backtest. Donc si vous entrez à 300% pour faire un levier 3, il restera à 100% investi max. Ce qui explique que vos 2 backtests soient identiques.
Ok, merci Chris.
Bravo pour votre blog et votre réactivité.
Allez-vous mettre bientôt en public sur Prorealtime.com le backtest ‘trendblaster’ ?
Je ne sais. Pour l’instant je l’affine encore. Mais le but de ce site est que chacun puisse créé son propre backtest en assemblant le contenu des articles de ce site pour le développer.
Ceci n’est pas du tout du hasard puisque la “variable aléatoire” est générée par une entrée fixée, le volume et un calcul bien défini.
Il faudrait avoir une fonction “random” dans PRT et pouvoir générer un grand nombre de tirages afin de valider l’approche et calibrer les paramètres de stop loss et x de façon optimal.
J’ai l’impression que tout ceci dépasse les capacités actuelles de PRT.
C’est du hasard dans le sens du “pile ou face” sur le sens d’entrée sur le titre…
Après, un backtest qui fasse tout au hasard (nombre de titres, sens, date d’entrée, etc), je ne vois pas trop l’intéret pour notre réflexion, mais vous pouvez publier ce backtest si vous souhaitez.
Intérêssant ; cependant stratégie non utilisable car suivant la valeur de X on peut en effet atteindre 92% de gains tout comme -80% !
pas vraiment, car en cas de 2 trades perdants consécutifs, le système trade l’autre sens, donc revient dans la position du trend et prend des profits larges comparés aux pertes limitées des stops précédents…
d’accord avec Franck en quelque sorte, car si on configure X de manière a ce que l’on soit en mauvaise correspondance avec des cycles haussier/baissier, on peut cumuler beaucoup de pertes dues stops loss et tres peu de trades gagnants.
Je m’explique:
trend baissier, l’algo joue la hausse 1 fois –> perdu, il re joue hausse –> re-perdu, 3 eme coup il va jouer la baisse.
Mais mauvais timing, entretemps le cours s’est renverser a la hausse, 1er coup baisse –> perdu, 2eme coup baisse encore perdu. Coup suivant a jouer a jouer à la hausse, mais le cours se renverse a la baisse, etc…
Bref comme dit Franck certaine configurations de x font qu’on a très peu de trades gagnants. Si le cours est cyclique on peut très mal tomber. Tout comme on peut tomber sur “the” configuration qui maximise les gains.
De plus cela est très dépendant de la période du cours sur laquelle on applique l’algo.
En conclusion, très bon exemple pédagogique pour montrer l’intéret que présente le money management, mais franchement stratégie à déconseiller si utilisée seule et telle quelle.
Tout à fait. Il ne faut pas voir ce backtest comme une stratégie, mais comme un exercice de style qui vise à montrer que souvent, il y a beaucoup de stratégies que l’on pourrait mettre en place qui donnerait un résultat moindre que le hasard.
Bonjour ,
J’essaie de mettre votre backtest dans prorealtime mais cela ne fonctionne pas car lorsque je veut valider le backtest il me met erreur de syntaxe …
Pourriez-vous m’aider svp





Très enrichissant! Merci