Les ressources ont été chargées... Je charge...

Stratégie ATR de la tendance supérieure

Auteur:ChaoZhang est là., Date: 2024-03-29 11h29 et 15h
Les étiquettes:

img

Résumé

Il s'agit d'une stratégie basée sur l'indicateur Supertrend et l'indicateur ATR. L'idée principale de cette stratégie est d'utiliser l'indicateur Supertrend pour déterminer la direction de la tendance actuelle du marché et effectuer des transactions lorsque l'indicateur Supertrend change. En même temps, cette stratégie utilise l'indicateur ATR pour calculer les prix de stop loss et de profit, et calcule la taille de la position en fonction d'un certain pourcentage du solde du compte pour contrôler le risque.

Principe de stratégie

Les principes de cette stratégie sont les suivants:

  1. Calculer la valeur de l'indicateur Supertrend et générer des signaux d'achat ou de vente lorsque l'indicateur Supertrend change.
  2. Utilisez l'indicateur ATR pour calculer les prix d'arrêt des pertes et de prise de profit. Le prix d'arrêt des pertes est le prix actuel plus ou moins la valeur ATR multipliée par un multiple, et le prix de prise de profit est le prix d'arrêt des pertes multiplié par un rapport risque-rendement.
  3. Calculer la taille de la position sur la base d'un certain pourcentage du solde du compte et du prix de stop loss pour contrôler le risque de chaque transaction.
  4. Lorsqu'un signal d'achat est généré, une position longue est ouverte, le prix de stop loss étant le prix auquel le signal est généré moins la valeur ATR multipliée par un multiple, et le prix de prise de profit étant le prix auquel le signal est généré plus la valeur ATR multipliée par un multiple, puis multiplié par le rapport risque-rendement.
  5. Lorsqu'un signal de vente est généré, une position courte est ouverte, le prix de stop loss étant le prix auquel le signal est généré plus la valeur ATR multipliée par un multiple, et le prix de prise de profit étant le prix auquel le signal est généré moins la valeur ATR multipliée par un multiple, puis multiplié par le rapport risque-rendement.

Les avantages de la stratégie

Les avantages de cette stratégie sont les suivants:

  1. Il combine des indicateurs de suivi des tendances et de volatilité pour capturer efficacement les tendances tout en contrôlant les risques.
  2. La taille de la position est calculée automatiquement sur la base du solde du compte et du niveau de risque, sans qu'il soit nécessaire de procéder à un ajustement manuel, ce qui facilite sa mise en œuvre.
  3. Les paramètres peuvent être ajustés de manière flexible pour s'adapter à différents marchés et produits.

Risques stratégiques

Les risques de cette stratégie sont les suivants:

  1. Dans un marché volatil, des signaux d'achat et de vente fréquents peuvent entraîner des coûts de transaction élevés et des glissements.
  2. Les taux de stop-loss et de take-profit fixes peuvent ne pas être en mesure de s'adapter aux changements du marché, ce qui entraîne un stop-loss prématuré ou de faibles bénéfices.
  3. Le calcul de la taille de la position dépend de la volatilité historique, ce qui peut entraîner de gros tirages lorsque la volatilité augmente soudainement.

Pour lutter contre les risques susmentionnés, les mesures suivantes peuvent être prises:

  1. Ajouter plus de conditions de filtrage des signaux pour réduire la fréquence des transactions.
  2. Optimiser la méthode de calcul du stop loss et du take profit, par exemple en utilisant le trailing stop loss ou le dynamic take profit.
  3. Introduire des facteurs de contrôle des risques dans le calcul des positions, tels que la réduction des positions en cas de volatilité.

Direction de l'optimisation de la stratégie

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Introduire plus d'indicateurs techniques, tels que le MACD, le RSI, etc., comme conditions auxiliaires pour le jugement de la tendance et le filtrage des signaux afin d'améliorer la précision du signal.
  2. Optimiser les paramètres de l'indicateur Supertrend et de l'indicateur ATR pour différents marchés et produits afin de trouver la meilleure combinaison de paramètres.
  3. Introduire davantage de facteurs de contrôle des risques dans le calcul des positions, tels que le tirage maximum du compte, le risque maximum par transaction, etc., afin d'améliorer la robustesse de la stratégie.
  4. Ajouter des stratégies de prise de profit, telles que la prise de profit partielle, la prise de profit en retard, etc., pour permettre aux bénéfices de continuer à croître.

Les optimisations susmentionnées peuvent améliorer la rentabilité et la stabilité de la stratégie tout en réduisant son risque, ce qui la rend plus adaptable à différents environnements de marché.

Résumé

Cette stratégie combine l'indicateur Supertrend et l'indicateur ATR pour capturer efficacement les tendances tout en contrôlant le risque. En calculant la taille optimale de la position, le risque de chaque transaction est contrôlable. Cependant, cette stratégie peut générer des coûts de transaction élevés et des retraits dans un marché volatil. En introduisant plus d'indicateurs techniques, en optimisant les paramètres, en ajoutant des facteurs de contrôle des risques et en améliorant les stratégies de prise de profit, la performance de cette stratégie peut être encore améliorée.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tradez99

//@version=5
strategy('Supertrend', overlay=true, format=format.price, precision=2)

Periods = input(title='ATR Period', defval=10)
src = input(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
changeATR = input(title='Change ATR Calculation Method ?', defval=true)
showsignals = input(title='Show Buy/Sell Signals ?', defval=true)
highlighting = input(title='Highlighter On/Off ?', defval=true)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
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 = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
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))
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)
//fill(mPlot, dnPlot, title='DownTrend Highligter', color=shortFillColor)

multiplier = input.float(title="ATR multiplier", defval = 1.5)
rr           = input.float(title="Risk:Reward", defval=1.0)
riskPerTrade = input.float(title="Risk Per Trade %", defval=1.0)
atr3 = ta.atr(14)

//calculate stops and targets 
longstop = close - (atr3 * multiplier)
shortstop = close + (atr3 * multiplier)
longStopDistance  = close - longstop
shortStopDistance = shortstop - close
longTarget  = close + (longStopDistance * rr)
shortTarget = close - (shortStopDistance * rr)

// Save stops & targets
var t_stop = 0.0
var t_target = 0.0

longCondition = buySignal 
if (longCondition)
    t_stop := longstop
    t_target := longTarget
    positionSize = math.floor((strategy.equity * (riskPerTrade/100)) / (close - t_stop))
    strategy.entry("Long", strategy.long, qty = positionSize)

shortCondition = sellSignal 
if (shortCondition)
    t_stop := shortstop
    t_target := shortTarget
    positionSize = math.floor((strategy.equity * (riskPerTrade/100)) / (t_stop - close))  
    strategy.entry("Short", strategy.short, qty = positionSize)

strategy.exit(id="Long Exit", from_entry="Long", limit=t_target, stop=t_stop)
strategy.exit(id="Short Exit", from_entry="Short", limit=t_target, stop=t_stop)


Plus de