Backtests en stock

Forum sur les méthodes de trading : règles d'entrée et de sortie, gestion du risque, money management et résultats sur la durée, testés par les membres.
Avatar du membre
plataxis
Membre du Conseil Jedi
Messages : 5049
Enregistré le : 30 avr. 2014 03:12

Backtests en stock

Message non lu par plataxis »

Bonjour,

J'ai l'intention de poster ici des backtests qui me semble intéressants à partager parce qu'ils témoignent d'une idée particulière qui peut inspirer quelqu'un. Bien sûr, un backtest ne dit rien d'autre que ce qu'il dit : sur telle période en tradant systématiquement de telle manière vous auriez gagné / perdu tant. Quant à prévoir ce que ça donnera à l'avenir, c'est évidemment très incertain voire parfaitement hasardeux.

Mes outils de prédilections sont PRT et takaticks "petit robot", car ils sont facilement utilisables par tout un chacun, mais bien sûr libre à chacun d'enrichir la file avec d'autres codes qui vous paraissent intéressants sur ses outils préférés (MT4, etc.)

J'ai déjà un peu commencé avec le RSI UT15 min et le système des "turtles". j'envisage d'en tester d'autres (ou de pointer vers des files qui en proposent), en particulier pour "jouer" les indicateurs de façon "frontale" comme je l'ai vu ailleurs mais je me contente de ce teasing pour le moment, avec un titre qui sonne bien pour sa référence tintinophile ;) , et pour faire un exercice de diction (répétez le 10 fois très vite :mrgreen: ).
Avatar du membre
plataxis
Membre du Conseil Jedi
Messages : 5049
Enregistré le : 30 avr. 2014 03:12

Re: Backtests en stock

Message non lu par plataxis »

Voici un premier backtest de la série "brut de décoffrage" : MACd dans son expression la plus basique (inversion des positions à chaque inversion de signal) : depuis aout 2011, il ne perd "que" 1240 points, ce qui est une performance décente pour une utilisation aussi brutale d'un indicateur impliquant d'être en permanence sur le marché.
Spoiler:
Screen Shot 12-16-15 at 09.05 PM.PNG
Screen Shot 12-16-15 at 09.05 PM.PNG (190.75 Kio) Vu 18074 fois

Code : #

// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé

indicator1 = MACDline[12,26,9](close)
indicator2 = ExponentialAverage[9](MACDline[12,26,9](close))

// Conditions pour ouvrir une position acheteuse

c1 = (indicator1 >= indicator2)

IF c1 THEN
BUY 1 CONTRACT AT MARKET
ENDIF

// Conditions pour fermer une position acheteuse

c2 = (indicator1 <= indicator2)

IF c2 THEN
SELL  AT MARKET
ENDIF

// Conditions pour ouvrir une position en vente à découvert

c3 = (indicator1 <= indicator2)

IF c3 THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF

// Conditions pour fermer une position en vente à découvert

c4 = (indicator1 >= indicator2)

IF c4 THEN
EXITSHORT  AT MARKET
ENDIF

// Stops et objectifs
Avatar du membre
plataxis
Membre du Conseil Jedi
Messages : 5049
Enregistré le : 30 avr. 2014 03:12

Re: Backtests en stock

Message non lu par plataxis »

Sur suggestion de xxxx, un petit test sur stratégie hyper simpliste : vendre sous la MM20, acheter au dessus en hebdo : pas rentable sur le CAC depuis 3 ans :
Spoiler:
Screen Shot 12-20-15 at 06.15 PM.PNG
Screen Shot 12-20-15 at 06.15 PM.PNG (129.05 Kio) Vu 18048 fois

Code : #

// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé

// Conditions pour ouvrir une position acheteuse
indicator1 = close
indicator2 = Average[20](close)
c1 = (indicator1 > indicator2)

IF c1 THEN
BUY 1 CONTRACT AT MARKET
ENDIF

// Conditions pour fermer une position acheteuse
indicator3 = close
indicator4 = Average[20](close)
c2 = (indicator3 < indicator4)

IF c2 THEN
SELL  AT MARKET
ENDIF

// Conditions pour ouvrir une position en vente à découvert
indicator5 = close
indicator6 = Average[20](close)
c3 = (indicator5 < indicator6)

IF c3 THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF

// Conditions pour fermer une position en vente à découvert
indicator7 = close
indicator8 = Average[20](close)
c4 = (indicator7 > indicator8)

IF c4 THEN
EXITSHORT  AT MARKET
ENDIF

// Stops et objectifs
Avatar du membre
plataxis
Membre du Conseil Jedi
Messages : 5049
Enregistré le : 30 avr. 2014 03:12

Re: Backtests en stock

Message non lu par plataxis »

Dans la foulée une autre expérience simpliste : acheter / vendre quand Macd (tendance) et stochastique (plutôt range) sont d'accord : pas gagné non plus...
Spoiler:
Screen Shot 12-20-15 at 06.31 PM.PNG
Screen Shot 12-20-15 at 06.31 PM.PNG (126.64 Kio) Vu 18046 fois

Code : #

// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé

// Conditions pour ouvrir une position acheteuse
indicator1 = MACDline[12,26,9](close)
indicator2 = ExponentialAverage[9](MACDline[12,26,9](close))
c1 = (indicator1 > indicator2)

indicator3 = Stochastic[14,3](close)
indicator4 = Average[5](Stochastic[14,3](close))
c2 = (indicator3 > indicator4)

IF c1 AND c2 THEN
BUY 1 CONTRACT AT MARKET
ENDIF

// Conditions pour fermer une position acheteuse
indicator5 = MACDline[12,26,9](close)
indicator6 = ExponentialAverage[9](MACDline[12,26,9](close))
c3 = (indicator5 < indicator6)

indicator7 = Stochastic[14,3](close)
indicator8 = Average[5](Stochastic[14,3](close))
c4 = (indicator7 < indicator8)

IF c3 OR c4 THEN
SELL  AT MARKET
ENDIF

// Conditions pour ouvrir une position en vente à découvert
indicator9 = MACDline[12,26,9](close)
indicator10 = ExponentialAverage[9](MACDline[12,26,9](close))
c5 = (indicator9 < indicator10)

indicator11 = Stochastic[14,3](close)
indicator12 = Average[5](Stochastic[14,3](close))
c6 = (indicator11 < indicator12)

IF c5 AND c6 THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF

// Conditions pour fermer une position en vente à découvert
indicator13 = MACDline[12,26,9](close)
indicator14 = ExponentialAverage[9](MACDline[12,26,9](close))
c7 = (indicator13 > indicator14)

indicator15 = Stochastic[14,3](close)
indicator16 = Average[5](Stochastic[14,3](close))
c8 = (indicator15 > indicator16)

IF c7 OR c8 THEN
EXITSHORT  AT MARKET
ENDIF

// Stops et objectifs
salador
Compagnon Jedi
Messages : 1025
Enregistré le : 14 sept. 2012 07:14

Re: Backtests en stock

Message non lu par salador »

Salut,

Je n'avais jamais essayé...


Je viens de tenter un backtest sur AB INBEV, très simple et ça rapporte :
Bougies mensuelles
Une moyenne mobile 20, un rsi 5 avec sa moyenne mobile 2.

Achat si le prix > MM20 et au croisement par le haut du RSI avec sa MM2.
Revente si le prix passe sous la MM20.
Mon soucis, c'est que je voudrais simuler un renfort à chaque croisement du RSI avec sa MM2...

Comment faire via la création simplifiée?

Sans renfort, avec un capital de 10000, et en achetant 100 actions AB INbev à chaque ordre, entre 2001 et 2015 j'arrive à 17705 euros...

Ah, si la bourse était aussi facile qu'un backtest! :D

-> n'empêche, si j'obtiens le même genre de résultat sur 30-40 actions, cela peut valoir la peine d'essayer :P
Avatar du membre
plataxis
Membre du Conseil Jedi
Messages : 5049
Enregistré le : 30 avr. 2014 03:12

Re: Backtests en stock

Message non lu par plataxis »

La création simplifiée ne permet qu'une seule position à la fois (d'un nombre d'actions quelconque). Si tu veux renforcer, donne moi le code et je regarderai. Note tout de même qu'un backtest d'achat est souvent positif en période haussière, ça ne veut pas dire qu'il est gagnant en toute condition...
salador
Compagnon Jedi
Messages : 1025
Enregistré le : 14 sept. 2012 07:14

Re: Backtests en stock

Message non lu par salador »

Entre 2001 et 2015, il y a eu quelques périodes baissières, dont des fameuses!

Je vais pas t'ennuyer avec ça, c'était juste pour m'amuser.

Par contre, peut-on demander qu'à chaque signal le capital soit totalement investit?
Parce que faire un backtest avec un nombre de titres fixes n'a pas de sens lorsque le cours d'une action est passé de 40 à 100 en 15 ans par exemple...
Avatar du membre
plataxis
Membre du Conseil Jedi
Messages : 5049
Enregistré le : 30 avr. 2014 03:12

Re: Backtests en stock

Message non lu par plataxis »

J'ai vu un paragraphe sur le MM dans la doc de PRT : https://www.prorealtime.com/fr/pdf/probacktest.pdf

Je ne l'ai pas encore potassé : bonne lecture :)
salador
Compagnon Jedi
Messages : 1025
Enregistré le : 14 sept. 2012 07:14

Re: Backtests en stock

Message non lu par salador »

Salut,

Donc, je récapitule :

Données mensuelles

Conditions d'achat :
prix>MME50
RSI5 croise à la hausse sa MM2
Je mets le budget initial à chaque ordre, ici 10000 euros

Conditions de sortie :
prix croise à la baisse MME50

Quelques tests :
ABINBEV.PNG
ABINBEV.PNG (113.48 Kio) Vu 17967 fois
airliquide.PNG
airliquide.PNG (115.37 Kio) Vu 17967 fois
Amgen.PNG
Amgen.PNG (111.22 Kio) Vu 17967 fois
BIC.PNG
BIC.PNG (111.79 Kio) Vu 17967 fois
C'est pas beau tout ça?
salador
Compagnon Jedi
Messages : 1025
Enregistré le : 14 sept. 2012 07:14

Re: Backtests en stock

Message non lu par salador »

Je pensais avoir atteint des sommets avec Kinepolis (x7), jusqu'à ce que je backtest Microsoft. La classe, non? :D
microsoft.PNG
microsoft.PNG (100.24 Kio) Vu 17965 fois
salador
Compagnon Jedi
Messages : 1025
Enregistré le : 14 sept. 2012 07:14

Re: Backtests en stock

Message non lu par salador »

Pour finir, c'est Ross stores qui gagne la palme (159 000), maintenant, pour voir la fiabilité de tout ceci, il va falloir recommencer les mêmes backtests, mais avec des dates de débuts complètement aléatoires, pour voir si le système est fiable peut importe le moment d'entrée.

Ce sera pour ces prochains jours
salador
Compagnon Jedi
Messages : 1025
Enregistré le : 14 sept. 2012 07:14

Re: Backtests en stock

Message non lu par salador »

Optimisons, optimisons.

Donc, même principe d'achat, mais sortie de position si croisement à la baisse d'une moyenne mobile 10 calculée sur les plus bas.

Admirez.
ROSSSTORES2.PNG
ROSSSTORES2.PNG (117.43 Kio) Vu 17737 fois
Avatar du membre
plataxis
Membre du Conseil Jedi
Messages : 5049
Enregistré le : 30 avr. 2014 03:12

Re: Backtests en stock

Message non lu par plataxis »

Joli !
Quelques critiques :
1) les drawdowns me semblent considérables
2) le nombre de position me semble faible pour se faire une idée
3) les sociétés choisies sont des sociétés qui ont, je pense, globalement bien marché sur la période. Est-ce que la stratégie aurait limité la casse dans le cas d'une société qui s'est cassé la figure ?

As-tu testé sur un indice ?
salador
Compagnon Jedi
Messages : 1025
Enregistré le : 14 sept. 2012 07:14

Re: Backtests en stock

Message non lu par salador »

Un drawdown de 65 000, quand un runup est de 350 000... je trouve pas cela si terrible en fait.
Mais bon, j'ai fait cela à la va vite, pour qu'un backtest soit crédible, je pense qu'il faut :

1 - qu'il marche sur un moins 30-40 actions
2 - sur chacune de ces actions, tester une 20aine de dates de début de test différentes

Si c'est ok pour au moins 80% des backtests, on peut commencer une optimisation, mais à chaque changement, même infime, il faut refaire tous les tests des points 1 et 2.

J'avais utilisé des backtests sur un site de tracker... il y avait moyen d'optimiser sur un tas de critères, de modifier à souhait son bassin de trackers etc...

J'arrivais parfois à des perfs de +3000% en 6-7 ans... sauf qu'il suffisait que je change la date de début du test pour que la perf tombe à -10%... Donc le souci, c'est que le backtest t'indique ce qu'il aurait été parfait de faire dans le passé... mais ne promet rien pour le futur.

Mais si ton backtest donne de bon résultat qu'il commence le 01/01/2007 ou le 20/10/2011, ainsi qu'une 20aine d'autres dates, alors cela devrait indiquer que normalement, peu importe quand tu commences, cela devrait aller.

Pour le choix des actions :
C'est une partie de ma sélection sur base fondamentale. Je ne suis pas assez fou que pour investir long sur une société en faillite ou qui se fait bouffer ses marges par la concurrence. ca ce serait plutot pour un backtest short.

Pour le nombre de positions :
Depuis tout le temps que je fais de la bourse, un constat s'impose, pour les actions du moins, rien de tel que le long terme.
De plus, le backtest ne tient pas compte des dividendes...

Petite idée :
Une fois le backtest validé selon les points 1 et 2, il faut sélectionner les 20 meilleurs titres, et selon les signaux, investir graduellement par tranches de 10%. Au final, si tu es totalement investis, le risque serait réparti sur 10 actions, avec par exemple une diversification monétaire (50% dollars, 50% euros).
Si ton broker le permet, tu investis sur 12 ou 13 actions pour te retrouver investit à 120 ou 130%. le miens le fait via crédit Lombard, cela peut mettre encore un peu plus de beurre dans les épinards...

-> j'ai tenté sur un tracker or, le backtest est négatif, c'est le seul en fait.
-> je pense également regarder l'effet d'un peu de levier, genre 1.3 ou 1.5, mais bon, beaucoup de boulot en perspective, pas beaucoup de temps...
salador
Compagnon Jedi
Messages : 1025
Enregistré le : 14 sept. 2012 07:14

Re: Backtests en stock

Message non lu par salador »

Petit exemple :

Je prends AB INBEV, et je fait démarrer le backtest le mois précédent chaque signal lancé par le croisement à la hausse du RSI5 et de sa MM2 : depuis 2011, cela me donne 10 signaux, le dernier en septembre 2015.
Les performances, selon la date de début du backtest, vont de 280% à 0.5% pour le dernier.
Je fais un test d'avant crise, soit au 1/01/2007, on commence par une perte, puis on entre en position pour ne plus jamais en sortir et finir avec 26 000 euros, soit un k multiplié par 2.6...

Donc, si j'obtiens le même genre de résultats sur une 20aine d'autres titres, je pourrais dire que ce backtest est concluant.

Qu'en penses-tu?
Avatar du membre
plataxis
Membre du Conseil Jedi
Messages : 5049
Enregistré le : 30 avr. 2014 03:12

Re: Backtests en stock

Message non lu par plataxis »

Ca parait pas mal. Bizarre la contre performance de l'or : l'exception qui confirme la règle ? Je jetterais un oeuil sur un indice : après tout c'est un panier d'action, ce qui est sensé lisser le risque...
Avatar du membre
Mister Hyde
Compagnon Jedi
Messages : 1343
Enregistré le : 26 mai 2014 11:49

Re: Backtests en stock

Message non lu par Mister Hyde »

Sur les backtests d'actions, attention au biais du survivant, que se passe-t-il si tu as applique ton système sur des actions qui ont été délistées. Même avec une sélection rigoureuse on est pas à l'abri d'une magouille comptable, ou d'un évènement exogène qui ruine une société.
J'arrivais parfois à des perfs de +3000% en 6-7 ans... sauf qu'il suffisait que je change la date de début du test pour que la perf tombe à -10%... Donc le souci, c'est que le backtest t'indique ce qu'il aurait été parfait de faire dans le passé... mais ne promet rien pour le futur.
Le backtest ne dit pas ce qu'il aurait été parfait de faire, mais prend les signaux comme ils se présentent. Si tu commences avec $10,000 et que ton premier trade, perdant, emporte plus de 40% de ton capital (exemple du dernier backtest avec une plus grosse perte de $4,200) c'est très difficile de remonter ton capital sans utiliser de levier excessif.

D'ailleurs je ne comprends pas le dernier backtest, comment avec 3 positions perdantes, une perte max de $4,200 et une perte moyenne de $1,700 on arrive à un draw down de $65,000 :shock:
salador
Compagnon Jedi
Messages : 1025
Enregistré le : 14 sept. 2012 07:14

Re: Backtests en stock

Message non lu par salador »

Pour le drawdown, faudrait analyser l'affaire, je n'en ai pas le temps en ce moment, mais j'imagine ceci :
Imagine que tu es en gain de 200 000 euros, puis le marché se casse la figure, tu perds donc 65 000 euros, mais ton stop n'est pas déclenché, et le marché repart à la hausse.
Tu as donc bel et bien un drawdown de 65 000 euros, mais comme la perte n'a pas déclenché le stop, cela ne figure pas dans la perte maximummale.

Sur mon portefeuille perso, je suis en gain de 18% sur ces 6 derniers mois, avec un pic à 27%; et j'ai pourtant un max drawdown de 12%.

Donc, en résumé, je suis gagnant à long terme, mais mon portefeuille à trébuché de temps à autre, ce qui a provoqué ce drawdown de 12%.

Le biais du survivant : voila pourquoi je préconise la diversification sur au moins une 12aine de titres,
De plus, si je fais une sélection sur base fondamentale pour élaborer un bassin d'actions, il semble évident de faire ses devoirs, et chaque année au minimum, réanalyser les bilans.

Et si un titre est pourri, cela se répliquera sur le cours, qui passera sous sa moyenne mobile 50, pour ne plus repasser au dessus... et les ordre d'entrées ne passerons plus.
Logique, non?

Après, on peut encore plus diversifier : secteurs, pays, devises, continent etc etc etc

Ouvert à tout débat et toutes suggestions! :D
Avatar du membre
plataxis
Membre du Conseil Jedi
Messages : 5049
Enregistré le : 30 avr. 2014 03:12

Re: Backtests en stock

Message non lu par plataxis »

salador a écrit :
Données mensuelles

Conditions d'achat :
prix>MME50
RSI5 croise à la hausse sa MM2
Je mets le budget initial à chaque ordre, ici 10000 euros
salador a écrit :Optimisons, optimisons.

Donc, même principe d'achat, mais sortie de position si croisement à la baisse d'une moyenne mobile 10 calculée sur les plus bas.
Pas réussi à reproduire la MME50 (file ton code :mrgreen: ), à défaut j'ai pris une MM50 simple et... sur le DAX, 2 positions de février 2012 à septembre 2015 (j'ai pas plus d'historique sur PRT démo). Une gagnante plusieurs fois renforcée, et une perdante. C'est du buy and hold pyramidé finalement...

Je n'ai pas tout vérifié mais je note que les 2 premières entrées sont des bugs : on dirait que le code ne tient pas compte de l'instruction DEFPARAM PreLoadBars = 50 qui est censé indiquer qu'il faut au moins 50 barres d'historique avant de prendre une position (sinon pas de MM50... c'est bête un robot quand même :roll: )
Spoiler:
Screen Shot 12-23-15 at 02.17 PM.PNG
Screen Shot 12-23-15 at 02.17 PM.PNG (126.89 Kio) Vu 17682 fois

Code : #

// Définition des paramètres du code
DEFPARAM CumulateOrders = true
DEFPARAM PreLoadBars = 50

// Conditions pour ouvrir une position acheteuse
indicator1 = close
indicator2 = Average[50](close)
c1 = (indicator1 > indicator2)

indicator3 = RSI[5](close)
indicator4 = Average[2](RSI[5](close))
c2 = (indicator3 CROSSES OVER indicator4)

IF c1 AND c2 THEN
BUY 1 CONTRACT AT MARKET
ENDIF

// Conditions pour fermer une position acheteuse
indicator5 = low
indicator6 = Average[10](low)
c3 = (indicator5 CROSSES UNDER indicator6)

IF c3 THEN
SELL  AT MARKET
ENDIF
salador
Compagnon Jedi
Messages : 1025
Enregistré le : 14 sept. 2012 07:14

Re: Backtests en stock

Message non lu par salador »

Bah, ca semble logique que pour calculer une mm50, il faut au moins un historique de 50 mois avant de créer le 1er point.

peut être que ton tracker n' existait pas avant 2012? N'oublie pas que ces produits ne sont pas très anciens, surtout en Europe.

je crée les backtest via la création simplifiée, et la j' écris avec mon téléphone, mais j' essaie s'y penser ce soir