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.
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.
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.
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é.
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.
Il peut être configuré pour effectuer des transactions dans plusieurs directions ou dans les deux sens, pour répondre à différents styles de transactions.
Il peut être utilisé dans n’importe quel laps de temps et s’applique à de nombreuses variétés de transactions.
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.
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é.
Il n’est pas possible de déterminer le cycle optimal pour les variétés commerciales, il faut donc tester chaque variété.
Il n’est pas possible de déterminer le meilleur moment pour l’entrée, il y a un certain retard.
Il existe un certain risque de position vide, qui peut être en position vide lorsque la tendance est faible.
Il existe un risque de rupture du stop loss et la ligne de stop loss doit être assouplie de manière appropriée.
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.
L’apprentissage automatique ou les algorithmes génétiques peuvent être utilisés pour trouver la meilleure combinaison de paramètres.
Les paramètres peuvent être optimisés pour les différentes variétés afin de déterminer les meilleurs cycles et facteurs ATR.
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.
Il est possible d’envisager une stratégie de verrouillage de position, qui permet de maintenir une position en position vide.
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.
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.
/*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()