Code « Donchian – MACD »

Bonjour à tous,

 

Voici le genre de stratégie très simple, que je peux utiliser en trading manuel et qui s’avère efficace.

Le problème est que, même si l’entrée répond à des critères précis, la sortie que j’effectue en manuel est déterminée par ma propre estimation de l’évolution des cours (stop suiveur placé manuellement, ou take profit sur un dernier plus haut par exemple), et ceci ne peut pas être codé.

Pour tenter de backtester cette stratégie, j’ai donc mis en place un simple stop suiveur selon un canal de Donchian.

 

La stratégie s’applique sur le DAX, en graphes H1.

On passe un ordre « long » si le cours clôture au-dessus de la borne supérieure d’un canal de Donchian à 9 périodes, si l’histogramme MACD est positif et croissant

On sortait niveau de la borne inférieure du canal de Donchian

Pour les ordres « short« , c’est la même chose (conditions du MACD inversées évidemment), mais avec un Donchian à 7 périodes.

 

Exemple de trade à l’achat :

 

 

Voici le résultat du BACKTEST : 

DAX, spread 1 point, backtest au tick par tick

Comme vous le constatez, le backtest n’est pas très profitable, il y a sans doute moyen d’améliorer la stratégie.
Les résultats en trading manuel sont meilleurs, car on suit ses propres estimations visuelles.

 

 

Voici le code du BACKTEST :

Libre à vous de l’améliorer. Quelques pistes :

  • stop suiveur
  • take profit
  • filtre de tendance
  • périodes des canaux de Donchian
  • essai sur d’autres timeframes / valeurs
  • etc.

 

DEFPARAM CumulateOrders = False 

// TAILLE DES POSITIONS 
N = 2 

// MACD histogramme 
iMACD = MACD[12,26,9](close) 

// Donchian 
// Pour le DAX : A = 9 et V = 7 
A= 9 
V = 7 

DonchianSupA = highest[A](high) 
DonchianInfA = lowest[A](low) 
DonchianSupV = highest[V](high) 
DonchianInfV = lowest[V](low) 

// ACHAT
ca1 = iMACD > iMACD[1] 
ca2 = iMACD >= 0 
ca3 = close crosses over DonchianSupA[1] 

IF ca1 AND ca2 AND ca3 THEN 
buy N shares at market 
ENDIF 

sell at DonchianInfA stop 

// VENTE 
cv1 = iMACD < iMACD[1] 
cv2 = iMACD <= 0 
cv3 = close crosses under DonchianInfV[1] 
IF cv1 AND cv2 AND cv3 THEN 
sellshort N shares at market 
ENDIF 

exitshort at DonchianSupV stop

 

 

MISE A JOUR du 16/03/2018 : OPTIMISATION

Un de mes fidèles lecteurs m’a gracieusement fait parvenir son travail d’optimisation.
Toujours sur le DAX, en graphes H1. Spread 1 point, backtest au tick par tick.
Merci à lui !

Comme vous pouvez le constater, on joue toujours le breakout du canal de Donchian.
On y ajoute divers indicateurs de tendance pour confirmer l’entrée :

  • Donchian
  • RSI
  • moyennes mobiles

 

Je vous l’avais bien dit, que vous pourriez améliorer certaines de mes stratégies…

Bien entendu, je pourrais plancher sur toutes mes précédentes publications pur tenter d’améliorer mes stratégies… mais le temps me manque. Tant mieux si vous y parvenez !

 

 

Voici le code du BACKTEST :

// ALLEMAGNE 30 (DAX)
// H1

DEFPARAM CumulateOrders = False

// TAILLE DES POSITIONS
N = 2

// MACD histogramme
iMACD = MACD[12,26,9](close)

// Donchian
// Pour le DAX : A = 9 et V = 7
A= 9
V = 7

DonchianSupA = highest[A](high)
DonchianInfA = lowest[A](low)
DonchianSupV = highest[V](high)
DonchianInfV = lowest[V](low)
iRSI= RSI[4](close)

// ACHAT
ca1 = iMACD > iMACD[1]
ca2 = iMACD >= 0
ca3 = close crosses over DonchianSupA[1]
ca4 = iRSI > 63
ca5 = close >= average[50]

IF ca1 AND ca2 AND ca3 and ca4 and ca5 THEN
buy N shares at market
ENDIF

sell at DonchianInfA stop

// VENTE
cv1 = iMACD < iMACD[1]
cv2 = iMACD <= 0
cv3 = close crosses under DonchianInfV[1]
cv4 = iRSI < 31
cv5 = close <= average[500]

IF cv1 AND cv2 AND cv3 and cv4 and cv5 THEN
sellshort N shares at market
ENDIF

exitshort at DonchianSupV stop
Share Button