Bonjour,
Je cherche à positionner un stop 1 points sous la bougie précédent l’ouverture d’une position. Je souhaite également utiliser l’écart entre le stop et l’ouverture de la position pour dimensionner mon objectif via un coefficient.
J’ai essayé la chose suivante sans succès :
// Stops et objectifs : entrez vos stops et vos objectifs ici
a=(close[tradeindex+1] -low[tradeindex+1])+1
SET STOP pLOSS a
SET TARGET pPROFIT 1.25*a
L’idée étant que la fonction tradeindex permettrait de “fixer” le stop et d’éviter qu’il se déplace à chaque nouvelle bougie.
Quelque chose doit m’échapper car cela ne fonctionne pas du tout !
Merci par avance,
Bien cordialement,
Guillaume
tradeindex est le numéro de la barre dans l’historique, hors l’instruction Close dans ton cas présent attendrait plutôt un offset (décalage) depuis la barre courante, donc en faisant une différence entre barindex et tradeindex, celui s’incrémentera donc à chaque nouvelle bougie:
offset = barindex-(tradeindex+1)
a=(close[offset] -low[offset])+1*pointsize
Ne sachant pas quel instrument est tradé, j’ai également adapté la valeur du point automatique avec une multiplication avec “pointsize”.
Je n’ai pas testé, confirme nous que cela fonctionne ! Merci.
Nicolas, merci pour ta réponse. Malheureusement le problème persiste : les stops et targets déclenchés lors du backtest semblent être déterminés de façon “aléatoire”… Je ne parviens pas à déceler la nature de l’erreur.
Bien cordialement,
Guillaume
Et en graphant “a”? Cela permet de debugger facilement ses variables lors d’un backtest :
GRAPH a
J’ai graphé “a” (au passage merci pour l’astuce) et je me suis aperçu que “a” n’est pas constant pendant le trade.
Se pourrait-il que “offset” ne soit pas offset mais qu’un décalage ait lieu ? Ce serait surprenant mais c’est ma seule piste pour le moment…
À toute fins utiles, voici mon code :
DEFPARAM CumulateOrders=false
// Conditions pour ouvrir une position acheteuse
IF close>open AND close[1]<open[1] AND close[2]<open[2] AND open[2]>open[1] AND open<=close[1] AND close>high[2] THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Stops et objectifs : entrez vos stops et vos objectifs ici
offset = barindex-(tradeindex+1)
a=(close[offset]-open[offset])
set stop ploss a
Set target pprofit a*1.25
//graph "a"
graph a
Cordialement,
Guillaume
J’ai volontairement modifié les multiplicateurs dans cet exemple, pour donner du “mou” au trade 🙂
DEFPARAM CumulateOrders=false
// Conditions pour ouvrir une position acheteuse
IF close>open AND close[1]<open[1] AND close[2]<open[2] AND open[2]>open[1] AND open<=close[1] AND close>high[2] THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Stops et objectifs : entrez vos stops et vos objectifs ici
offset = max(1,barindex-(tradeindex+1))
a=(close[offset]-open[offset])
set stop loss a*2
Set target profit a*4
//graph "a"
graph a
On voit que ça fonctionne sur cet ordre par exemple, la valeur du stoploss “a” est correctement calculé et reste identique durant la vie de l’ordre:
[attachment file=”stoploss offset.png”]
Cette façon de poser un stoploss est intéressante si on utilise des ordres conditionnels et que l’on ne sait pas quand ils seront envoyés au marché. Cependant dans ton cas, tu aurais également pu faire ainsi (beaucoup plus simple) :
DEFPARAM CumulateOrders=false
// Conditions pour ouvrir une position acheteuse
IF close>open AND close[1]<open[1] AND close[2]<open[2] AND open[2]>open[1] AND open<=close[1] AND close>high[2] THEN
BUY 1 CONTRACT AT MARKET
set stop loss abs(close[1]-open[1])
set target profit abs(close[1]-open[1])*1.25
ENDIF
Merci pour ta réponse, je vais regarder ça !
Guillaume