Bonjour les pros ,
je veux backtester une stratégie mais je n’arrive pas a le faire. elle consiste a acheter le plus haut ou le plus bas de la bougie précédente , le premier atteint des deux et inclure un target et un stop loss en % . Merci de votre aide.
JSParticipant
Senior
Salut
Voulez-vous dire ceci… ?
DefParam CumulateOrders=false
If Close>High[1] then
Buy 1 contract at Market
ElsIf Close<Low[1] then
SellShort 1 contract at Market
EndIf
Set Stop %Loss SL
Set Target %Profit TP
thank you for your answer but there is a problem because he buys and sells the opening of the candle.
JSParticipant
Senior
Les valeurs “High” et “Low” ne sont définitives qu’à la clôture (“Close”) de la bougie, donc l’achat ou la vente a lieu à l’ouverture (“Open”) de la bougie suivante…
pourquoi ? quand je suis sur nouvelle bougie j’ai toutes les informations de la précédente donc pourquoi je ne peux pas me positionner a ces niveaux la sachant qu’on les connait. imaginons une temps d’une d’unité de 10 min a 15h20 j’ai un plus haut atteint a 15000 et un plus bas a 14000. donc a 15H30 je me positionner sur ces niveaux la si ils sont atteints.
If not onmarket then
Buy at High stop
Sell at Low stop
Set Stop %Loss SL
Set Target %Profit TP
endif
JSParticipant
Senior
Si vous ne souhaitez pas utiliser les « Market Orders », vous pouvez également utiliser les « Stop Orders »…
DefParam CumulateOrders=false
If NOT OnMarket then
Buy at High Stop
SellShort at Low Stop
EndIf
Set Stop %Loss SL
Set Target %Profit TP
JSParticipant
Senior
Si la bougie actuelle n’est pas encore fermée, une référence à un « haut » ou à un « bas » provient toujours de la bougie précédente…
Normalement l’ordre n’est transmis qu’à la fermeture de la bougie en cours ; il sera donc exécuté avec les valeurs high et stop définitives de la bougie n-1.
Il faut noter aussi que les ordres à seuil de déclenchement (Buy at price Stop ou SellShort at price Stop) ne sont valable que le temps de la bougie suivante (bougie n). S’ils ne sont pas exécuté en n (cas d’une inside bar) alors la bougie n déclenchera deux nouveaux ordres avec les nouveaux high et low de la bougie n, à exécuter lors de la bougie n+1.
Sinon il faut mettre des conditions pour éviter les “insides bars” et réactiver l’ordre pour la bougie suivante si la n est une inside bar…
L’alternative à cela (par exemple, si l’on veut privilégier les ordres au marché), c’est de passer à une time frame plus petite pour l’exécution des ordres, donc utiliser le MTF.
Par exemple, fixer le high et le low à l’aide du time frame 10 min, puis exécuter l’ordre en 1min (il y aura alors 1min de retard pour l’exécution de l’ordre, au lieu de 10min).
JSParticipant
Senior
Les “Pending Stop Orders” sont exécutés dès qu’ils sont atteints et ne dépendent pas de la clôture (Close) de la bougie…
Ces ordres restent valables jusqu’à ce qu’ils soient atteints, conformément au code “If NOT OnMarket”…
JSParticipant
Senior
Salut Lucas,
C’est vrai, les ordres en attente sont valables 1 bar, puis ils doivent être passés à nouveau et c’est exactement ce qui se passe ici en utilisant le code « If NOT OnMarket »…
JSParticipant
Senior
Hi Lucas,
That’s right, pending orders are valid for 1 bar, then they need to be placed again and that’s exactly what’s happening here using the “If NOT OnMarket” code…
Salut Lucas,
C’est vrai, les ordres en attente sont valables 1 bar, puis ils doivent être passés à nouveau et c’est exactement ce qui se passe ici en utilisant le code « If NOT OnMarket »…
Oui, mais ils seront repassés à la bougie suivantes avec les nouvelles valeurs High et Low et non pas High[1] et low[1], ce qui peut être embêtant…
En tout cas, j’imagine que l’auteur de la question initiale ne souhaite pas acheter et vendre à chaque bougie… 🙂 et dans le cas d’une inside bar, il vaudrait mieux prendre en compte les high et low de la bougie n-1 et non pas celles de l’inside bar. Du coup il faudrait ajouter une condition pour garder au changer les high et low à prendre en compte.