Triple Supertrend Ichimoku Cloud Stratégie de négociation quantitative

Auteur:ChaoZhang est là., Date: 2023-12-27 à 15h22h40
Les étiquettes:

img

Résumé

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).

Principe de stratégie

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 avantages

  1. 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.

  2. Le nuage Ichimoku détermine la force de la tendance pour éviter les fausses ruptures.

  3. 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é.

  4. En combinant plusieurs indicateurs, les signaux sont plus fiables car ils peuvent se vérifier mutuellement pour déterminer l'évolution du marché.

Les risques

  1. 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.

  2. 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.

  3. Des signaux invalides peuvent se produire fréquemment si les paramètres de la supertrend sont définis de manière inappropriée.

Amélioration

  1. 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é.

  2. 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.

  3. 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.

Conclusion

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")

Plus de