Stratégie de suivi des tendances dynamiques

ATR
Date de création: 2024-06-03 16:57:51 Dernière modification: 2024-06-03 16:57:51
Copier: 4 Nombre de clics: 628
1
Suivre
1617
Abonnés

Stratégie de suivi des tendances dynamiques

Aperçu

La stratégie utilise l’indicateur Supertrend pour capturer les tendances du marché. L’indicateur Supertrend combine le prix et la volatilité, indiquant une tendance à la hausse lorsque la ligne indicielle est verte et une tendance à la baisse lorsque la ligne indicielle est rouge. La stratégie génère un signal d’achat et de vente en détectant les changements de couleur de la ligne indicielle, tout en utilisant la ligne indicielle comme point d’arrêt dynamique.

Principe de stratégie

  1. Calculer la trajectoire ascendante (up) et descendante (dn) de l’indicateur Supertrend et déterminer la direction de la tendance actuelle (trend) en fonction de la relation entre le cours de clôture et la trajectoire ascendante et descendante.
  2. Lorsque la tendance est passée de baisse (-1) à hausse (-1), un signal d’achat est généré (buySignal); lorsque la tendance est passée de hausse (-1) à baisse (-1), un signal de vente est généré (sellSignal).
  3. Lors de la génération d’un signal d’achat, ouvrir une position en plus et définir le point d’arrêt descendant ((dn)); lors de la génération d’un signal de vente, ouvrir une position vide et définir le point d’arrêt ascendant ((up)).
  4. L’introduction de la logique de stop-loss mobile, lorsque le prix augmente / diminue d’un certain nombre de points (trailingValue), le stop-loss est déplacé vers le haut / vers le bas, ce qui permet de protéger le stop-loss.
  5. L’introduction d’une logique de stop-loss fixe, qui fait que les positions à zéro sont rentables lorsque la tendance change.

Avantages stratégiques

  1. Adaptabilité: L’indicateur Supertrend est capable de s’adapter à différentes conditions de marché et variétés de transactions en combinant les prix et la volatilité.
  2. Stop-loss dynamique: l’utilisation de la ligne d’indicateur comme point de stop-loss dynamique permet de contrôler efficacement le risque et de réduire les pertes.
  3. Stop loss mobile: l’introduction de la logique de stop loss mobile permet de protéger les bénéfices et d’améliorer la rentabilité de la stratégie lorsque la tendance se poursuit.
  4. Signal clair: Les signaux d’achat et de vente générés par la stratégie sont clairs, faciles à utiliser et à exécuter.
  5. Flexibilité des paramètres: les paramètres de la stratégie (par exemple, le cycle ATR, le multiplicateur ATR, etc.) peuvent être ajustés en fonction des caractéristiques du marché et du style de négociation pour améliorer l’adaptabilité.

Risque stratégique

  1. Risque paramétrique: les paramètres peuvent varier considérablement et nécessitent un retour d’examen et une optimisation des paramètres.
  2. Risque de marché oscillant: Dans les marchés oscillants, des changements de tendance fréquents peuvent conduire à une stratégie qui génère plus de signaux de trading, augmentant les coûts de transaction et le risque de glissement.
  3. Risque de rupture de tendance: lorsque les tendances du marché changent brusquement, la stratégie peut être retardée pour ajuster la position, ce qui entraîne une augmentation des pertes.
  4. Risque d’optimisation excessive: l’optimisation excessive d’une stratégie peut conduire à un ajustement de la courbe et à une mauvaise performance sur les marchés futurs.

Orientation de l’optimisation de la stratégie

  1. L’introduction d’analyses multi-temporelles pour confirmer la solidité des tendances et réduire la fréquence des transactions dans les marchés en crise.
  2. En combinaison avec d’autres indicateurs techniques ou facteurs fondamentaux, améliorer la précision des jugements de tendances.
  3. Optimiser les logiques de stop loss et de stop-loss, comme l’introduction d’un stop-loss dynamique ou d’un ratio de risque/bénéfice, afin d’améliorer le ratio de profit/perte de la stratégie.
  4. Les paramètres sont testés pour leur stabilité, en choisissant une combinaison de paramètres qui fonctionne bien dans différentes conditions de marché.
  5. Introduire des règles de gestion des positions et de gestion des fonds, afin de contrôler les risques individuels et les risques globaux.

Résumer

La stratégie de suivi de tendance dynamique utilise l’indicateur Supertrend pour capturer les tendances du marché, contrôler les risques de stop loss par stop loss dynamique et mobile, et verrouiller les bénéfices à l’aide d’arrêts fixes. La stratégie est adaptative, claire et facile à utiliser.

Code source de la stratégie
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Supertrend Strategy', overlay=true, format=format.price, precision=2)
Periods = input.int(title='ATR Period', defval=10)
src = input.source(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
changeATR = input.bool(title='Change ATR Calculation Method ?', defval=true)
showsignals = input.bool(title='Show Buy/Sell Signals ?', defval=true)
highlighting = input.bool(title='Highlighter On/Off ?', defval=true)

// ATR calculation
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2

// Supertrend calculations
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn

// Trend direction
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Plotting
upPlot = plot(trend == 1 ? up : na, title='Up Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title='UpTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(buySignal and showsignals ? up : na, title='Buy', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))

dnPlot = plot(trend == 1 ? na : dn, title='Down Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title='DownTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(sellSignal and showsignals ? dn : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))

// Highlighting
mPlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? trend == 1 ? color.green : color.white : color.white
shortFillColor = highlighting ? trend == -1 ? color.red : color.white : color.white
fill(mPlot, upPlot, title='UpTrend Highligter', color=longFillColor, transp=90)
fill(mPlot, dnPlot, title='DownTrend Highligter', color=shortFillColor, transp=90)

// Alerts
alertcondition(buySignal, title='SuperTrend Buy', message='SuperTrend Buy!')
alertcondition(sellSignal, title='SuperTrend Sell', message='SuperTrend Sell!')
changeCond = trend != trend[1]
alertcondition(changeCond, title='SuperTrend Direction Change', message='SuperTrend has changed direction!')

// Pip and trailing stop calculation
pips = 50
pipValue = syminfo.mintick * pips
trailingPips = 10
trailingValue = syminfo.mintick * trailingPips

// Strategy
if (buySignal)
    strategy.entry("Long", strategy.long, stop=dn, comment="SuperTrend Buy")
if (sellSignal)
    strategy.entry("Short", strategy.short, stop=up, comment="SuperTrend Sell")

// Take profit on trend change
if (changeCond and trend == -1)
    strategy.close("Long", comment="SuperTrend Direction Change")
if (changeCond and trend == 1)
    strategy.close("Short", comment="SuperTrend Direction Change")

// Initial Stop Loss
longStopLevel = up - pipValue
shortStopLevel = dn + pipValue

// Trailing Stop Loss
var float longTrailStop = na
var float shortTrailStop = na

if (strategy.opentrades > 0)
    if (strategy.position_size > 0)  // Long position
        if (longTrailStop == na or close > strategy.position_avg_price + trailingValue)
            longTrailStop := high - trailingValue
        strategy.exit("Stop Loss Long", from_entry="Long", stop=longTrailStop)
    if (strategy.position_size < 0)  // Short position
        if (shortTrailStop == na or close < strategy.position_avg_price - trailingValue)
            shortTrailStop := low + trailingValue
        strategy.exit("Stop Loss Short", from_entry="Short", stop=shortTrailStop)

// Initial Exit
strategy.exit("Initial Stop Loss Long", from_entry="Long", stop=longStopLevel)
strategy.exit("Initial Stop Loss Short", from_entry="Short", stop=shortStopLevel)