Stratégie de super tendance


Date de création: 2023-10-13 17:03:55 Dernière modification: 2023-10-13 17:03:55
Copier: 0 Nombre de clics: 718
1
Suivre
1617
Abonnés

Aperçu

La stratégie de super-trend est une stratégie de suivi de la tendance basée sur le calcul de l’amplitude réelle moyenne. Elle utilise l’amplitude réelle moyenne pour définir une ligne de stop-loss et pour déterminer la direction de la tendance en déterminant si le prix a franchi la ligne de stop-loss.

Principe de stratégie

La stratégie commence par calculer l’ATR de l’amplitude réelle moyenne sur une période donnée. La méthode de calcul est la suivante:

atr = mult * atr(length) 

longStop = hl2 - atr

shortStop = hl2 + atr

où long est la longueur de cycle calculée pour l’ATR, et mult est le coefficient d’agrandissement de l’ATR.

Après avoir calculé la ligne de stop, la stratégie continue de juger si le prix a franchi la ligne de stop de la ligne K précédente pour déterminer la direction de la tendance:

dir := dir == -1 and close > shortStopPrev ? 1 : 
         dir == 1 and close < longStopPrev ? -1 : dir

Lorsque la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de rupture de la ligne de la ligne de rupture de la ligne de la ligne de rupture de la ligne de la ligne de rupture de la ligne de la ligne de la ligne de rupture de la ligne de la ligne

Les signaux d’achat et de vente sont générés en fonction de la direction de la tendance:

buySignal = dir == 1 and dir[1] == -1 

sellSignal = dir == -1 and dir[1] == 1

Enfin, effectuez les opérations correspondantes lorsque les signaux d’achat et de vente apparaissent.

Avantages stratégiques

  1. Le calcul de la ligne de rupture en utilisant l’amplitude réelle moyenne permet d’éliminer efficacement le bruit du marché et de capturer des signaux de tendance plus fiables.

  2. Les paramètres de stratégie sont moins nombreux et plus faciles à comprendre et à utiliser. Les cycles et les facteurs ATR peuvent être ajustés pour s’adapter à différents environnements de marché.

  3. L’utilisation d’une ligne de rupture de stop-loss pour juger de la direction de la tendance permet de contrôler efficacement le risque et de stopper les pertes en temps opportun.

  4. Il peut être configuré pour effectuer des transactions dans plusieurs directions ou dans les deux sens, pour répondre à différents styles de transactions.

  5. Il peut être utilisé dans n’importe quel laps de temps et s’applique à de nombreuses variétés de transactions.

Risque stratégique

  1. En cas de tremblement de terre, l’ATR peut être augmenté, ce qui entraîne un élargissement excessif de la ligne d’arrêt et génère davantage de faux signaux.

  2. La combinaison optimale de paramètres n’a pas pu être déterminée, et les cycles et les multiplicateurs ATR doivent être optimisés en fonction des conditions du marché.

  3. Il n’est pas possible de déterminer le cycle optimal pour les variétés commerciales, il faut donc tester chaque variété.

  4. Il n’est pas possible de déterminer le meilleur moment pour l’entrée, il y a un certain retard.

  5. Il existe un certain risque de position vide, qui peut être en position vide lorsque la tendance est faible.

  6. Il existe un risque de rupture du stop loss et la ligne de stop loss doit être assouplie de manière appropriée.

Orientation de l’optimisation de la stratégie

  1. Le filtrage peut être envisagé en combinaison avec d’autres indicateurs afin d’éviter de produire de faux signaux en cas de choc. Par exemple, le MACD, le RSI, etc.

  2. L’apprentissage automatique ou les algorithmes génétiques peuvent être utilisés pour trouver la meilleure combinaison de paramètres.

  3. Les paramètres peuvent être optimisés pour les différentes variétés afin de déterminer les meilleurs cycles et facteurs ATR.

  4. Le moment de l’admission peut être déterminé en combinant des indicateurs quantitatifs, tels que le nombre de transactions, pour éviter l’admission prématurée.

  5. Il est possible d’envisager une stratégie de verrouillage de position, qui permet de maintenir une position en position vide.

  6. Il est possible d’optimiser la position de l’arrêt en allégeant la zone de stop-loss de manière appropriée et en combinant l’indicateur de force de tendance.

Résumer

La stratégie de super-tendance est une stratégie de suivi de la tendance plus fiable et plus risquée. Elle s’applique à de nombreuses variétés de transactions, mais nécessite une optimisation des paramètres et des règles de stratégie pour obtenir de meilleurs résultats sur différents marchés.

Code source de la stratégie
/*backtest
start: 2023-09-12 00:00:00
end: 2023-10-12 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// strategy("SuperTrend Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000)

LongOnly = input(title="Long Only ?", type=input.bool, defval=true)
length = input(title="ATR Period", type=input.integer, defval=22)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=true)

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE

// From Date Inputs
fromDay = input(defval=1, title="From Day", minval=1, maxval=31)
fromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
fromYear = input(defval=2019, title="From Year", minval=1970)

// To Date Inputs
toDay = input(defval=1, title="To Day", minval=1, maxval=31)
toMonth = input(defval=1, title="To Month", minval=1, maxval=12)
toYear = input(defval=2020, title="To Year", minval=1970)

// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

////////////////////////////////////////////////////////////////////////////////


atr = mult * atr(length)

longStop = hl2 - atr
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = hl2 + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and close > shortStopPrev ? 1 : 
   dir == 1 and close < longStopPrev ? -1 : dir

longColor = color.green
shortColor = color.red


plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor)
buySignal = dir == 1 and dir[1] == -1
plotshape(buySignal ? longStop : na, title="Long Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0)
plotshape(buySignal and showLabels ? longStop : na, title="Buy Label", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white, transp=0)

plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor)
sellSignal = dir == -1 and dir[1] == 1
plotshape(sellSignal ? shortStop : na, title="Short Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0)
plotshape(sellSignal and showLabels ? shortStop : na, title="Sell Label", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white, transp=0)

if LongOnly
    if buySignal and time_cond
        strategy.entry("Long", strategy.long, comment="Long")
    
    if(sellSignal and time_cond)
        strategy.close("Long")
else
    if buySignal and time_cond
        strategy.entry("Long", strategy.long, comment="Long")
    else
        strategy.cancel("Long")
    
    
    if sellSignal and time_cond
        strategy.entry("Short", strategy.short, comment="Short")
    else
        strategy.cancel("Short")

if not time_cond
    strategy.close_all()