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é

Viewing 7 posts - 1 through 7 (of 7 total)
  • #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
      ENDIF

      IF 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

    #239288

    Hola, voici un exemple pour les longs :

    #239306

    merci, mais la seconde cloture =-50pips

    #239336

    TRADEPRICE, 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:

     

    #239347

    merci 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
    ENDIF

    #239360

    Où est écrit -25 ?

     

    #239363

    Nul part. C’est lors de l’exécution du BT. Bizarre.

Viewing 7 posts - 1 through 7 (of 7 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login