Bonjour à tous,
Je tente de coder la fameuse “stratégie des tortues”.
Chose bizarre, la sortie ne s’effectue pas au plus bas des X dernières bougies (X = 10 pour le “système 1” et X = 20 pour le “système 2”).
Le stop loss à l’ATR20 semble bien fonctionner.
Sur la capture d’écran (DAX index, juste pour l’essai, alors que les tortues ne tardaient pas directement le Dax), on voit clairement que la dernière position “long” est maintenue bien plus qu’elle ne le devrait. On devrait sortir sur le plus bas des 10 dernières bougies.
De ce fait, mon code n’est pas profitable sur les matières premières entre autres.
Voyez-vous où se trouve l’erreur ?
Merci par avance.
Voici le code :
// SYSTEME DE TRADING DES TORTUES
// REGLES ORIGINALES
// 2 SYSTEMES : valeur 1 ou 2
SYSTEME = 1
// INDICATEURS
ATR20 = AverageTrueRange[20](close)
HAUT20 = Highest[20](high)
BAS20 = Lowest[20](low)
HAUT55 = Highest[55](high)
BAS55 = Lowest[55](low)
HAUT10 = Highest[10](high)
BAS10 = Lowest[10](low)
// ACHAT
IF not onmarket THEN
IF SYSTEME = 1 THEN
Buy at HAUT20 stop
ELSIF SYSTEME = 2 THEN
Buy at HAUT55 stop
ENDIF
// SORTIE ACHAT
IF SYSTEME = 1 THEN
sell at BAS10 stop
ELSIF SYSTEME = 2 THEN
sell at BAS20 stop
ENDIF
ENDIF
// VENTE
IF not onmarket THEN
IF SYSTEME = 1 THEN
Sellshort at BAS20 stop
ELSIF SYSTEME = 2 THEN
Sellshort at BAS55 stop
ENDIF
// SORTIE VENTE
IF SYSTEME = 1 THEN
exitshort at HAUT10 stop
ELSIF SYSTEME = 2 THEN
exitshort at HAUT20 stop
ENDIF
ENDIF
// STOP LOSS
Set stop loss ATR20
C’est tout à fait normal car le lowest low et le highest high évolue en temps réel, tu dois donc faire référence à leurs valeurs dans le passé pour effectuer des tests.
Je ne vois pas de taille de position dans les instructions de vente et d’achat non plus.
Merci.
Je vais donc définir le lowest[n](low[1]) et faire l’essai.
Si le code fonctionne bien je le mettrai en librairie.
Je n’ai pas mis d’instructions de taille de positions exprès, pas besoin : par défaut lorsqu’on ne met rien, PRT met “1 share”.
Bonjour,
Je pense avoir pourtant bien corrigé l’erreur, mais ça ne fonctionne pas mieux.
Voici le code.
Merci pour l’aide !
// SYSTEME DE TRADING DES TORTUES
// REGLES ORIGINALES
// 2 SYSTEMES : valeur 1 ou 2
SYSTEME = 1
// INDICATEURS
ATR20 = AverageTrueRange[20](close)
HAUT20 = Highest[20](high)
BAS20 = Lowest[20](low)
HAUT55 = Highest[55](high)
BAS55 = Lowest[55](low)
HAUT10 = Highest[10](high)
BAS10 = Lowest[10](low)
// ACHAT
IF not onmarket THEN
IF SYSTEME = 1 THEN
Buy at HAUT20 stop
ELSIF SYSTEME = 2 THEN
Buy at HAUT55 stop
ENDIF
// SORTIE ACHAT
IF SYSTEME = 1 THEN
sell at BAS10[1] stop
ELSIF SYSTEME = 2 THEN
sell at BAS20[1] stop
ENDIF
ENDIF
// VENTE
IF not onmarket THEN
IF SYSTEME = 1 THEN
Sellshort at BAS20 stop
ELSIF SYSTEME = 2 THEN
Sellshort at BAS55 stop
ENDIF
// SORTIE VENTE
IF SYSTEME = 1 THEN
exitshort at HAUT10[1] stop
ELSIF SYSTEME = 2 THEN
exitshort at HAUT20[1] stop
ENDIF
ENDIF
// STOP LOSS
Set stop loss ATR20
Bonjour, je pense que tes conditions de sorties d’achat et de sorties de vente seraient plus heureuses de vivre leur vie en dehors de tes boucles “if not onmarket” plutôt qu’en dedans, puisque par définition si tu veux sortir des positions, c’est que tu es “on market”. Là du coup tes boucles if de sorties ne sont jamais visitées par le programme.
En déplaçant 2 endif donc, ça donnerait (sans avoir cherché à vérifier si le reste était ok ou pas):
// SYSTEME DE TRADING DES TORTUES
// REGLES ORIGINALES
// 2 SYSTEMES : valeur 1 ou 2
SYSTEME = 1
// INDICATEURS
ATR20 = AverageTrueRange[20](close)
HAUT20 = Highest[20](high)
BAS20 = Lowest[20](low)
HAUT55 = Highest[55](high)
BAS55 = Lowest[55](low)
HAUT10 = Highest[10](high)
BAS10 = Lowest[10](low)
// ACHAT
IF not onmarket THEN
IF SYSTEME = 1 THEN
Buy at HAUT20 stop
ELSIF SYSTEME = 2 THEN
Buy at HAUT55 stop
ENDIF
ENDIF
// SORTIE ACHAT
IF SYSTEME = 1 THEN
sell at BAS10 stop
ELSIF SYSTEME = 2 THEN
sell at BAS20 stop
ENDIF
// VENTE
IF not onmarket THEN
IF SYSTEME = 1 THEN
Sellshort at BAS20 stop
ELSIF SYSTEME = 2 THEN
Sellshort at BAS55 stop
ENDIF
ENDIF
// SORTIE VENTE
IF SYSTEME = 1 THEN
exitshort at HAUT10 stop
ELSIF SYSTEME = 2 THEN
exitshort at HAUT20 stop
ENDIF
// STOP LOSS
Set stop loss ATR20