Stratégie de trading intelligente à double indicateur adaptatif et à synchronisation croisée

RSI CCI EMA TIMEFRAME THRESHOLD
Date de création: 2025-02-19 10:56:59 Dernière modification: 2025-02-19 10:56:59
Copier: 2 Nombre de clics: 435
1
Suivre
1617
Abonnés

Stratégie de trading intelligente à double indicateur adaptatif et à synchronisation croisée

Aperçu

Il s’agit d’une stratégie de trading auto-adaptative basée sur les indicateurs techniques RSI et CCI. La stratégie consiste à surveiller l’état croisé des indicateurs RSI et CCI sur différentes périodes de temps, en combinant les tendances de la ligne de parité EMA, pour construire un système de négociation complet. La stratégie possède des caractéristiques telles que la forte adaptabilité et la stabilité du signal, ce qui permet de capturer efficacement les occasions de survente du marché.

Principe de stratégie

La logique centrale de la stratégie est la suivante:

  1. Adaptation du cycle de temps: réglage des paramètres du RSI et du CCI en fonction des différentes périodes de temps (de 1 minute à 4 heures).
  2. Confirmation du double indicateur: utilisation d’une combinaison de RSI (indicateur de faiblesse relative) et de CCI (indicateur de tendance) pour filtrer les signaux de négociation. Un signal de négociation n’est généré que lorsque le RSI et le CCI répondent à des conditions spécifiques simultanément.
  3. Vérification de la continuité du signal: la stabilité du signal est assurée par la définition d’une durée minimale (stayTimeFrames).
  4. Stop loss dynamique: le point de stop loss est un point de stop loss dynamique basé sur les niveaux RSI et CCI au moment de l’entrée.
  5. Confirmation de la tendance: utilisation de l’EMA à 200 cycles comme référence de tendance.

Avantages stratégiques

  1. Adaptabilité: les stratégies peuvent ajuster automatiquement les paramètres en fonction de différentes périodes de temps, ce qui est plus adaptatif.
  2. Haute fiabilité du signal: la fiabilité du signal a été considérablement améliorée grâce à la confirmation croisée de deux indicateurs techniques.
  3. Contrôle des risques: un mécanisme d’arrêt de perte dynamique permet de contrôler efficacement les risques.
  4. Les règles d’exploitation sont claires: les conditions d’entrée et de sortie sont claires, ce qui facilite les opérations pratiques.
  5. Scalable: le cadre de la stratégie est flexible et permet d’ajouter de nouvelles conditions de filtrage au besoin.

Risque stratégique

  1. Sensitivité des paramètres: les paramètres optimaux peuvent varier selon les environnements de marché.
  2. Risque de choc horizontal: il peut y avoir des faux signaux pendant les chocs du marché.
  3. Effets des points de glissement: les transactions à haute fréquence peuvent être affectées par des points de glissement.
  4. Signal retardé: le mécanisme de confirmation multiple peut entraîner un léger retard dans le temps d’entrée.
  5. La dépendance aux conditions du marché: les marchés en forte tendance peuvent être plus performants que les marchés en turbulence.

Orientation de l’optimisation de la stratégie

  1. Adaptation des paramètres: un mécanisme d’optimisation des paramètres d’adaptation peut être introduit, en ajustant les paramètres en fonction de la dynamique de l’état du marché.
  2. Identification de l’environnement de marché: ajout d’un module d’identification de l’environnement de marché permettant d’utiliser différentes stratégies de négociation dans différents états de marché.
  3. Adaptation de la volatilité: introduire un indicateur de volatilité et ajuster le paramètre de stop-loss en fonction de la taille de la volatilité.
  4. Filtrage des signaux: ajout d’indicateurs techniques et de reconnaissance des formes pour filtrer les faux signaux.
  5. Gestion des risques: amélioration des programmes de gestion des fonds, augmentation du temps de détention et du contrôle des positions.

Résumer

La stratégie, combinant les avantages des indicateurs RSI et CCI, construit un système de négociation robuste. Les caractéristiques d’adaptation de la stratégie et son mécanisme de contrôle des risques perfectionné lui confèrent une bonne praticité. Grâce à une optimisation et à un perfectionnement continus, la stratégie est susceptible d’obtenir de meilleures performances dans les transactions réelles.

Code source de la stratégie
/*backtest
start: 2025-01-19 00:00:00
end: 2025-02-18 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("RSI & CCI Strategy with Alerts", overlay=true)

// Detect current chart timeframe
tf = timeframe.period

// Define settings for different timeframes
rsiLength = tf == "1" ? 30 : tf == "5" ? 30 : tf == "15" ? 30 : tf == "30" ? 30 : 30  // Default
cciLength = tf == "1" ? 15 : tf == "5" ? 20 : tf == "15" ? 20 : tf == "30" ? 20 : 20  // Default
cciBuyThreshold = tf == "1" ? -100 : tf == "5" ? -100 : tf == "15" ? -100 : tf == "30" ? -100 : -100
cciSellThreshold = tf == "1" ? 100 : tf == "5" ? 100 : tf == "15" ? 100 : tf == "30" ? 100 : 100  // Default
stayTimeFrames = tf == "1" ? 1 : tf == "5" ? 1 : tf == "15" ? 1 : tf == "30" ? 1 : tf == "240" ? 1 : 2  // Default
stayTimeFramesOver =tf == "1" ? 1 : tf == "5" ? 2 : tf == "15" ? 2 : tf == "30" ? 3 : 2 // Default

// Calculate RSI & CCI
rsi = ta.rsi(close, rsiLength)
rsiOver = ta.rsi(close, 14)
cci = ta.cci(close, cciLength)

// EMA 50
ema200 = ta.ema(close, 200)
plot(ema200, color=color.rgb(255, 255, 255), linewidth=2, title="EMA 200")

// CCI candle threshold tracking
var int cciEntryTimeLong = na
var int cciEntryTimeShort = na

// Store entry time when CCI enters the zone
if (cci < cciBuyThreshold)
    if na(cciEntryTimeLong)
        cciEntryTimeLong := bar_index
else
    cciEntryTimeLong := na

if (cci > cciSellThreshold)
    if na(cciEntryTimeShort)
        cciEntryTimeShort := bar_index
else
    cciEntryTimeShort := na

// Confirming CCI has stayed in the threshold for required bars
cciStayedBelowNeg100 = not na(cciEntryTimeLong) and (bar_index - cciEntryTimeLong >= stayTimeFrames) and rsi >= 53
cciStayedAbove100 = not na(cciEntryTimeShort) and (bar_index - cciEntryTimeShort >= stayTimeFrames) and rsi <= 47


// CCI & RSI candle threshold tracking for Buy Over and Sell Over signals
var int buyOverEntryTime = na
var int sellOverEntryTime = na

// Track entry time when RSI and CCI conditions are met
if (rsiOver <= 31 and cci <= -120)
    if na(buyOverEntryTime)
        buyOverEntryTime := bar_index
else
    buyOverEntryTime := na

if (rsiOver >= 69 and cci >= 120)
    if na(sellOverEntryTime)
        sellOverEntryTime := bar_index
else
    sellOverEntryTime := na

// Confirm that conditions are met for the required stayTimeFrames
buyOverCondition = not na(buyOverEntryTime) and (bar_index - buyOverEntryTime >= stayTimeFramesOver)
sellOverCondition = not na(sellOverEntryTime) and (bar_index - sellOverEntryTime <= stayTimeFramesOver)

//Buy and sell for over bought or sell 
conditionOverBuy = buyOverCondition
conditionOverSell = sellOverCondition

// Buy and sell conditions
buyCondition = cciStayedBelowNeg100
sellCondition = cciStayedAbove100

// // Track open positions
var bool isLongOpen = false
var bool isShortOpen = false

// // Strategy logic for backtesting
// if (buyCondition and not isLongOpen)
//     strategy.entry("Long", strategy.long)
//     isLongOpen := true
//     isShortOpen := false

// if (sellCondition and not isShortOpen)
//     strategy.entry("Short", strategy.short)
//     isShortOpen := true
//     isLongOpen := false

// // Close positions based on EMA 50
// if (isLongOpen and exitLongCondition)
//     strategy.close("Long")
//     isLongOpen := false

// if (isShortOpen and exitShortCondition)
//     strategy.close("Short")
//     isShortOpen := false



// Track RSI at position entry
var float entryRSILong = na
var float entryRSIShort = na

// Track CCI at position entry
var float entryCCILong = na
var float entryCCIShort = na

if (buyOverCondition and not isLongOpen)
    strategy.entry("Long", strategy.long)
    entryRSILong := rsi  // Store RSI at entry
    entryCCILong := cci
    isLongOpen := true
    isShortOpen := false

if (sellOverCondition and not isShortOpen)
    strategy.entry("Short", strategy.short)
    entryRSIShort := rsi  // Store RSI at entry
    entryCCIShort := cci  // Stpre CCI at entry
    isShortOpen := true
    isLongOpen := false

exitLongRSICondition = isLongOpen and not na(entryRSILong) and rsi >= (entryRSILong + 12)  or rsi <= (entryRSILong -8)
exitShortRSICondition = isShortOpen and not na(entryRSIShort) and rsi <= (entryRSIShort - 12)  or rsi >= (entryRSIShort +8)

exitLongCCICondition = isLongOpen and not na(entryCCILong) and cci <= (entryCCILong -100)
exitShortCCICondition = isShortOpen and not na(entryCCIShort) and cci >= (entryCCIShort +100)

// Close positions based on EMA 50 or RSI change
if (isLongOpen and (exitLongRSICondition) or (exitLongCCICondition))
    strategy.close("Long")
    isLongOpen := false
    entryRSILong := na
    entryCCILong := na
    isLongOpen := false

if (isShortOpen and (exitShortRSICondition) or (exitShortCCICondition))
    strategy.close("Short")
    isShortOpen := false
    entryRSIShort := na
    entryCCIShort := na
    isShortOpen := false



// Plot buy and sell signals
plotshape(buyCondition, style=shape.labelup, location=location.belowbar, color=color.green, size=size.large, title="Buy Signal", text="BUY")
plotshape(sellCondition, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.large, title="Sell Signal", text="SELL")

//Plot buy and sell OverBought
plotshape(conditionOverBuy, style=shape.labelup, location=location.belowbar, color=color.rgb(255, 238, 0), size=size.large, title="OverBuy Signal", text="Over Sell")
plotshape(conditionOverSell, style=shape.labeldown, location=location.abovebar, color=color.rgb(186, 40, 223), size=size.large, title="OverSell Signal", text="Over Buy")

// Alerts
alertcondition(buyCondition, title="Buy Alert", message="Buy Signal Triggered")
alertcondition(sellCondition, title="Sell Alert", message="Sell Signal Triggered")