Stratégie d'arrêt de traînée ATR basée sur l'indicateur UT Bot

Auteur:ChaoZhang est là., Date: 2024-03-11 11:17:33 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie est basée sur l'indicateur UT Bot développé par QuantNomad et intègre l'idée d'un stop loss de trailing. Le code original a été écrit par @Yo_adriiiiaan et modifié par @HPotter.

Principe de stratégie

Les principaux principes de cette stratégie sont les suivants:

  1. Lorsque le prix de clôture est supérieur à la moyenne mobile simple de 50 périodes, une transaction longue est effectuée.
  2. Pour les positions longues, un prix de stop-loss de suivi est défini. Le prix de stop-loss de suivi est de 80% (1-20%) du prix de clôture actuel. Le prix de stop-loss de suivi monte avec la hausse des prix mais ne descend pas, protégeant ainsi les bénéfices.
  3. Pour les positions courtes, un prix de stop-loss est également défini. Le prix de stop-loss est de 120% (1+20%) du prix de clôture actuel.
  4. ATR (Average True Range) est utilisé comme référence pour l'arrêt de trail. La méthode de calcul du prix de l'arrêt de trail ATR est la suivante: lors de la montée, prenez le plus grand des prix de l'arrêt de trail ATR précédent et (prix de clôture actuel - ATR * Valeur clé); lors de la descente, prenez le plus petit des prix de l'arrêt de trail ATR précédent et (prix de clôture actuel + ATR * Valeur clé).
  5. Lorsque le prix dépasse le prix de l'arrêt de trailing ATR, une position longue est détenue; lorsque le prix dépasse le prix de l'arrêt de trailing ATR, une position courte est détenue; dans les autres cas, l'état de la position actuelle reste inchangé.

Analyse des avantages

  1. Le placement du trailing stop peut protéger efficacement les bénéfices, permettant à la stratégie d'obtenir plus de gains sur les marchés tendance.
  2. Le fait de fixer séparément les stop-loss pour les positions longues et courtes peut s'adapter aux différentes conditions du marché.
  3. L'utilisation de l'ATR comme référence pour le stop loss permet un ajustement dynamique de la position de stop loss, ce qui la rend plus flexible et efficace.
  4. Le paramètre Key Value est fourni pour optimisation par l'utilisateur, qui peut être ajusté en fonction de différentes variétés et cycles pour améliorer l'adaptabilité.

Analyse des risques

  1. Dans les marchés instables, les arrêts fréquents peuvent entraîner des transactions excessives, augmenter les coûts de commission et réduire les rendements.
  2. La méthode de l'arrêt de traînée à pourcentage fixe est relativement simple et peut ne pas être en mesure de faire face bien aux fluctuations des prix dans certaines conditions de marché.
  3. La stratégie ne prend en considération que les arrêts de trailing et ne fixe pas d'objectifs de profit de trailing, qui peuvent manquer certaines opportunités de profit.
  4. Le choix des paramètres a une incidence significative sur le rendement de la stratégie, et des paramètres inappropriés peuvent entraîner des risques d'utilisation plus importants.

Direction de l'optimisation

  1. D'autres indicateurs ou conditions, tels que le volume des transactions et la volatilité, peuvent être considérés pour optimiser les conditions d'entrée et améliorer la fiabilité du signal.
  2. Pour la méthode de calcul de l'arrêt de retard, des méthodes plus complexes et plus efficaces peuvent être explorées, telles que l'utilisation d'un stop loss parabolique ou d'un stop loss dynamique en pourcentage.
  3. Un mécanisme d'objectif de bénéfice à la traîne peut être ajouté, par exemple, en fixant des objectifs de bénéfice dynamiques basés sur l'ATR ou des pourcentages pour mieux fixer les bénéfices.
  4. L'optimisation des paramètres peut être effectuée pour différentes variétés et cycles afin de trouver les combinaisons de paramètres les plus appropriées.

Résumé

Cette stratégie, basée sur l'indicateur UT Bot, intègre une logique de stop de trail, qui peut protéger les bénéfices sur les marchés tendance. En même temps, la stratégie définit des stop-loss séparément pour les positions longues et courtes, ce qui la rend très adaptable. L'utilisation de l'ATR comme référence pour le stop de trail permet un ajustement dynamique de la position de stop-loss, améliorant la flexibilité. Cependant, cette stratégie peut faire face au risque de coûts de transaction élevés en raison des arrêts fréquents sur les marchés agités, et elle manque d'un objectif de profit de trail, ce qui peut manquer les opportunités de profit. En outre, le choix des paramètres a un impact significatif sur la performance de la stratégie.

À l'avenir, la stratégie peut être améliorée en optimisant les conditions d'entrée, en explorant des méthodes d'arrêt de trailing plus complexes, en ajoutant un mécanisme d'objectif de profit de trailing et en optimisant les paramètres pour différentes variétés et cycles, afin d'obtenir des rendements plus stables.


/*backtest
start: 2023-03-05 00:00:00
end: 2024-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Trailingstop", overlay=true)

if close > sma(close, 50)
    strategy.entry("long", strategy.long)

// Trailing stop loss for long positions
Trailperc = 0.20
price_stop_long = 0.0

if (strategy.position_size > 0)
    stopValue = close * (1 - Trailperc)
    price_stop_long := max(stopValue, price_stop_long[1])
else
    price_stop_long := 0

if (strategy.position_size > 0)
    strategy.exit(id="stoploss_long", stop=price_stop_long)

// Trailing stop loss for short positions
Trailperc_short = 0.20
price_stop_short = 0.0

if (strategy.position_size < 0)
    stopValue_short = close * (1 + Trailperc_short)
    price_stop_short := min(stopValue_short, price_stop_short[1])
else
    price_stop_short := 0

if (strategy.position_size < 0)
    strategy.exit(id="stoploss_short", stop=price_stop_short)

// ATR Trailing Stop for visualization
keyvalue = input(3, title="Key Value. 'This changes the sensitivity'", step=0.5)
atrperiod = input(10, title="ATR Period")
xATR = atr(atrperiod)
nLoss = keyvalue * xATR

xATRTrailingStop = 0.0
xATRTrailingStop := iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
   iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss),
   iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))

pos = 0  
pos :=   iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
   iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))

xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue

plot(xATRTrailingStop, color = xcolor, title = "Trailing Stop")

Plus de