ProRealTime
Un Forum pour discuter des méthodes de trading que nous utilisons, de nos recherches...

Backtests en stock

par plataxis » 14 déc. 2015 21:24

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: ).

Re: Backtests en stock

par plataxis » 16 déc. 2015 21:12

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 1037 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

Re: Backtests en stock

par plataxis » 20 déc. 2015 18:21

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 1011 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

Re: Backtests en stock

par plataxis » 20 déc. 2015 18:33

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 1009 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

Re: Backtests en stock

par salador » 20 déc. 2015 22:10

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

Re: Backtests en stock

par plataxis » 21 déc. 2015 09:56

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...

Re: Backtests en stock

par salador » 21 déc. 2015 10:37

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...

Re: Backtests en stock

par plataxis » 21 déc. 2015 11:39

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 :)

Re: Backtests en stock

par salador » 22 déc. 2015 17:05

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 930 fois
airliquide.PNG
airliquide.PNG (115.37 Kio) Vu 930 fois
Amgen.PNG
Amgen.PNG (111.22 Kio) Vu 930 fois
BIC.PNG
BIC.PNG (111.79 Kio) Vu 930 fois
C'est pas beau tout ça?

Re: Backtests en stock

par salador » 22 déc. 2015 17:12

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 928 fois

Re: Backtests en stock

par salador » 22 déc. 2015 17:42

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

Re: Backtests en stock

par salador » 22 déc. 2015 19:09

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 688 fois

Re: Backtests en stock

par plataxis » 22 déc. 2015 20:48

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 ?

Re: Backtests en stock

par salador » 22 déc. 2015 22:08

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...

Re: Backtests en stock

par salador » 22 déc. 2015 22:31

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?

Re: Backtests en stock

par plataxis » 23 déc. 2015 08:36

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...

Re: Backtests en stock

par Mister Hyde » 23 déc. 2015 11:05

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:

Re: Backtests en stock

par salador » 23 déc. 2015 12:44

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

Re: Backtests en stock

par plataxis » 23 déc. 2015 14:23

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 633 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

Re: Backtests en stock

par salador » 23 déc. 2015 15:45

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

Sujets similaires
TakaTicks : Backtests et entraînement au scalping
Fichier(s) joint(s) par nuts » 02 oct. 2014 19:22 (563 Réponses)
Programmation de backtests en ligne sur actions US
par cimourdain » 16 sept. 2015 20:27 (2 Réponses)
Optimiser une variable dans un backtests PRT
par falex » 16 janv. 2016 13:58 (2 Réponses)
Quel ordinateur pour faire des backtests ?
par jmd24 » 14 janv. 2018 08:54 (8 Réponses)
ProOrder, IG, Backtests et autres divertissements de weekend
Fichier(s) joint(s) par vschmitt » 22 sept. 2018 15:12 (6 Réponses)
Sauvegarder Indicateurs, Alertes, Backtests, Listes, Spreads
Fichier(s) joint(s) par Ozmizrak » 13 oct. 2020 15:24 (3 Réponses)
Delta stock
par Amarantine » 15 avr. 2013 13:12 (36 Réponses)
SET50 , SET100 The Stock Exchange of Thailand
par Benoist Rousseau » 27 mai 2014 17:03 (1 Réponses)
Shanghai-Hong Kong Stock Connect
par Rogue » 10 nov. 2014 11:10 (1 Réponses)
Se couvrir avec des Stock Options.
par juju075 » 22 déc. 2014 10:40 (6 Réponses)