
Cette stratégie est une stratégie de trading quantitative qui combine trois indicateurs de tendance supérieure, l’indicateur de nuage d’Ichimoku, l’indicateur de l’amplitude réelle moyenne (ATR) et l’indicateur de la moyenne mobile (EMA). Cette stratégie permet de déterminer la direction de la tendance du marché à l’aide de trois indicateurs de tendance supérieure, l’indicateur de nuage d’Ichimoku pour déterminer la pression de soutien, l’indicateur d’ATR pour définir le stop loss et l’indicateur d’EMA pour la confirmation de la tendance, formant un système de trading plus complet.
La logique de base de cette stratégie est basée sur le jugement de trois indicateurs de tendance supérieure. L’indicateur de tendance supérieure juge la direction de la tendance en comparant la taille et la taille de la relation entre le prix et la moyenne de l’ampleur réelle des vagues au cours d’une période donnée.
En outre, l’indicateur de la densité des nuages d’Ichimoku permet de juger de la force ou de la faiblesse de la tendance actuelle, éliminant ainsi certains faux signaux. L’indicateur ATR est utilisé pour définir les points de rupture. L’indicateur EMA est utilisé pour confirmer la tendance de la ligne moyenne longue.
Plus précisément, faire plus lorsque le prix est supérieur à la trajectoire ascendante des trois groupes d’indicateurs de tendance supérieure; faire des blancs lorsque le prix est inférieur à la trajectoire descendante des trois groupes d’indicateurs de tendance supérieure. En même temps, demander que le prix soit supérieur ou inférieur au nuage d’Ichimoku, filtrer les signaux incertains.
Les paramètres de l’indicateur triple hypertrend sont réglés différemment, ce qui permet de filtrer efficacement le bruit du marché et de déterminer avec plus de précision la direction de la tendance.
L’indicateur Ichimoku Cloud détermine la tendance à la faiblesse et évite les fausses ruptures. Les paramètres de stop loss ATR sont raisonnables et permettent d’éviter les pertes massives.
L’indicateur EMA aide à déterminer la direction de la tendance de la ligne médiane et longue, se vérifie mutuellement avec les jugements de la tendance supérieure, ce qui améliore encore la fiabilité du signal.
La combinaison de plusieurs indicateurs permet de vérifier l’un l’autre et d’évaluer globalement les tendances du marché. Le signal est plus fiable.
Bien qu’il y ait un risque de pénétration dans la zone d’invalidité en cas de rupture de la couche de nuage, l’indicateur d’Ichimoku est ajouté. Dans ce cas, l’indicateur ATR maintient une partie des pertes dans une certaine plage.
Lors d’une forte volatilité du marché, le point d’arrêt de l’indicateur ATR peut être directement déclenché, augmentant ainsi le taux de perte de la stratégie. Il est alors possible d’ajuster le paramètre ATR ou d’augmenter la portée de l’arrêt.
Si les paramètres de l’indicateur de la triple hypertrend sont mal configurés, de nombreux signaux invalides peuvent être générés. Cela nécessite de rechercher les paramètres de la meilleure combinaison par un grand nombre de rétroactions.
D’autres indicateurs peuvent être ajoutés, tels que l’indicateur de fluctuation, l’indicateur de bande de Brin, etc., pour aider au filtrage des signaux et améliorer la fiabilité.
Il est possible d’ajuster dynamiquement le seuil de stop-loss lors de fortes fluctuations en améliorant la méthode de calcul de l’indicateur ATR pour réduire le taux de perte.
Des modèles d’apprentissage automatique peuvent être ajoutés pour juger les signaux de vente et d’achat en s’entraînant sur des données historiques, réduire l’impact des paramètres artificiels et améliorer l’exactitude des signaux.
Cette stratégie utilise les trois supertrends, le nuage d’Ichimoku, l’indicateur ATR et les quatre parties de l’indicateur EMA. Les différents indicateurs permettent de vérifier les signaux les uns des autres et de déterminer la direction de la tendance du marché. Le nuage d’Ichimoku et l’indicateur ATR contrôlent le risque de perte, l’EMA confirme la tendance de la ligne médiane.
/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="HyperTrend", shorttitle="HyperTrend", overlay=true )
//
float percent_of_portfo = input.int(2, title = "percent of portfo per order", minval = 0, maxval = 100) / 100
// ichimoku Cloud
conversionPeriods = input.int(9, minval=1, title="Conversion Line Length", group = "ichimoku")
basePeriods = input.int(26, minval=1, title="Base Line Length", group = "ichimoku")
laggingSpan2Periods = input.int(52, minval=1, title="Leading Span B Length", group = "ichimoku")
displacement = input.int(26, minval=1, title="Lagging Span", group = "ichimoku")
donchian(len) => math.avg(ta.lowest(len), ta.highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = math.avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)
p1 = plot(leadLine1, offset = displacement - 1, color=#A5D6A7,
title="Leading Span A", display = display.none)
p2 = plot(leadLine2, offset = displacement - 1, color=#ef9a9a,
title="Leading Span B", display = display.none)
plot(leadLine1 > leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Upper Line", display = display.none)
plot(leadLine1 < leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Lower Line", display = display.none)
fill(p1, p2, color = leadLine1 > leadLine2 ? color.rgb(67, 160, 72, 59) : color.rgb(244, 67, 54, 70))
// three supertrend
//1
atrPeriod1 = input(10, "ATR Length1", group="SuperTrend")
factor1 = input.float(1.0, "Factor1", step = 0.01, group="SuperTrend")
[supertrend1, direction1] = ta.supertrend(factor1, atrPeriod1)
supertrend1 := barstate.isfirst ? na : supertrend1
bodyMiddle1 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none)
upTrend1 = plot(direction1 < 0 ? supertrend1 : na, "Up Trend", color = color.green, style = plot.style_linebr)
downTrend1 = plot(direction1 < 0 ? na : supertrend1, "Down Trend", color = color.red, style = plot.style_linebr)
//2
atrPeriod2 = input(11, "ATR Length2", group="SuperTrend")
factor2 = input.float(2.0, "Factor2", step = 0.01, group="SuperTrend")
[supertrend2, direction2] = ta.supertrend(factor2, atrPeriod2)
supertrend2 := barstate.isfirst ? na : supertrend2
bodyMiddle2 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none)
upTrend2 = plot(direction2 < 0 ? supertrend2 : na, "Up Trend", color = color.green, style = plot.style_linebr)
downTrend2 = plot(direction2 < 0 ? na : supertrend2, "Down Trend", color = color.red, style = plot.style_linebr)
//3
atrPeriod3 = input(12, "ATR Length2", group="SuperTrend")
factor3 = input.float(3.0, "Factor2", step = 0.01, group="SuperTrend")
[supertrend3, direction3] = ta.supertrend(factor3, atrPeriod3)
supertrend3 := barstate.isfirst ? na : supertrend3
bodyMiddle3 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none)
upTrend3 = plot(direction3 < 0 ? supertrend3 : na, "Up Trend", color = color.green, style = plot.style_linebr)
downTrend3 = plot(direction3 < 0 ? na : supertrend3, "Down Trend", color = color.red, style = plot.style_linebr)
// ATR
lengthATR = input.int(title="Length (ATR)", defval=14, minval=1, group="ATR")
smoothingATR = input.string(title="Smoothing (ATR)", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"], group="ATR")
ma_function(sourceATR, lengthATR) =>
switch smoothingATR
"RMA" => ta.rma(sourceATR, lengthATR)
"SMA" => ta.sma(sourceATR, lengthATR)
"EMA" => ta.ema(sourceATR, lengthATR)
=> ta.wma(sourceATR, lengthATR)
ATR = ma_function(ta.tr(true), lengthATR)
plot(ATR, title = "ATR", color=color.new(#B71C1C, 0), display = display.none)
// EMA
lenEMA = input.int(200, minval=1, title="Length of EMA", group="EMA")
srcEMA = input(close, title="Source of EMA", group="EMA")
offset = input.int(title="Offset (EMA)", defval=0, minval=-500, maxval=500, group="EMA")
outEMA = ta.ema(srcEMA, lenEMA)
plot(outEMA, title="EMA", color=color.blue, offset=offset, display = display.none)
ma(sourceEMA, lengthEMA, type) =>
switch type
"SMA" => ta.sma(sourceEMA, lengthEMA)
"EMA" => ta.ema(sourceEMA, lengthEMA)
"SMMA (RMA)" => ta.rma(sourceEMA, lengthEMA)
"WMA" => ta.wma(sourceEMA, lengthEMA)
"VWMA" => ta.vwma(sourceEMA, lengthEMA)
typeMA = input.string(title = "Method (EMA)", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="EMA")
smoothingLengthEMA = input.int(title = "Smoothing Length (EMA)", defval = 5, minval = 1, maxval = 100, group="EMA")
smoothingLine = ma(outEMA, smoothingLengthEMA, typeMA)
plot(smoothingLine, title="Smoothing Line", color=#f37f20, offset=offset, display=display.none)
//logic
if (open + ATR > supertrend1) and (open + ATR > supertrend2) and (open + ATR > supertrend3)
strategy.entry("L", strategy.long)
else if (open < supertrend1 + ATR) and (open < supertrend2 + ATR) and (open < supertrend3 + ATR)
strategy.entry("S", strategy.short)
else
strategy.close_all("C")