stop suiveur fonction des plus bas précédents

Viewing 8 posts - 1 through 8 (of 8 total)
  • Author
    Posts
  • #260982 quote
    ludwig148
    Participant
    New

    Bonjour,

    Mon programme est équipé d’un stop suiveur dont je souhaite qu’il fasse ceci :

    -il est croissant

    -dans les 4 premières bougies après l’ouverture de position, le stop est 2% sous le plus bas des 3 jours précédents

    -ensuite, le stop est 1% sous le plus bas des 2 jours précédents

    Malheureusement, cela entraine à l’exécution de nombreuses positions qui sont ouvertes et fermées instantanément (achat et vente en même temps, donc opération nulle) sans que je comprenne pourquoi, et alors même que cela part bien à la hausse et ne devrait pas occasionner de déclenchement de stop.

    Merci d’avance pour votre aide.

    Voici le code :

    DEFPARAM CumulateOrders = False
    
    // Paramètres
    StochK = 14
    StochD = 3
    Slowing = 5
    
    // Calcul Stochastique
    MyStoch = Stochastic[StochK, StochD](Close)
    MySignal = Average[Slowing](MyStoch)
    
    Cond = (MyStoch CROSSES OVER MySignal)
    
    // Variables
    Once TrailingStop = 0
    Once CapitalInitial = 10000
    
    if not longonmarket then
       TrailingStop = 0
       Duree = 0
       if Cond then
          BUY 1 contracts at market
       endif
    endif
    
    if LongOnMarket then
       Duree = Duree + 1
       if Duree <= 4 then
          level = lowest[3](low)*0.98
       else
          level = lowest[2](low)*0.99
       endif
       TrailingStop=max(TrailingStop,level)
       SET STOP PRICE TrailingStop
    endif
    
    #260997 quote
    Nicolas
    Keymaster
    Legend

    Le set stop price est sans doute toujours actif au lancement du nouvel ordre d’achat.

    Ajoute un set stop price 0 pour le réinitialiser.

    Iván González thanked this post
    #261001 quote
    Iván González
    Moderator
    Legend

    Bonjour. Il vous suffit de déplacer l’instruction `set stop price` hors de la condition. Avec cette modification, vous verrez que cela fonctionne. De plus, d’après votre message, je crois comprendre que vous souhaitez placer le stop au plus bas des trois barres précédentes. C’est exactement ça.

     lowest[3](low)[1]*0.98
    

    Bref, je vous enverrai votre code avec uniquement la première modification.

      DEFPARAM CumulateOrders = False
    
    // Paramètres
    StochK = 14
    StochD = 3
    Slowing = 5
    
    // Calcul Stochastique
    MyStoch = Stochastic[StochK, StochD](Close)
    MySignal = Average[Slowing](MyStoch)
    
    Cond = (MyStoch CROSSES OVER MySignal)
    
    // Variables
    Once TrailingStop = 0
    Once CapitalInitial = 10000
    
    if not longonmarket then
       TrailingStop = 0
       Duree = 0
       if Cond then
          BUY 1 contracts at market
       endif
    endif
    
    if LongOnMarket then
       Duree = Duree + 1
       if Duree <= 4 then
          level = lowest[3](low)*0.98
       else
          level = lowest[2](low)*0.99
       endif
       TrailingStop=max(TrailingStop,level)
       //   SET STOP PRICE TrailingStop
    endif
    SET STOP PRICE TrailingStop
    graphonprice level coloured("blue")
    graphonprice TrailingStop coloured("red")
    


    #261020 quote
    ludwig148
    Participant
    New

    Bonjour, et merci pour vos réponses rapides.

    Effectivement, cela fonctionne mieux.

    J’ai encore quelques soucis avec les décalages dans le temps (+ ou -1), notamment par rapport à la bougie d’ouverture.

    J’y travaille.

    Cordialement.

    #261025 quote
    ludwig148
    Participant
    New

    Je me rends compte à l’instant que le programme ne sors maintenant jamais sur la bougie d’achat, mais au mieux sur la suivante.

    Pourtant, une entrée sur une grande englobante baissière rouge devrait le faire stopper pendant la bougie.

    J’ai aussi rajouté une variable basée sur le prix d’achat, pour que cela ne descende jamais plus d’1% en-dessous.


    J’imagine que la commande pour sortir sur la bougie d’achat n’est pas bien positionnée ?

    DEFPARAM CumulateOrders = False
    
    // Paramètres
    StochK = 14
    StochD = 3
    Slowing = 5
    
    // Calcul Stochastique
    MyStoch = Stochastic[StochK, StochD](Close)
    MySignal = Average[Slowing](MyStoch)
    
    Cond = (MyStoch CROSSES OVER MySignal)
    
    // Variables
    Once CapitalInitial = 10000
    
    if not longonmarket then
    TrailingStop = 0
    Duree = 0
    if Cond then
    BUY 1 contracts at market
    prix = tradeprice
    endif
    endif
    
    if LongOnMarket then
    Duree = Duree + 1
    if Duree <= 4 then
    level = max(prix*0.99,lowest[3](low)[1]*0.98)
    else
    level = lowest[2](low)[1]*0.99
    endif
    TrailingStop=max(TrailingStop,level)
    //   SET STOP PRICE TrailingStop
    endif
    SET STOP PRICE TrailingStop
    graphonprice level coloured("blue")
    graphonprice TrailingStop coloured("red")
    
    #261026 quote
    ludwig148
    Participant
    New

    avec le code mieux indenté :

    DEFPARAM CumulateOrders = False
    
    // Paramètres
    StochK = 14
    StochD = 3
    Slowing = 5
    
    // Calcul Stochastique
    MyStoch = Stochastic[StochK, StochD](Close)
    MySignal = Average[Slowing](MyStoch)
    
    Cond = (MyStoch CROSSES OVER MySignal)
    
    // Variables
    Once CapitalInitial = 10000
    
    if not longonmarket then
      TrailingStop = 0
      Duree = 0
      if Cond then
        BUY 1 contracts at market
        prix = tradeprice
      endif
    endif
      
    if LongOnMarket then
      Duree = Duree + 1
      if Duree <= 4 then
        level = max(prix*0.99,lowest[3](low)[1]*0.98)
      else
        level = lowest[2](low)[1]*0.99
      endif
      TrailingStop=max(TrailingStop,level)
      //   SET STOP PRICE TrailingStop
    endif
    SET STOP PRICE TrailingStop
    //graphonprice level coloured("blue")
    //graphonprice TrailingStop coloured("red")
    
    #261030 quote
    Nicolas
    Keymaster
    Legend

    La variable “prix” n’est pas connu avec tradeprice lors du lancement de l’ordre, puisque tradeprice sera évalué au prochain chandelier avec le vrai prix d’ouverture (ordre envoyé au prochain Open, pour mémoire). Donc plutôt utiliser:

    prix = close
    

    Close étant le dernier prix connu. Le next open pourrait être sensiblement différent toutefois.

    Si tu utilises TRADEPRICE directement, alors tu utilises le dernier prix connu d’ouverture d’un ordre.


    #261121 quote
    ludwig148
    Participant
    New

    D’accord, merci pour votre réponse.

Viewing 8 posts - 1 through 8 (of 8 total)
  • You must be logged in to reply to this topic.

stop suiveur fonction des plus bas précédents


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
ludwig148 @davidm1 Participant
Summary

This topic contains 7 replies,
has 3 voices, and was last updated by ludwig148
2 weeks ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 05/11/2026
Status: Active
Attachments: No files
Logo Logo
Loading...