Stratégie de scalping basée sur le CCI et l'EMA

Auteur:ChaoZhang est là., Date: 2024-01-31 16h01 et 21h
Les étiquettes:

img

Résumé

Il s'agit d'une stratégie de négociation d'oscillation à court terme qui combine l'indicateur EMA et l'indicateur CCI pour identifier les tendances à court terme et les niveaux de surachat/survente sur le marché, afin de saisir les opportunités découlant des fluctuations de prix à court terme.

La logique de la stratégie

La stratégie utilise principalement les lignes EMA à 10 jours, à 21 jours et à 50 jours et l'indicateur CCI pour déterminer les délais d'entrée et de sortie.

La logique spécifique est la suivante: Lorsque la moyenne mobile à court terme (EMA à 10 jours) dépasse la moyenne mobile à moyen terme (EMA à 21 jours) et que la moyenne mobile à court terme est supérieure à la moyenne mobile à long terme (EMA à 50 jours) et que l'indicateur CCI est supérieur à 0, elle est considérée comme un signal haussier pour aller long. Lorsque la moyenne mobile à court terme dépasse la moyenne mobile à moyen terme et que la moyenne mobile à court terme est inférieure à la moyenne mobile à long terme et que l'indicateur CCI est inférieur à 0, elle est considérée comme un signal baissier pour aller court.

La logique de sortie consiste à fermer la position lorsque la moyenne mobile à court terme franchit la moyenne mobile à moyen terme.

Les avantages

  1. La combinaison du système de moyenne mobile et de l'indicateur CCI permet d'identifier efficacement les tendances des prix à court terme et les niveaux de surachat/survente.

  2. L'utilisation de croisements de moyennes mobiles pour déterminer les entrées et les sorties est simple et pratique.

  3. Les paramètres CCI et les réglages de cycle sont plus raisonnables pour filtrer certains faux signaux.

  4. L'adoption de plusieurs délais de moyennes mobiles peut permettre d'obtenir de meilleures opportunités de négociation sur les marchés oscillants.

Les risques

  1. Les grandes fluctuations des opérations à court terme peuvent entraîner un stop loss consécutif.

  2. Les paramètres CCI ne sont pas réglés correctement et peuvent accroître les faux signaux.

  3. Au cours des périodes d'intervalle et de consolidation, cette stratégie peut entraîner plusieurs petites pertes.

  4. Convient uniquement pour les traders fréquents à court terme, pas pour la détention à long terme.

Les mesures d'atténuation des risques correspondantes comprennent: l'optimisation des paramètres CCI, l'ajustement de la position de stop loss, l'ajout de conditions FILTER, etc.

Directions d'optimisation

  1. Différentes combinaisons de longueurs EMA peuvent être testées pour optimiser les paramètres.

  2. D'autres indicateurs ou conditions de filtrage peuvent être ajoutés pour filtrer certains faux signaux, tels que MACD, KDJ, etc.

  3. Utilisez un stop-loss dynamique pour contrôler une seule perte.

  4. La combinaison d'indicateurs de tendance à plus long terme permet d'éviter de négocier contre la tendance.

Conclusion

Dans l'ensemble, il s'agit d'une stratégie d'oscillation à court terme typique qui utilise le croisement des lignes moyennes mobiles combinées avec le statut de surachat / survente de l'indicateur CCI pour capturer les opportunités d'inversion à court terme. Cette stratégie convient aux transactions à court terme fréquentes, mais doit résister à une certaine pression de stop loss. La stabilité et la rentabilité de la stratégie peuvent être encore améliorées grâce à l'optimisation des paramètres et à l'ajout de conditions de filtre.


/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study(title="Strat CCI EMA scalping", shorttitle="EMA-CCI-strat", overlay=true)
strategy("Strat CCI EMA scalping", shorttitle="EMA-CCI-strat", overlay=true)

exponential = input(true, title="Exponential MA")

// the risk management inputs
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

src = close

ma10 = exponential ? ema(src, 10) : sma(src, 10)
ma21 = exponential ? ema(src, 21) : sma(src, 21)
ma50 = exponential ? ema(src, 50) : sma(src, 50)

xCCI = cci(close, 200)

//buy_cond = cross(ma21, ma50) and ma10 > ma21 and (xCCI > 0)
//sell_cond = cross(ma21, ma50) and ma10 < ma21  and (xCCI < 0)

buy_cond = ma10 > ma21 and ma10 > ma50 and xCCI > 0
sell_cond = ma10 < ma21 and ma10 < ma50 and xCCI < 0



// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => buy_cond
exitLong() => ma10 < ma21
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => sell_cond
exitShort() => ma10 > ma21
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
//strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
//strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)




//longCondition = buy_cond
//if(longCondition)
//    strategy.entry("Long", strategy.long)
//    strategy.exit("Close Long", "Long", when = exitLong())
    
//shortCondition = sell_cond
//if(shortCondition)
//    strategy.entry("Short", strategy.short)
//    strategy.exit("Close Short", "Short",  when = exitShort())

//plotshape(buy_cond, style=shape.flag, color=green, size=size.normal)
//plotshape(sell_cond, style=shape.flag, color=red, size=size.normal)

c1 = buy_cond==1 ? lime : sell_cond==1 ? red : #a3a3a3 // color

plot( ma10, color=red, style=line, title="10", linewidth=1)
plot( ma21, color=orange, style=line, title="21", linewidth=1)
plot( ma50, color=c1, style=line, title="50", linewidth=3)

//alertcondition(buy_cond, title = "Buy Condition", message = "Buy Condition Alert")
//alertcondition(sell_cond, title = "Sell Condition", message = "Sell Condition Alert")

Plus de