Stratégie de support et de résistance dynamique CCI


Date de création: 2024-01-22 16:37:46 Dernière modification: 2024-01-22 16:37:46
Copier: 1 Nombre de clics: 725
1
Suivre
1617
Abonnés

Stratégie de support et de résistance dynamique CCI

Aperçu

Cette stratégie utilise les nœuds de l’indicateur CCI pour calculer les niveaux de support et de résistance dynamiques, combinés à des jugements de tendance pour rechercher des signaux d’achat et de vente. La stratégie intègre les caractéristiques inverses du CCI ainsi que la capacité de suivi des tendances, dans le but de saisir des points de basculement dans les tendances intermédiaires pour réaliser des gains.

Principe de stratégie

L’indicateur CCI peut indiquer si le marché est trop faible ou trop fort. Les valeurs de 80 et 80 peuvent être utilisées pour déterminer si le marché est en sur-achat ou en sur-vente. Cette stratégie utilise cette caractéristique du CCI pour calculer les nœuds de chaque ligne K de 50 à gauche et à droite, pour obtenir les nœuds supérieurs et inférieurs, puis construire les lignes de résistance et les lignes de support de la dynamique de la zone d’amortissement sur la base des nœuds.

La stratégie génère un signal d’achat lorsque le prix de clôture est supérieur au prix d’ouverture et inférieur à la ligne de résistance supérieure. Elle génère un signal de vente lorsque le prix de clôture est inférieur au prix d’ouverture et supérieur à la ligne de résistance inférieure.

Le stop loss et le stop stop stop sont basés sur des calculs dynamiques de l’indicateur ATR, ce qui rend le contrôle des risques de la stratégie plus raisonnable.

Analyse des avantages

  1. Utilisez les caractéristiques inverses de l’indicateur CCI pour acheter et vendre près des points de basculement, ce qui augmente la probabilité de profit.
  2. Le but est de réduire les pertes en évitant les opérations de contre-courant.
  3. Le paramètre Stop Loss Stop est défini pour rendre le contrôle des risques plus rationnel.
  4. Paramètres personnalisables tels que la période CCI, la taille de la zone de couverture, etc., pour s’adapter à plus de conditions de marché.

Analyse des risques

  1. L’indicateur CCI est vulnérable aux faux signaux et doit être combiné avec un filtre de tendance.
  2. La reprise n’est pas forcément un succès, il y a un risque de perte avec une certaine probabilité.
  3. Une mauvaise configuration des paramètres peut entraîner des transactions trop fréquentes ou des opportunités manquées.

Il est possible de réduire le risque en optimisant les paramètres, en ajustant le stop loss, etc. De plus, la stratégie peut être utilisée comme un outil auxiliaire pour d’autres indicateurs, sans avoir à dépendre entièrement de ses signaux de trading.

Direction d’optimisation

  1. Optimisation de la taille des zones de couverture pour les marchés à taux de volatilité variable.
  2. Optimisation des paramètres ATR cycliques pour obtenir un stop-loss dynamique plus précis.
  3. Essayez différents réglages de paramètres CCI.
  4. Tester l’efficacité d’autres types de tendances.

Résumer

Cette stratégie, qui intègre la capacité de filtrage multicouche de l’indicateur CCI et la confirmation de filtrage de la détermination de la tendance, a une certaine valeur pratique. Le stop-loss dynamique permet également à la stratégie de contrôler les risques dans les applications réelles.

Code source de la stratégie
/*backtest
start: 2023-12-22 00:00:00
end: 2024-01-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © AliSignals


//@version=5
strategy("CCI based support and resistance strategy", overlay=true  )


cci_length = input.int(50, "cci length")
right_pivot = input.int(50, "right pivot")
left_pivot = input.int(50, "left pivot")
buffer = input.float(10.0, "buffer")
trend_matter = input.bool(true, "trend matter?")
showmid = input.bool ( false , "show mid?")
trend_type = input.string("cross","trend type" ,options = ["cross","slope"])
slowma_l = input.int(100, "slow ma length")
fastma_l = input.int(50, "fast ma length")
slope_l = input.int(5,  "slope's length for trend detection")
ksl = input.float(1.1)
ktp = input.float(2.2)
restf = input.timeframe(title="Time Frame of Last Period for Calculating max" , defval="D")



// Calculating Upper and Lower CCI
cci = ta.cci(hlc3,cci_length)

uppercci = 0.0
lowercci = 0.0

uppercci := fixnan(ta.pivothigh(cci, left_pivot, right_pivot)) - buffer
lowercci := fixnan(ta.pivotlow (cci, left_pivot, right_pivot)) + buffer
midccci  = math.avg(uppercci,lowercci)


// Support and Resistance based on CCI
res = uppercci*(0.015*ta.dev(hlc3,cci_length))+ ta.sma(hlc3,cci_length)
sup = lowercci*(0.015*ta.dev(hlc3,cci_length))+ ta.sma(hlc3,cci_length)
mid =  midccci*(0.015*ta.dev(hlc3,cci_length))+ ta.sma(hlc3,cci_length)



// Calculating trend
t_cross  = 0
t_cross := ta.ema(close,fastma_l) > ta.ema(close,slowma_l) ? 1 : ta.ema(close,fastma_l) < ta.ema(close,slowma_l) ? -1 : t_cross[1] 

t_slope  = 0
t_slope := ta.ema(close,slowma_l) > ta.ema(close,slowma_l)[slope_l] ? 1 : ta.ema(close,slowma_l) < ta.ema(close,slowma_l)[slope_l]  ? -1 : t_slope[1] 

t  = 0
t := trend_type == "cross" ? t_cross : trend_type == "slope" ? t_slope : na

colort =  trend_matter == false ? color.rgb(201, 251, 0) : t == 1 ? color.rgb(14, 243, 132) :  t == -1 ? color.rgb(255, 34, 34) : na
bull_t = trend_matter == false or t ==  1
bear_t = trend_matter == false or t == -1

plot(res, color = colort)
plot(sup, color = colort)
plot(showmid == true ? mid : na)


// Long and Short enter condition
buy  = bull_t == 1 and ta.lowest (2) < sup and close > open and close > sup
sell = bear_t == 1 and ta.highest(2) > res and close < open and close < res

plotshape( buy , color=color.rgb(6, 255, 23) , location = location.belowbar, style = shape.triangleup  , size = size.normal)
plotshape( sell, color=color.rgb(234, 4, 4) ,  location = location.abovebar, style = shape.triangledown, size = size.normal)





atr = ta.atr(100)



CLOSE=request.security(syminfo.tickerid, restf, close)
max = 0.0
max := CLOSE == CLOSE[1] ? math.max(max[1], atr) : atr
act_atr = 0.0
act_atr := CLOSE == CLOSE[1] ? act_atr[1] : max[1]

atr1 =  math.max(act_atr, atr) 

dis_sl = atr1 * ksl
dis_tp = atr1 * ktp


var float longsl  = open[1] - dis_sl
var float shortsl = open[1] + dis_sl
var float longtp =   open[1] + dis_tp
var float shorttp =  open[1] - dis_tp


longCondition = buy
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = sell
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)


longsl  := strategy.position_size > 0  ? longsl[1]  : close - dis_sl
shortsl := strategy.position_size < 0 ? shortsl[1] : close + dis_sl
longtp  := strategy.position_size > 0  ? longtp[1]  : close + dis_tp
shorttp := strategy.position_size < 0 ? shorttp[1] : close - dis_tp




if strategy.position_size > 0 
    strategy.exit(id="My Long close Id", from_entry ="My Long Entry Id" , stop=longsl, limit=longtp)
if strategy.position_size < 0 
    strategy.exit(id="My Short close Id", from_entry ="My Short Entry Id" , stop=shortsl, limit=shorttp)