Supertrend et stratégie de scalping du CCI

Auteur:ChaoZhang est là., Date: 2024-02-26 10:39:49 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie est basée sur deux indicateurs Super Trend avec des paramètres différents et l'indicateur CCI, visant à capturer les fluctuations de prix à court terme pour le trading à haute fréquence.

La logique de la stratégie

  • Utilisez 14 périodes ATR pour calculer la Super Tendance rapide, avec un facteur défini à 3; utilisez 14 périodes ATR pour calculer la Super Tendance lente, avec un facteur défini à 6. La Super Tendance rapide est plus sensible et peut capturer les changements à court terme; la Super Tendance lente détermine la direction de la tendance principale.

  • Lorsque la tendance super rapide dépasse le prix et que la tendance super lente est toujours au-dessus du prix, elle est jugée comme un signal d'inversion possible pour aller long; lorsque la tendance super rapide dépasse le prix et que la tendance super lente est toujours au-dessous du prix, elle est jugée comme un signal d'inversion possible pour aller court.

  • Dans le même temps, utilisez l'ICC pour juger si le marché est suracheté ou survendu.

  • La probabilité que l'indicateur Super Trend émette un signal d'inversion est plus élevée lorsque le marché est suracheté ou survendu.

Analyse des avantages

  • La combinaison de Super Trend pour déterminer les points d'inversion de tendance et de CCI pour juger des conditions de surachat/survente peut filtrer efficacement les fausses ruptures et améliorer la qualité du signal.

  • Des croisements rapides et lents de Super Trend forment des signaux de trading pour atteindre une entrée et une sortie à haute fréquence.

  • Les paramètres CCI et les paramètres Super Trend peuvent être ajustés de manière flexible pour s'adapter aux différentes conditions du marché.

  • L'idée de stratégie est claire et facile à comprendre, et l'ajustement des paramètres est également relativement simple.

Risques et solutions

  • Super Trend lui-même a un effet de retard, peut-être manquant la première opportunité d'inversion.

  • Le CCI comporte des risques de callback et des fluctuations excessives peuvent également entraîner des transactions répétitives.

  • Le trading à haute fréquence est sujet à une augmentation de la fréquence des transactions et des coûts de négociation.

Directions d'optimisation

  • La combinaison de paramètres peut être traversée et optimisée en fonction du tirage maximal ou du ratio profit/perte pour trouver le paramètre optimal.

  • Les méthodes d'apprentissage automatique telles que Random Forest peuvent être utilisées pour la sélection de fonctionnalités sur les paramètres afin d'obtenir une optimisation automatique des paramètres.

  • Examiner la possibilité de limiter le nombre maximal de positions ouvertes dans un certain cycle afin de contrôler les risques.

Conclusion

La stratégie utilise pleinement l'indicateur Super Trend pour déterminer les points d'inversion de tendance à court terme, complété par l'indicateur CCI pour filtrer les signaux. Lorsque les paramètres sont raisonnables, elle peut réaliser un trading à court terme efficace.


/*backtest
start: 2023-02-19 00:00:00
end: 2024-02-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Supertrend & CCI Strategy Scalp", overlay=true)

// SuperTrend Settings
atrLength1 = input(14, "ATR Length 1")
factor1 = input(3.0, "Factor 1" )
atrLength2 = input(14, "ATR Length 2")
factor2 = input(6.0, "Factor 2")
 // Calculate SuperTrend 1
[superTrend1, direction1] = ta.supertrend(factor1, atrLength1)

// // Calculate SuperTrend 2
[superTrend2, direction2] = ta.supertrend(factor2, atrLength2)

// superTrend1 := barstate.isfirst ? na : superTrend1
// 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)
// bodyMiddle1 = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none)

// fill(bodyMiddle1, upTrend1,   color.new(color.green, 90), fillgaps = false)
// fill(bodyMiddle1, downTrend1, color.new(color.red,   90), fillgaps = false)

// superTrend2 := barstate.isfirst ? na : superTrend2
// upTrend2 =    plot(direction1 < 0 ? superTrend2 : na, "Up Trend",   color = color.green, style = plot.style_linebr)
// downTrend2 =  plot(direction1 < 0 ? na : superTrend2, "Down Trend", color = color.red,   style = plot.style_linebr)
// bodyMiddle2 = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none)

// fill(bodyMiddle2, upTrend2,   color.new(color.green, 90), fillgaps = false)
// fill(bodyMiddle2, downTrend2, color.new(color.red,   90), fillgaps = false)
// CCI Settings
//cciLength = input.int(14, title="CCI Length")
cciLevel = input.int(100, title="CCI Level")

// Calculate CCI
length = input.int(20, minval=1)
src = input(hlc3, title="Source")
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
//plot(cci, "CCI", color=#2962FF)
//band1 = hline(100, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
//hline(0, "Middle Band", color=color.new(#787B86, 50))
//band0 = hline(-100, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
//fill(band1, band0, color=color.rgb(33, 150, 243, 90), title="Background")

ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title = "Length", defval = 5, minval = 1, maxval = 100, group="Smoothing")

smoothingLine = ma(cci, smoothingLength, typeMA)
//plot(smoothingLine, title="Smoothing Line", color=#f37f20, display=display.none)


// Entry conditions
longCondition = superTrend1 > close and superTrend2 < close and smoothingLine < -100
shortCondition = superTrend1 < close and superTrend2 > close and smoothingLine > 100

/// Initialize variables to track trade direction
var bool isLong = na
var bool isShort = na

// Strategy entry and exit
if (longCondition)
    strategy.entry("Long", strategy.long)
    isLong := true
    isShort := false
    
if (shortCondition)
    strategy.entry("Short", strategy.short)
    isShort := true
    isLong := false

// Close Long positions
if (isLong)
    strategy.close("Long", when = superTrend1 < close or superTrend2 > close or cci > 100)

// Close Short positions
if (isShort)
    strategy.close("Short", when = superTrend1 > close or superTrend2 < close or cci < -100)



// Plotting
plot(superTrend1, color=color.blue, title="SuperTrend 1")
plot(superTrend2, color=color.red, title="SuperTrend 2")
//plot(cci, color=color.orange, title="CCI")



Plus de