Ce n’est pas la peine d’insister ! (stratégie MM200, OsMA, ADX)

Bonjour à tous,

 

Il m’a été soumis une idée de stratégie jugée très intéressante.

Elle est simple, et comme les critères sont précis, elle peut parfaitement être backtestée et automatisée.

 

 

On entre LONG si : 

– cours > MM200

– ADX(14) > 25 (volatilité suffisante)

– OsMA croise au-dessus de zéro (un peu comme un MACD)

 

On sort si : 

– cours clôture sous la MM200 (stop loss)

– Take Profit niveau 1 à 1x l’ATR(14)

– Take Profit niveau 2 à 2x l’ATR(14)

 

Pour les SHORTS : règles inverses évidemment.

 

Pas à pas, je vous montre comment coder cette stratégie.

Au début je pensais que la stratégie n’était pas efficace, bien que présentée par un de mes contacts d’après une vidéo vue sur YouTube…

 

Mais en y regardant de plus près, il y a un petit bug que je trouve étonnant : je ne pense pas avoir fait d’erreur de code, et pourtant je vois bien qu’il y a un problème au niveau du Take Profit Niveau 2.

Peut-être que l’un d’entre vous m’apportera un correctif que je pourrais publier ?

En attendant… pas la peine d’insister en ce qui me concerne. Je laisse de côté.

 

Deux points à retenir de cette leçon : 

 

1) Avant de se lancer en réel avec une stratégie, il faut la backtester, manuellement ou avec un logiciel

2) Sur 10 stratégies que j’essaie de coder, 1 seule se révèle non perdante ou positive. Sur 10 stratégies positives, & seule se révèle réellement profitable… Les « perles » sont rares… vous comprenez pourquoi je n’utilise pas 100 stratégies en trading algorithmique, mais juste quelques unes (celles qui sont présentes sur le site doctrading).

Bien à vous,

 

Voici le CODE DU BACKTEST (à améliorer) :

 

EN ROUGE : le correctif pour que les clôtures de position s’effectuent bien aux 2 niveaux de take profit.

Ce n’est malheureusement pas plus efficace !

Defparam cumulateorders = false

n = 2

// INDICATEURS
fastMA = exponentialAverage[12](close)
slowMA = exponentialAverage[26](close)
myMACD = fastMA - slowMA
myLine = Average[9](myMACD)

iOSMA = myMACD - myLine
iATR = AverageTrueRange[14](close)
iADX = ADX[14]
iSMA = average[200](close)

// LONG

C1 = close > iSMA
C2 = iADX > 25
C3 = iOSMA crosses over 0

IF C1 and C2 and C3 and not onmarket THEN
NivEntree = close
NivATR = iATR
Buy n shares at market
ENDIF

IF close crosses under iSMA THEN
Sell at market
ENDIF

IF countoflongshares = N THEN
Sell (n/2) share at (NivEntree + NivATR) limit
ENDIF

IF countoflongshares = N/2 THEN
Sell (n/2) share at (NivEntree + 2*NivATR) limit
ENDIF

 

 

 

 

Share Button