Bonjour, je regardais une vidéo (https://youtu.be/wI462PMq1R0?t=359) qui parle de stratégie de trailing stop loss avec l’ATR qui m’a fait recherché si personne ne s’y était déjà attelé et il semblerait que DocTrading, entre autres, l’ait fait : https://www.prorealcode.com/prorealtime-indicators/atr-trailing-stop/
Dans la vidéo il explique une version améliorée de l’ATR trailing stop qui semble être de pouvoir prendre en compte la volatilité dans les calculs de l’ATR, est-ce que vous auriez une petite idée de la façon par laquelle ce serait implémentable ?
Vous pouvez essayer ci-dessous
ATRx = AverageTrueRange[p](close) * (HistoricVolatility[p](close)*200 //remplace la ligne 5 dans le code Docs
Merci mais ça n’a pas l’air d’être ça, pourquoi *200?
pourquoi *200
Vous pouvez optimiser ci-dessus pour obtenir les meilleurs résultats avec le code Doc, mais ci-dessus doit être un grand nombre car la volatilité historique est, la plupart du temps, un très petit nombre, par exemple 0,01.
Selon le document auquel il se réfère dans son analyse:
2.3.7. Conseiller expert MACD avec zone de barrière ATR glissante et variable
Le prix d’un actif peut présenter une variabilité plus ou moins importante au fil du temps, ce qui reflète la valeur de l’ATR. Dans les cas précédents, les barrières ATR étaient d’une portée constante, calculée avec la valeur ATR au moment de l’ouverture d’une position. L’utilisation de la dernière valeur ATR pour former une fenêtre ATR avec une plage variable dans le temps pourrait empêcher le conseiller expert de sortir prématurément d’une position dans les périodes où la variabilité atteint des sommets et l’aider à suivre les tendances du prix, comme le montre la figure 5 (voir image jointe).
Donc en gros, c’est un canal de Keltner autour non pas d’une moyenne mobile, mais autour du prix qui a vu le croisement avec le haut ou le bas du canal.
Ci-dessous le code:
atrp = 14
coeff = 2
if barindex>atrp then
once iprice=close
if close crosses over hh then
r=0
g=255
iprice=close
endif
if close crosses under ll then
r=255
g=0
iprice=close
endif
hh=iprice+AverageTrueRange[atrp](close)*coeff
ll=iprice-AverageTrueRange[atrp](close)*coeff
endif
return hh style(dottedline,2)coloured(r,g,0),ll style(dottedline,2)coloured(r,g,0)
Super, merci !
Par contre, en l’essayant je remarque qu’il arrive que le prix sorte du range comme dans la photo ci-jointe.
Est-ce que l’implémentation suivante ne serait pas plus juste ? Elle semble régler le problème :
atrp = Period
coef = Multiplicateur
IF BarIndex > atrp THEN
ONCE iprice = close
IF close > hh THEN
r = 0
g = 255
iprice = close
ENDIF
IF close < ll THEN
r = 255
g = 0
iprice = close
ENDIF
hh = iprice + AverageTrueRange[atrp](close)*coef
ll = iprice - AverageTrueRange[atrp](close)*coef
ENDIF
RETURN hh style(dottedline,2)coloured(r,g,0), ll style(dottedline,2)coloured(r,g,0)
J’ai juste remplacé CROSSES OVER par > et CROSSES UNDER par <
JSParticipant
Veteran
Je dis probablement la même chose que Nicolas mais il semble que le SL recalcule maintenant chaque barre en fonction du prix de la position (PositionPrice of crossing MACD) plus/moins l’ATR au lieu d’une valeur ATR fixe…
If MACDSignal[27,280,28](close) Crosses Over MACDline[27,280,28](close) then
Buy 1 contract at Market
EndIf
If MACDSignal[27,280,28](close) Crosses Under MACDline[27,280,28](close) then
SellShort 1 contract at Market
EndIf
ATRPSL=PositionPrice + 3*AverageTrueRange[24](Close)
ATRMSL=PositionPrice - 3*AverageTrueRange[24](Close)
GRAPHONPRICE(ATRPSL)Coloured("RED")
GRAPHONPRICE(ATRMSL)Coloured("RED")
Il me semblait avoir compris aussi quelque chose comme ça après avoir lu le papier mais je pensais que la prise en compte de la volatilité était quelque chose de plus complexe que juste recalculer avec la position actuelle et l’ATR.. Il faut croire que je cherchais trop compliqué
JSParticipant
Veteran
C’est vrai, c’est tout ce que c’est… recalculer le SL sur la base de l’ATR introduit une forme de volatilité… (ATR est une forme spécifique de volatilité)
Je viens de re survoler le papier et on y parle uniquement de l’ATR pour mesure la volatilité. Soit la moyenne de la taille des bougies.
Le code la stratégie de JS est correct selon moi.