Stratégie d'arrêt de traîne basée sur l'ATR pour l'ES

Auteur:ChaoZhang est là., Date: 2024-01-12 14:52:23 Je suis désolé
Les étiquettes:

img

Résumé

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 logique de la stratégie

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.

Les avantages

  1. L'utilisation d'ATR peut s'adapter automatiquement aux changements de volatilité du marché et réduire la probabilité de déclenchement d'un stop loss.
  2. La méthode de suivi des tendances est simple et efficace pour éviter les risques de pourchasser les sommets et les fonds.
  3. Les arrêts de trailing bloquent les bénéfices et évitent de rendre des transactions rentables.

Analyse des risques

  1. Un réglage incorrect des paramètres ATR peut entraîner une trop grande ou une trop petite portée de la perte d'arrêt.
  2. Les modifications drastiques de la volatilité du sous-jacent peuvent entraîner un déclenchement anormal du stop loss.
  3. LES arrêts de traction sont peut-être trop prudents pour suivre la tendance.

Directions d'optimisation

  1. Il convient d'envisager d'optimiser les paramètres de l'ATR combinés à des indicateurs de volatilité.
  2. Testez différents algorithmes de trailing stop comme le pourcentage des trailing stops, etc.
  3. Filtrer les signaux d'entrée combinés avec les indicateurs de tendance pour éviter les faux signaux de tendance.

Conclusion

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)


Plus de