Bonjour,
Merci de votre aide par avance pour coder l’algo avec les paramètres suivants. J’ai tenté mais j’ai des bugs !
Marché dax.
On définit le niveau de sell : (racine carrée de la close de 17h35 du jour précédent – 0,05) le tout élevé au carré
On définit le niveau de buy : : (racine carrée de la close de 17h35 du jour précédent + 0,05) le tout élevé au carré
Tp1 sell = 40 points
Tp2 sell = 80 points
Tp3 sell = 120 points
Tp1 buy = 40 points
Tp2 buy = 80 points
Tp3 buy = 120 points
Sl = 40 points
Avec une condition en 5 mn :
Vente : le macd 12,26,9 doit être <0 en cas de vente et il doit être décroissant sur 3 bougies précédentes
Achat : le macd 12,26,9 doit être >0 en cas d’achat et il doit être croissant sur 3 bougies précédentes
Peut-on mettre un trailing stop dès que l’ordre est positif de 10 points ?
Peux-on faire des sorties partielles ? 50% de l’ordre au Tp1 et 25% au tp2 et 25% au tp3 ?
Cet algo doit se réajuster tous les jours en fonction de la close de la veille
Voici un premier jet, pas mal pour un Dimanche, à tester et valider point par point:
Quelques points importants à comprendre avant de l’utiliser :
- Le système utilise 4 contrats pour permettre les sorties partielles exactes (2 au TP1 = 50%, 1 au TP2 = 25%, 1 au TP3 = 25%). Adapte ce nombre si ton broker impose un minimum ou si tu veux trader en multiples de 4.
- La close de 17h35 est capturée via OpenTime = 173500. Si ton graphique est en UTC et non en heure locale, tu devras ajuster cette heure (16h35 UTC en été, 15h35 en hiver selon le broker).
// ============================================================
// STRATEGIE DAX - NIVEAUX CARRE DE CLOSE 17H35 J-1
// Timeframe chart : 5 minutes
// Taille de position : 4 contrats (50% + 25% + 25%)
// ============================================================
DEFPARAM CumulateOrders = False
// ------------------------------------------------------------
// PARAMETRES
// ------------------------------------------------------------
SLpts = 40 // Stop Loss en points
TP1pts = 40 // Prise de profit 1 (50% de la position)
TP2pts = 80 // Prise de profit 2 (25%)
TP3pts = 120 // Prise de profit 3 (25% restant)
TStrigger = 10 // Trailing stop actif apres +10 pts de profit
// ------------------------------------------------------------
// CAPTURE DE LA CLOSE 17H35 DE LA VEILLE
// Memorise la close de la bougie 17h35 une seule fois par jour
// ------------------------------------------------------------
IF OpenTime = 173500 AND OpenDay <> refDay THEN
refClose = close
refDay = OpenDay
ENDIF
// Calcul des niveaux : sell = (sqrt(refClose) - 0.05)^2
// buy = (sqrt(refClose) + 0.05)^2
IF refClose > 0 THEN
sqrtRef = sqrt(refClose)
sellLevel = (sqrtRef - 0.05) * (sqrtRef - 0.05)
buyLevel = (sqrtRef + 0.05) * (sqrtRef + 0.05)
ENDIF
// ------------------------------------------------------------
// MACD 12,26,9 SUR LE TIMEFRAME DU CHART (5 mn)
// ------------------------------------------------------------
myMacd = MACD[12,26,9](close)
// MACD < 0 et decroissant sur 3 bougies consecutives
macdBearish = (myMacd < 0) AND (myMacd < myMacd[1]) AND (myMacd[1] < myMacd[2]) AND (myMacd[2] < myMacd[3])
// MACD > 0 et croissant sur 3 bougies consecutives
macdBullish = (myMacd > 0) AND (myMacd > myMacd[1]) AND (myMacd[1] > myMacd[2]) AND (myMacd[2] > myMacd[3])
// ------------------------------------------------------------
// RESET DES FLAGS A LA FERMETURE DE CHAQUE POSITION
// ------------------------------------------------------------
IF NOT OnMarket THEN
tp1Done = 0
tp2Done = 0
trailActive = 0
trailSL = 0
ENDIF
// ------------------------------------------------------------
// PROFIT COURANT EN POINTS (mis a jour a chaque barre)
// ------------------------------------------------------------
IF LongOnMarket THEN
currentProfit = close - PositionPrice
ELSIF ShortOnMarket THEN
currentProfit = PositionPrice - close
ENDIF
// Activation du trailing stop des que le trade est positif de 10 pts
IF OnMarket AND currentProfit >= TStrigger * PointSize THEN
trailActive = 1
ENDIF
// ------------------------------------------------------------
// GESTION DE LA POSITION LONGUE
// ------------------------------------------------------------
IF LongOnMarket THEN
// Trailing stop : le SL remonte avec le cours, jamais en arriere
IF trailActive = 1 THEN
IF trailSL = 0 THEN
trailSL = PositionPrice + TStrigger * PointSize
ENDIF
trailSL = MAX(trailSL, close - TStrigger * PointSize)
SET STOP PRICE trailSL
ELSE
// Stop loss fixe initial de 40 pts
SET STOP PRICE (PositionPrice - SLpts * PointSize)
ENDIF
// TP1 : 50% = 2 contrats fermes a +40 pts
IF tp1Done = 0 AND close >= PositionPrice + TP1pts * PointSize THEN
SELL 2 CONTRACTS AT MARKET
tp1Done = 1
ENDIF
// TP2 : 25% = 1 contrat ferme a +80 pts
IF tp1Done = 1 AND tp2Done = 0 AND close >= PositionPrice + TP2pts * PointSize THEN
SELL 1 CONTRACTS AT MARKET
tp2Done = 1
ENDIF
// TP3 : 25% restant = 1 contrat ferme a +120 pts
IF tp2Done = 1 AND close >= PositionPrice + TP3pts * PointSize THEN
SELL 1 CONTRACTS AT MARKET
ENDIF
ENDIF
// ------------------------------------------------------------
// GESTION DE LA POSITION COURTE
// ------------------------------------------------------------
IF ShortOnMarket THEN
// Trailing stop : le SL descend avec le cours, jamais en arriere
IF trailActive = 1 THEN
IF trailSL = 0 THEN
trailSL = PositionPrice - TStrigger * PointSize
ENDIF
trailSL = MIN(trailSL, close + TStrigger * PointSize)
SET STOP PRICE trailSL
ELSE
// Stop loss fixe initial de 40 pts
SET STOP PRICE (PositionPrice + SLpts * PointSize)
ENDIF
// TP1 : 50% = 2 contrats fermes a -40 pts
IF tp1Done = 0 AND close <= PositionPrice - TP1pts * PointSize THEN
EXITSHORT 2 CONTRACTS AT MARKET
tp1Done = 1
ENDIF
// TP2 : 25% = 1 contrat ferme a -80 pts
IF tp1Done = 1 AND tp2Done = 0 AND close <= PositionPrice - TP2pts * PointSize THEN
EXITSHORT 1 CONTRACTS AT MARKET
tp2Done = 1
ENDIF
// TP3 : 25% restant = 1 contrat ferme a -120 pts
IF tp2Done = 1 AND close <= PositionPrice - TP3pts * PointSize THEN
EXITSHORT 1 CONTRACTS AT MARKET
ENDIF
ENDIF
// ------------------------------------------------------------
// ENTREES : declenchement au croisement des niveaux calcules
// ------------------------------------------------------------
IF sellLevel > 0 AND buyLevel > 0 AND NOT OnMarket THEN
// SHORT : le close passe sous le niveau sell + MACD bearish
IF close[1] >= sellLevel AND close < sellLevel AND macdBearish THEN
SELLSHORT 4 CONTRACTS AT MARKET
trailSL = 0
tp1Done = 0
tp2Done = 0
trailActive = 0
ENDIF
// LONG : le close passe au-dessus du niveau buy + MACD bullish
IF close[1] <= buyLevel AND close > buyLevel AND macdBullish THEN
BUY 4 CONTRACTS AT MARKET
trailSL = 0
tp1Done = 0
tp2Done = 0
trailActive = 0
ENDIF
ENDIF
Quelques remarques pratiques importantes :
- Le premier jour de lancement, refClose sera à 0 et aucun trade ne se déclenchera. C’est voulu : il faut qu’une bougie 17h35 soit passée pour initialiser les niveaux.
- Le trailing stop à 10 points est très serré sur le DAX. Si le trade atteint +10 pts et que le cours revient de 10 pts, il sort immédiatement. Tu peux ajuster TStrigger librement.
- Les TP partiels sont exécutés au market sur la close de la bougie en backtest. En live ils s’exécuteront sur la prochaine ouverture disponible.
- Après le TP1 il reste 2 contrats. Le SL et trailing continuent de protéger le reste de la position normalement puisque SET STOP PRICE s’applique à l’ensemble de la position ouverte.
Quelle réactivité ! Un super grand merci Nicolas !! Je vais tester et reviendrai sans doute vers toi avec des questions ou des ajustements !! Bonne fin de dimanche