Cette stratégie est une stratégie de trading quantitative qui combine l'indicateur triple supertrend, l'indicateur de nuage d'Ichimoku, l'indicateur de moyenne vraie (ATR) et l'indicateur de moyenne mobile exponentielle (EMA).
La logique de base de cette stratégie est basée sur l'indicateur triple supertrend. L'indicateur de supertrend détermine la direction de la tendance en comparant le prix avec la plage moyenne vraie dans une certaine période. Lorsque le prix est au-dessus de la bande supérieure, c'est un signal haussier, et lorsque le prix est en dessous de la bande inférieure, c'est un signal baissier. Cette stratégie adopte trois indicateurs de supertrend avec des paramètres différents. Les signaux de trading sont générés lorsque les trois donnent des signaux d'achat ou de vente en même temps.
En outre, l'épaisseur du nuage Ichimoku aide à déterminer la force de la tendance actuelle pour filtrer certains faux signaux.
En particulier, allez long lorsque le prix est au-dessus de la bande supérieure des trois indicateurs de supertrend, et allez court lorsque le prix est en dessous de la bande inférieure des trois.
Les trois indicateurs de super-tendance avec des réglages différents peuvent filtrer efficacement le bruit du marché et déterminer plus précisément la direction de la tendance.
Le nuage Ichimoku détermine la force de la tendance pour éviter les fausses ruptures.
L'EMA aide à confirmer l'orientation de la tendance à moyen et à long terme, à vérifier les signaux de la super-tendance et à améliorer encore la fiabilité.
En combinant plusieurs indicateurs, les signaux sont plus fiables car ils peuvent se vérifier mutuellement pour déterminer l'évolution du marché.
Bien que le nuage Ichimoku soit ajouté, il y a toujours un risque d'entrer dans la zone invalide si l'épaisseur du nuage est pénétrée.
Lorsque la volatilité est élevée, le stop loss défini par l'ATR peut être déclenché directement, augmentant ainsi le taux de perte.
Des signaux invalides peuvent se produire fréquemment si les paramètres de la supertrend sont définis de manière inappropriée.
Plus d'indicateurs comme l'indice de volatilité, les bandes de Bollinger peuvent être ajoutés pour aider à filtrer les signaux et améliorer la fiabilité.
Améliorer le calcul de l'ATR pour ajuster dynamiquement la plage d'arrêt des pertes lors de fortes oscillations afin de réduire le taux de perte.
Ajouter un modèle d'apprentissage automatique formé sur des données historiques pour juger des signaux de trading au lieu du réglage manuel des paramètres.
Cette stratégie combine quatre parties, y compris le triple supertrend, le nuage Ichimoku, l'ATR et l'EMA. Les signaux sont vérifiés à travers les indicateurs lors de la détermination de la tendance du marché. Le nuage Ichimoku et l'ATR contrôlent le risque de perte d'arrêt. L'EMA confirme la tendance à moyen et à long terme. Les signaux de cette stratégie sont relativement fiables pour la détention à moyen et à long terme. Le stop loss peut être optimisé et d'autres indicateurs d'assistance peuvent être ajoutés pour obtenir une meilleure performance de la stratégie.
/*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")