Backtest avec un Stop actif après un niveau atteint par les cours

Viewing 8 posts - 1 through 8 (of 8 total)
  • Author
    Posts
  • #260607 quote
    Lamericaine
    Participant
    Average

    Je ne parviens pas à programmer un backtest qui comprendrait les conditions suivantes:

    • soit une action X
    • Si mes conditions d’achat sont réunies, j’achète pour 1000 euros d’actions X
    • Dans ce cas, mon programme de backtest fait état d’un objectif de 20 %.
    • A contrario, si l’action part du mauvais côté, je me protège avec un stop à – 5%.

    Jusque là je suis en mesure de programmer ce backtest qui pourrait s’écrire ainsi:

    DEFPARAM cumulateOrders = true



    c1 = A

    c2 = B

    c3 = C


    Achat = c1 and c2 and c3


    If ACHAT then

    buy 1000 cash at market


    set stop %loss 5

    //ENDIF


    La programmation que j’aimerais ajouter est la suivante:

    Si le cours progresse comme je le souhaite, c’est à dire en hausse et dépasse un seuil de 8%, puis rechute jusqu’à toucher un autre seuil fixé à 4%, je coupe ma position.

    Et là, je “sèche” pour terminer la programmation de ce backtest.

    Pouvez-vous m’aider à la rédiger svp ?

    #260610 quote
    turame
    Participant
    Master

    Ton code semble bon donc je ne vois que 2 explications possibles :

    -> Soit tes conditions sont trop restrictives pour prendre ne serait-ce qu’une seule position.

    -> Soit l’actif que tu trades n’est pas une action. En effet l’instruction CASH n’est pas utilisable avec le forex ou les futurs. A ta place je remplacerait l’instruction CASH par SHARES.

    robertogozzi and Iván González thanked this post
    #260615 quote
    Lamericaine
    Participant
    Average

    Je me suis vraisemblablement mal expliqué . Non, le problème n’est pas dans mes conditions qui pourraient, effectivement, être trop restrictives. Mais, de toute façon, les conditions, quelles qu’elles soient, ne sont pas en cause. Le début de ma programmation est correcte (encore que j’ai oublié de placer le code de l’objectif, ce que je corrige ici):

    DEFPARAM cumulateOrders = true

    c1 = A

    c2 = B

    c3 = C

    Achat = c1 and c2 and c3

    If ACHAT then

    buy 1000 cash at market

    set stop %loss 5

    set target %profit 20

    endif


    Ce que je voudrais, c’est INSERER dans le corps de la programmation de ce backtest, un code qui COMMANDE CLOTURER LA POSITION si le cours de l’action, une fois l’achat de 1000 € effectué, monte de +8% ou davantage ( sans atteindre l’objectif de 20%), puis chute jusqu’à atteindre un seuil de +4 % (par rapport au niveau de l’achat), de telle façon qu’on puisse sécuriser ce niveau de +4%.


    Merci pour votre aide


    #260619 quote
    JS
    Participant
    Veteran

    Bonjour,

    Tu peux ajouter deux conditions supplémentaires qui suivent la « PositionPerformance » en pourcentage (PositionPerf * 100)…

    
    If PositionPerf*100>=8 then
    T8=1
    EndIf
    
    
    If T8=1 and PositionPerf*100<=4 then
    Sell at Market
    T8=0
    EndIf
    
    
    
    Iván González thanked this post
    #260620 quote
    JS
    Participant
    Veteran

    P.S. Si tu ne veux pas placer des ordres cumulatifs (renforcer une position), « DefParam CumulateOrders= » doit être réglé sur « False »…

    #260623 quote
    turame
    Participant
    Master

    @Lamericain oups désolé, j’ai lu trop vite. Pas beaucoup dormi cette nuit et je suis dans le coaltar depuis ce matin. Ca aurait pu me jouer des tours dans mon trading mais heureusement je m’en sors bien avec un peu de chance.

    Pour revenir à ta demande voici le code (à essayer) :


    Performance=(high-tradeprice)/tradeprice*100
    
    
    if performance>=8 then
    objectif8=1
    endif
    
    
    if longonmarket and objectif8=1 and performance<=4 then
    sell at market
    objectif8=0
    endif
    


    La première ligne est à mettre au début de ton code, en tout cas avant la prise de position. Ensuite le reste va à la fin.

    Le code de @JS semble pas mal mais sauf erreur il ne prend en compte que la clôture et non le plus haut de la bougie qui vient de clôturer.



    #260648 quote
    TommyLee
    Participant
    Junior

    merci JS . Ton concours m’est précieux, et grâce à toi j’ai obtenu le code correspondant à ma demande. Mes remerciements !


    Quant à ton PS : “

    JS

    Participant

    Veteran

    P.S. Si tu ne veux pas placer des ordres cumulatifs (renforcer une position), « DefParam CumulateOrders= » doit être réglé sur « False »…”, il devance une autre de mes difficultés en matière de codage des backtests :

    Lorsqu’on rédige un codage de n’importe quel backtest , on peut utiliser , en première ligne, la précision suivante :

    • soit, DefParam CumulateOrders= false : cela signifie que si une valeur réunit les conditions requises et que, avant que cette première prise de position atteigne son objectif ou soit stoppée, une nouvelle prise de position soit rendue possible sur cette même valeur ( les conditions étant, là-aussi, réunies),, le backtest ne retient pas cette deuxième prise de position potentielle.
    • soit, DefParam CumulateOrders= true, cela signifie que si une valeur réunit les conditions requises et que, avant que cette première prise de position atteigne son objectif ou soit stoppée, une nouvelle prise de position soit rendue possible sur cette même valeur ( les conditions étant, là-aussi, réunies), on observe que les deux prises de position sont CUMULEES et l’objectif de ce cumul devient CELUI DE LA DEUXIEME POSITION ( le stop également).


    Personnellement, je souhaiterais savoir s’il existe une troisième option possible ( au lieu de DefParam CumulateOrders= false ou DefParam CumulateOrders= true) qui permettre que le backtest prenne en compte, lorsque les réunions de tri d’un backtest sont réunies, deux ( ou davantage) prises de position sur une même valeur , et les faire vivire indépendamment l’une de l’autre même si la deuxième prise de position intervient à un moment où la première n’a atteint ni son objectif, ni a été stoppée.

    Je n’ai trouvée aucune formule de backtest qui permette de faire la synthèse de stratégies qui seraient ainsi conçues….

    Y-a t’il une possibilité de coder une telle façon de réaliser des backtests svp ?

    #260658 quote
    JS
    Participant
    Veteran

    Malheureusement, cette troisième option n’existe pas…

    À ma connaissance, les positions cumulées dans le backtest sont toujours fusionnées en une seule position avec un seul « PositionPrice »…

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

Backtest avec un Stop actif après un niveau atteint par les cours


ProOrder : Trading Automatique & Backtests

New Reply
Author
Summary

This topic contains 7 replies,
has 4 voices, and was last updated by JS
2 weeks, 4 days ago.

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