
Cette stratégie est une stratégie d’arrêt de suivi appliquée aux E-mini S&P 500 futures (ES). Elle utilise l’ATR de 10 jours comme référence pour mettre en place une ligne de stop de plusieurs têtes et de têtes vides avec 3 fois l’ATR comme plage de stop. La stratégie juge la tendance par le changement de direction de la ligne d’ATR et génère un signal d’entrée. Une fois entrée en bourse, elle ajuste la ligne de stop en temps réel, laissant la ligne de stop suivre le prix et protéger le profit.
Cette stratégie utilise hl2 comme source de prix. On calcule d’abord l’ATR de 10 jours, et on laisse le choix entre calculer l’ATR en utilisant la méthode SMA ou la fonction ATR intégrée. Après avoir calculé l’ATR, on ajoute 3 fois l’ATR comme gamme.
La méthode de détermination de la tendance est la suivante: lorsque le prix dépasse la limite supérieure, c’est la hausse; lorsque le prix tombe sous la limite inférieure, c’est la baisse. Lorsque le prix revient dans la zone, le renversement de la tendance est confirmé.
Après l’entrée en jeu, la ligne d’arrêt multi-tête est réglée sur la limite supérieure de 1 point de déplacement vers le bas et la ligne d’arrêt vide sur la limite inférieure de 1 point de déplacement vers le haut, pour une protection de suivi efficace.
Cette stratégie est une stratégie de suivi de tendance plus générale dans l’ensemble. Elle résout le problème de la difficulté de déterminer le périmètre de stop, réduisant le risque par l’ajustement dynamique de l’ATR.
/*backtest
start: 2023-01-05 00:00:00
end: 2024-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("ATR Based Trailing Stop Strategy on ES! [v4]", overlay=true)
// Given ATR study
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR = input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr = changeATR ? atr(Periods) : atr2
up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? max(up, up1) : up
dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
// Entry logic based on trend change
longCondition = trend == 1 and trend[1] == -1
shortCondition = trend == -1 and trend[1] == 1
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)
// Trailing stop loss logic
// For long positions, trail 1 point below the up plot
longStopPrice = up - 1
// For short positions, trail 1 point above the dn plot
shortStopPrice = dn + 1
strategy.exit("Trailing Stop Long", "Long", trail_offset=longStopPrice)
strategy.exit("Trailing Stop Short", "Short", trail_offset=shortStopPrice)