Cette stratégie est une stratégie de trailing stop appliquée aux futures E-mini S&P500 (ES). Elle utilise l'ATR de 10 jours comme référence et fixe la plage de stop loss à 3 fois l'ATR pour définir les lignes d'arrêt longues et courtes.
La stratégie utilise hl2 comme source de prix. Elle calcule d'abord l'ATR de 10 jours, et permet à l'utilisateur de choisir entre l'utilisation de la méthode SMA ou de la fonction ATR intégrée pour calculer l'ATR. Après avoir obtenu l'ATR, elle ajoute 3 fois l'ATR vers le haut et vers le bas pour former la plage. Les deux lignes de plage sont les lignes de stop loss.
La méthode pour juger de la tendance est lorsque le prix dépasse la limite supérieure, il est long; lorsque le prix dépasse la limite inférieure, il est court. Lorsque le prix revient dans la plage, il confirme l'inversion de tendance. À ce moment, s'il est tourné de court en long, il générera un signal d'entrée long; s'il est tourné de long en court, il générera un signal d'entrée court.
Après l'entrée, la ligne de stop loss longue est réglée à la limite supérieure moins 1 tick, et la ligne de stop loss courte est réglée à la limite inférieure plus 1 tick, en arrière pour protéger les profits.
En général, il s'agit d'une stratégie de suivi de tendance robuste. Elle résout le problème de détermination de la plage de stop-loss et réduit les risques en ajustant les arrêts de manière dynamique en fonction de l'ATR. Dans le même temps, les arrêts de suivi bloquent les bénéfices. Mais il y a encore de la place pour optimiser des paramètres tels que les périodes ATR, les algorithmes d'arrêt, etc. Avec des tests et des ajustements supplémentaires, cette stratégie peut devenir une stratégie de suivi de tendance avec une grande robustesse.
/*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)