Bonjour,
J’ai essayé de faire un backtest d’une stratégie d’accumulation des positions mais quelque chose cloche.
La condition d’entrée est simple: moyenne mobile 5 passe au dessus de la moyenne mobile 20 si oui, j’achète pour 2000 euros. Pas de problème de côté là.
Ensuite je voudrais doubler la position chaque fois que l’action prend 5% par rapport au prix d’achat moyen, jusqu’à 32000 euros maximum. C’est là que ça coince…
Les ordres ne passent pas aux bons cours et je me retrouve avec 2 ordres à 32000 euros.
Voici le code
C1=(Average[5] CROSSES OVER Average[20])
IF NOT LongOnMarket AND C1 THEN
mont=2000
nbpos=0
BUY MONT CASH AT MARKET
ENDIF
IF LONGONMARKET AND CLOSE>POSITIONPRICE*1.05 AND nbpos=0 THEN
nbpos=1
mont=mont*2
BUY mont CASH AT MARKET
ENDIF
IF LONGONMARKET AND CLOSE<POSITIONPRICE*1.1 AND nbpos=1 THEN
nbpos=2
mont=mont*2
BUY mont CASH AT MARKET
ENDIF
IF LONGONMARKET AND CLOSE<POSITIONPRICE*1.15 AND nbpos=2 THEN
nbpos=3
mont=mont*2
BUY mont CASH AT MARKET
ENDIF
IF LONGONMARKET AND CLOSE<POSITIONPRICE*1.2 AND nbpos=3 THEN
nbpos=4
mont=mont*2
BUY mont CASH AT MARKET
ENDIF
IF LONGONMARKET AND CLOSE<POSITIONPRICE*1.25 AND nbpos=4 THEN
nbpos=5
BUY mont CASH AT MARKET
ENDIF
IF LONGONMARKET AND nbpos=0 and CLOSE<TRADEPRICE*0.95 THEN
SELL AT MARKET
ENDIF
SET TARGET %PROFIT 10
Bon, malgré tous ces dysfonctionnements, la stratégie prends quand même 273% sur 10 ans sur le LYXOR ETF LEV CAC 🙂
A première vue, je pense qu’il y a un problème sur les symboles ‘supérieur et inférieur’ dans ta stratégie à partir de la ligne 15. L’inversion des symboles fait que tu n’attends pas d’avoir passé un nouveau palier de prix pour reprendre position.
Ooops. Oui. Désolé.
Du coup cette stratégie d’accumulation à la hausse est beaucoup moins intéressante.
Elle est par contre plus intéressante en la jouant à la baisse. Mais j’ai toujours 2 ordres qui passent à 32000 € alors qu’après le premier achat nbpos=5 et j’ai bien mis nbpos=4 (ligne 33) comme condition de passage de l’ordre.
C1=(Average[5] CROSSES OVER Average[20])
IF NOT LongOnMarket AND C1 THEN
mont=2000
nbpos=0
BUY MONT CASH AT MARKET
ENDIF
IF LONGONMARKET AND CLOSE<(POSITIONPRICE*0.95) AND nbpos=0 THEN
nbpos=1
mont=mont*2
BUY mont CASH AT MARKET
ENDIF
IF LONGONMARKET AND CLOSE<(POSITIONPRICE*0.9) AND nbpos=1 THEN
nbpos=2
mont=mont*2
BUY mont CASH AT MARKET
ENDIF
IF LONGONMARKET AND CLOSE<(POSITIONPRICE*0.85) AND nbpos=2 THEN
nbpos=3
mont=mont*2
BUY mont CASH AT MARKET
ENDIF
IF LONGONMARKET AND CLOSE<(POSITIONPRICE*0.8) AND nbpos=3 THEN
nbpos=4
mont=mont*2
BUY mont CASH AT MARKET
ENDIF
IF LONGONMARKET AND CLOSE<(POSITIONPRICE*0.75) AND nbpos=4 THEN
nbpos=5
BUY mont CASH AT MARKET
ENDIF
SET TARGET %PROFIT 15
Après un rapide calcul, les lignes 30 et 35 achèteront bien pour 32.000€ cash.
La ligne 29 a pour résultat: mont = 16.000 x 2 = 32.000 , donc on achète 32.000 à la ligne 30 et à la ligne 35. Ou alors je n’ai pas bien compris la question, ou je n’ai pas encore bu assez de café ce matin 🙂
Non non, je te confirme que tu étais bien réveillé, c’est moi qui à force de l’avoir tourné dans tous les sens avait encore commis une erreur dans mon programme.
Merci de ton aide précieuse 🙂