Bonjour,
J’essaie de faire un backtest avec une stratégie utilisant 2 MACD. Lorsque mes conditions d’achat sont réuni un achat se fait. Je ne place pas de take profit, uniquement un Stop Loss que j’actualise dans le sens de mon trade.
J’utilise un MACD[50,200,25] et un MACD[12.26.9]. Le but est d’acheté lorsque :
- Le MACD[50,200,25] croise à la hausse la ligne 0
- MACD[50,200,25]>0 et MACD[12.26.9] croise à la hausse la ligne 0
La condition qui actualise le SL : MACD[12.26.9] croise à la baisse la ligne 0.
Voici mon code :
DEFPARAM CUMULATEORDERS = FALSE
// Paramètres du MACD
MACDHistLong = MACD[50,200,50](close)
MACDHistShort = MACD[12,26,9](close)
// Paramètre de l'ATR pour le calcul du stop
myATR = 1.5 * AverageTrueRange[14](close)
// Conditions d'achat
ConditionAchat = (MACDHistLong crosses over 0) OR (MACDHistLong > 0 AND MACDHistShort crosses over 0)
// Conditions de sortie (modification du stop loss)
ConditionSortie = (MACDHistLong > 0 AND MACDHistShort crosses under 0)
// Ouverture de la position
IF NOT LONGONMARKET AND ConditionAchat THEN
// Calcul du niveau du stop initial
StopLoss = low[1] - myATR
// Ouverture de la position
BUY 10 CONTRACT AT market
ENDIF
// Mise à jour du stop loss lorsque le MACD(12,26,9) devient négatif
IF LONGONMARKET AND ConditionSortie THEN
// Calcul du nouveau stop
StopLoss = low[1] - myATR
// Mise à jour du stop loss
SET STOP Loss StopLoss
ENDIF
Lorsque je lance le backtest j’ai une seule position qui est ouverte, pas au bon endroit et de plus cette position reste maintenu jusqu’à la date actuelle (Buy and Hold) alors que ce n’est pas ce qui est demandé.
Ce qui est demandé est que le trade doit se terminer lorsque le SL est touché. Et ainsi de suite.
J’ai une autre question qui concerne le risque le management, je souhaite utilise la règle des 2% d’Alexander Elder pour le calcul de la taille de la position dans mon backtest. C’est à dire :
Risque max par trade à 2% du capital.
Taille de la position 0.02*Capital / (prix d’entré – SL initial) arrondi au inférieur.
Merci d’avance pour votre aide.
J’ai également programmé ce code en mode indicateur et l’affichage des flèches vers le haut et le bas sont correcte, voici le code de l’indicateur :
MACDHistLong = MACD[50,200,25](close)
MACDHistShort = MACD[12,26,9](close)
atr = AverageTrueRange[14](close)*2.5
// Condition pour la flèche vers le haut (achat)
ConditionAchat = (MACDHistLong crosses over 0) OR (MACDHistLong > 0 AND MACDHistShort crosses over 0)
// Condition pour la flèche vers le bas (sortie)
ConditionSortie = (MACDHistLong > 0 AND MACDHistShort[1] crosses over 0)
IF MACDHistLong > 0 THEN
BACKGROUNDCOLOR(50, 180, 50, 100)
ENDIF
// Affichage des flèches
IF ConditionAchat THEN
DRAWARROWUP(barindex, LOW - atr)COLOURED(0,0,0,100)
ENDIF
IF ConditionSortie THEN
DRAWARROWDOWN(barindex, HIGH + atr)COLOURED(0,0,0,100)
ENDIF
RETURN
Merci d’avance pour vos retours et conseils.