Trailing Stop MFE avec TP partiel et stop ajusté
Forums › ProRealTime forum Français › Support ProOrder › Trailing Stop MFE avec TP partiel et stop ajusté
- This topic has 6 replies, 3 voices, and was last updated 2 months ago by bertrandpinoy.
-
-
10/20/2024 at 6:57 PM #239275
Bonsoir, je sollicite une aide pour parvenir a faire fonctionner une version du MFE avec clôture partielle et stop loss (positif) en cas de retracement après la prise du premier TP.
- Premier TP à 50 pips : Nous devons fermer exactement 50% de la position à 50 pips de profit.
- Niveau de stop pour la seconde moitié : Une fois le premier TP atteint, le nouveau stop loss doit être fixé à +10 pips par rapport au prix d’entrée initial, et non au niveau du premier TP ou au prix actuel.
Jai développé cette version mais en cas de retracement après le premier TD j obtiens UN second TP à -25 pips. Alors que je vis + 10…
- // — Trailing Stop MFE avec TP partiel et stop ajusté —
trailingstop = 120
initialStopLoss = 100 * pipsize // Stop loss initial à 100 pips
takeProfitTrigger = 50 * pipsize // Seuil pour le premier TP à 50 pips (qui donnera 25 pips puisque 0.5 contrat arreté)
adjustedStopLossAfterTP = 10 * pipsize // Stop loss ajusté à +10 pips après le premier TP (qui donnera 5 pips puisque 0.5 contrat restant arreté)// Variables pour la gestion des positions
isPartialProfitTaken = 0 // Indicateur pour savoir si le TP partiel a été pris
newSL = 0 // Stop loss dynamique
currentProfit = 0
partialProfitExitPrice = 0 // Enregistrer le prix au moment du TP partiel
initialTradePrice = 0 // Prix d’entrée initial
positionClosedAtAdjustedStop = 0 // Indicateur de fermeture de la deuxième moitié// — Réinitialisation des variables si aucune position n’est ouverte —
IF NOT ONMARKET THEN
MAXPRICE = 0
MINPRICE = close
priceexit = 0
isPartialProfitTaken = 0 // Réinitialisation du TP partiel
initialTradePrice = 0 // Réinitialiser le prix d’entrée initial
positionClosedAtAdjustedStop = 0
ENDIF// — Gestion des positions SHORT —
IF SHORTONMARKET THEN
MINPRICE = MIN(MINPRICE, close) // Sauvegarder le plus bas (MFE) de la position// 1. Si le profit atteint 50 pips et que le TP partiel n’a pas été pris, fermer la moitié
IF tradeprice(1) – MINPRICE >= takeProfitTrigger AND isPartialProfitTaken = 0 THEN
SELL 0.5 CONTRACT AT MARKET // Fermer la moitié de la position
isPartialProfitTaken = 1 // Marquer que le TP partiel a été pris
initialTradePrice = tradeprice(1) // Enregistrer le prix d’entrée initial
ENDIF// 2. Si le TP partiel a été pris, ajuster le stop loss pour la deuxième moitié à +10 pips du prix d’entrée initial
IF isPartialProfitTaken = 1 AND positionClosedAtAdjustedStop = 0 THEN
IF tradeprice(1) – close <= adjustedStopLossAfterTP THEN
EXITSHORT AT MARKET // Fermer la position restante avec au moins +10 pips de profit
positionClosedAtAdjustedStop = 1 // Marquer que la seconde moitié est fermée
ENDIF
ENDIF// 3. Activation du trailing stop une fois que le profit dépasse le trailingstop
IF tradeprice(1) – MINPRICE >= trailingstop * pointsize THEN
priceexit = MINPRICE + trailingstop * pointsize // Définir le prix de sortie (trailing stop)
ENDIF
ENDIF// — Gestion des positions LONG —
IF LONGONMARKET THEN
MAXPRICE = MAX(MAXPRICE, close) // Sauvegarder le plus haut (MFE) de la position// 1. Si le profit atteint 50 pips et que le TP partiel n’a pas été pris, fermer la moitié
IF MAXPRICE – tradeprice(1) >= takeProfitTrigger AND isPartialProfitTaken = 0 THEN
SELL 0.5 CONTRACT AT MARKET // Fermer la moitié de la position
isPartialProfitTaken = 1 // Marquer que le TP partiel a été pris
initialTradePrice = tradeprice(1) // Enregistrer le prix d’entrée initial
ENDIF// 2. Si le TP partiel a été pris, ajuster le stop loss pour la deuxième moitié à +10 pips du prix d’entrée initial
IF isPartialProfitTaken = 1 AND positionClosedAtAdjustedStop = 0 THEN
IF close – tradeprice(1) <= adjustedStopLossAfterTP THEN
SELL AT MARKET // Fermer la position restante avec au moins +10 pips de profit
positionClosedAtAdjustedStop = 1 // Marquer que la seconde moitié est fermée
ENDIF
ENDIF// 3. Activation du trailing stop une fois que le profit dépasse le trailingstop
IF MAXPRICE – tradeprice(1) >= trailingstop * pointsize THEN
priceexit = MAXPRICE – trailingstop * pointsize // Définir le prix de sortie (trailing stop)
ENDIF
ENDIF// — Application du stop loss initial (100 pips) —
IF LONGONMARKET THEN
SELL AT (tradeprice(1) – initialStopLoss) STOP // Stop loss pour les positions longues
ENDIFIF SHORTONMARKET THEN
EXITSHORT AT (tradeprice(1) + initialStopLoss) STOP // Stop loss pour les positions courtes
ENDIF// — Exit on trailing stop price levels —
IF ONMARKET AND priceexit > 0 THEN
EXITSHORT AT priceexit STOP
SELL AT priceexit STOP
ENDIF
10/21/2024 at 10:02 AM #239288Hola, voici un exemple pour les longs :
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152ema1=average[10,1](close)ema2=average[50,1](close)trailingstop = 120 * pipsizeinitialStopLoss = 100 * pipsizetakeProfitTrigger = 50 * pipsizeadjustedStopLossAfterTP = 10 * pipsizenum=2if not onmarket and ema1 crosses over ema2 thenbuy num contract at marketset stop ploss initialStopLossendifif onmarket thenif onmarket[1]=0 thenbuyprice=tradepricestopLong=buyprice-initialStopLosstp1Long=buyprice+takeProfitTriggerendifmaxprice=max(maxprice,close)if isPartialProfitTaken=0 thensell 0.5*COUNTOFLONGSHARES contract at tp1Long limitif high crosses over tp1Long thenisPartialProfitTaken=1stopLong=buyprice+adjustedStopLossAfterTPset stop price stopLongendifendifif maxprice-buyprice>=trailingstop thentrailLong=maxprice-trailingstopset stop ptrailing trailingstopendifelseisPartialProfitTaken=0maxprice=closetrailLong=closebuyprice=closetp1Long=closestopLong=closeendifgraphonprice buyprice coloured("green")graphonprice stopLong coloured("red")graphonprice tp1Long coloured("blue")graphonprice trailLong coloured("orange")graphonprice maxprice coloured("black")10/21/2024 at 6:58 PM #239306merci, mais la seconde cloture =-50pips
10/22/2024 at 4:11 PM #239336TRADEPRICE, après la première sortie, prend la valeur du prix de sortie, et non plus le prix d’entrée d’origine.
Pour cette raison je l’ai remplacé par ENTRYPRICE, qui est détecté à la clôture de la première bougie d’entrée.
Essayez ceci:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106// — Trailing Stop MFE avec TP partiel et stop ajusté —trailingstop = 120initialStopLoss = 100 * pipsize // Stop loss initial à 100 pipstakeProfitTrigger = 50 * pipsize // Seuil pour le premier TP à 50 pips (qui// donnera 25 pips puisque 0.5 contrat arreté)adjustedStopLossAfterTP = 10 * pipsize // Stop loss ajusté à +10 pips après le premier// TP (qui donnera 5 pips puisque 0.5 contrat// restant arreté)// Variables pour la gestion des positionsisPartialProfitTaken = 0 // Indicateur pour savoir si le TP partiel a été prisnewSL = 0 // Stop loss dynamiquecurrentProfit = 0partialProfitExitPrice = 0 // Enregistrer le prix au moment du TP partielinitialTradePrice = 0 // Prix d’entrée initialpositionClosedAtAdjustedStop = 0 // Indicateur de fermeture de la deuxième moitié// — Réinitialisation des variables si aucune position n’est ouverte —IF NOT ONMARKET THENIF close crosses under average[100,0](close) thensellshort 1 Contract at marketelsIF close crosses over average[100,0](close) thenbuy 1 Contract at marketendifMAXPRICE = 0MINPRICE = closepriceexit = 0isPartialProfitTaken = 0 // Réinitialisation du TP partielinitialTradePrice = 0 // Réinitialiser le prix d’entrée initialpositionClosedAtAdjustedStop = 0ENDIF// — Gestion des positions SHORT —IF SHORTONMARKET THENIF Not OnMarket[1] THENEntryPrice = TradePriceENDIFMINPRICE = MIN(MINPRICE, close) // Sauvegarder le plus bas (MFE) de la position// 1. Si le profit atteint 50 pips et que le TP partiel n’a pas été pris, fermer la moitiéIF EntryPrice - MINPRICE >= takeProfitTrigger AND isPartialProfitTaken = 0 THENEXITSHORT 0.5 CONTRACT AT MARKET // Fermer la moitié de la positionisPartialProfitTaken = 1 // Marquer que le TP partiel a été prisinitialTradePrice = EntryPrice - adjustedStopLossAfterTP// Enregistrer le prix d’entrée initialENDIF// 2. Si le TP partiel a été pris, ajuster le stop loss pour la deuxième moitié à +10 pips du prix d’entrée initialIF isPartialProfitTaken = 1 AND positionClosedAtAdjustedStop = 0 THENIF close <= initialTradePrice THENEXITSHORT AT MARKET // Fermer la position restante avec au moins +10 pips de profitpositionClosedAtAdjustedStop = 1 // Marquer que la seconde moitié est ferméeENDIFENDIF// 3. Activation du trailing stop une fois que le profit dépasse le trailingstopIF EntryPrice - MINPRICE >= trailingstop * pointsize THENpriceexit = MINPRICE + trailingstop * pointsize // Définir le prix de sortie (trailing stop)ENDIFENDIF// — Gestion des positions LONG —IF LONGONMARKET THENIF Not OnMarket[1] THENEntryPrice = TradePriceENDIFMAXPRICE = MAX(MAXPRICE, close) // Sauvegarder le plus haut (MFE) de la position// 1. Si le profit atteint 50 pips et que le TP partiel n’a pas été pris, fermer la moitiéIF MAXPRICE - EntryPrice >= takeProfitTrigger AND isPartialProfitTaken = 0 THENSELL 0.5 CONTRACT AT MARKET // Fermer la moitié de la positionisPartialProfitTaken = 1 // Marquer que le TP partiel a été prisinitialTradePrice = EntryPrice + adjustedStopLossAfterTP// Enregistrer le prix d’entrée initialENDIF// 2. Si le TP partiel a été pris, ajuster le stop loss pour la deuxième moitié à +10 pips du prix d’entrée initialIF isPartialProfitTaken = 1 AND positionClosedAtAdjustedStop = 0 THENIF close <= initialTradePrice THENSELL AT MARKET // Fermer la position restante avec au moins +10 pips de profitpositionClosedAtAdjustedStop = 1 // Marquer que la seconde moitié est ferméeENDIFENDIF// 3. Activation du trailing stop une fois que le profit dépasse le trailingstopIF MAXPRICE - EntryPrice >= trailingstop * pointsize THENpriceexit = MAXPRICE - trailingstop * pointsize // Définir le prix de sortie (trailing stop)ENDIFENDIF// — Application du stop loss initial (100 pips) —IF LONGONMARKET THENSELL AT (EntryPrice - initialStopLoss) STOP // Stop loss pour les positions longuesENDIFIF SHORTONMARKET THENEXITSHORT AT (EntryPrice + initialStopLoss) STOP // Stop loss pour les positions courtesENDIF// — Exit on trailing stop price levels —IF ONMARKET AND priceexit > 0 THENEXITSHORT AT priceexit STOP//SELL AT priceexit STOPENDIF//graphonprice TradePricegraphonprice priceexit coloured("Green")graph PositionPerf * PositionPrice / pipsize10/22/2024 at 7:27 PM #239347merci Roberto mais ce n est pas tout a fait ça encore.
La version que je poste ici est très proche de ce que je veux. Le seul problème est qu’après le premier TP partiel, si le prix redescend, j ai un second TP à – 25 pips. Et ceci précisément à 100 pips en dessous du niveau du premier TP. Je sèche.
trailingstop = 183
initialStopLoss = 100 * pipsize // Stop loss à 100 pips
takeProfitTrigger = 50 * pipsize // Seuil pour le premier TP à 50 pips
adjustedStopLossAfterTP = 10 * pipsize // Si le profit retombe à +10 pips, on coupe la position// Variables pour la gestion des positions
isPartialProfitTaken = 0 // Indicateur pour savoir si le TP partiel a été pris
currentProfit = 0
partialProfitExitPrice = 0 // Enregistrer le prix au moment du TP partiel// Reset des variables quand aucune position n’est ouverte
IF NOT ONMARKET THEN
MAXPRICE = 0
MINPRICE = close
isPartialProfitTaken = 0 // Réinitialisation du TP partiel
ENDIF// —- GESTION DES POSITIONS LONG —-
IF LONGONMARKET THEN
currentProfit = close – tradeprice(1)
MAXPRICE = MAX(MAXPRICE, close) // Sauvegarder le plus haut (MFE) de la position// —- Première partie : Gestion du TP partiel —-
IF MAXPRICE – tradeprice(1) >= takeProfitTrigger AND isPartialProfitTaken = 0 THEN
SELL 0.5 CONTRACT AT MARKET // Fermer la moitié de la position à +50 pips
isPartialProfitTaken = 1 // Marquer que le TP partiel a été pris
partialProfitExitPrice = tradeprice(1) + adjustedStopLossAfterTP // Fixer le nouveau stop à +10 pips par rapport à l’entrée initiale
ENDIF// —- Deuxième partie : Gestion du retracement —-
IF isPartialProfitTaken = 1 THEN
// Si le prix descend à +10 pips ou moins après la prise partielle, on coupe la position restante
IF close <= partialProfitExitPrice THEN
SELL AT MARKET // Fermer la position restante
ENDIF
ENDIF
ENDIF// —- Application du Stop Loss initial —-
IF LONGONMARKET THEN
SELL AT (tradeprice(1) – initialStopLoss) STOP // Stop loss pour les positions longues
ENDIF10/23/2024 at 9:57 AM #239360Où est écrit -25 ?
10/23/2024 at 11:43 AM #239363Nul part. C’est lors de l’exécution du BT. Bizarre.
-
AuthorPosts
Find exclusive trading pro-tools on