Stratégie de trading de tendance inter-cycles Bitcoin basée sur la force potentielle dynamique multi-niveaux EMA et RSI

EMA RSI ATR
Date de création: 2025-02-20 17:14:37 Dernière modification: 2025-02-27 17:24:26
Copier: 0 Nombre de clics: 422
2
Suivre
319
Abonnés

Stratégie de trading de tendance inter-cycles Bitcoin basée sur la force potentielle dynamique multi-niveaux EMA et RSI Stratégie de trading de tendance inter-cycles Bitcoin basée sur la force potentielle dynamique multi-niveaux EMA et RSI

Aperçu

La stratégie est un système de trading de suivi des tendances basé sur l’analyse transpériodique, combinant les moyennes EMA et les indices RSI au niveau de la périphérie et de la journée pour identifier les tendances et la dynamique du marché. La stratégie identifie les opportunités de négociation par la cohérence des tendances sur plusieurs périodes et utilise des arrêts dynamiques basés sur l’ATR pour gérer les risques. Le système adopte un modèle de gestion des fonds, utilisant 100% des fonds du compte pour chaque transaction et prenant en compte un frais de transaction de 0,1%.

Principe de stratégie

La logique fondamentale de la stratégie repose sur les éléments clés suivants :

  1. Utilise les EMA au niveau de la courbe comme filtres de tendance principaux, en combinant la relation entre les cours de clôture de la courbe et les EMA de la courbe pour déterminer l’état du marché
  2. Les seuils déterminés par la tendance à l’ajustement dynamique de l’indicateur ATR pour augmenter l’adaptabilité de la stratégie
  3. L’intégration de l’indicateur de dynamique RSI comme condition de filtrage supplémentaire des transactions
  4. Système de stop loss basé sur le prix le plus bas de 7 jours et ATR
  5. Lorsque des signaux d’avertissement d’une hausse excessive apparaissent, la stratégie suspend l’ouverture des positions pour éviter le risque

Avantages stratégiques

  1. L’analyse des périodes multiples offre une perspective plus complète du marché et permet de filtrer efficacement les fausses percées.
  2. Le mécanisme de stop-loss dynamique s’adapte à la volatilité du marché et offre un contrôle du risque souple
  3. Les filtres RSI dynamiques aident à confirmer la force de la tendance et améliorent la qualité d’entrée
  4. Le système contient des mécanismes d’alerte précoce à la surdose d’alcool, qui aident à éviter les risques de retrait.
  5. Les paramètres de la stratégie sont flexibles et peuvent être optimisés en fonction des différentes conditions du marché

Risque stratégique

  1. Les entrées et sorties fréquentes sur les marchés de gré à gré peuvent entraîner une augmentation des coûts de transaction.
  2. Le risque de rétractation est plus élevé pour les transactions effectuées avec 100% de fonds
  3. La dépendance à l’indicateur technique peut entraîner une réaction tardive aux événements inattendus du marché.
  4. L’analyse de plusieurs périodes peut donner lieu à des signaux contradictoires à différents niveaux.
  5. Les arrêts de suivi peuvent être déclenchés prématurément lors de fortes fluctuations

Orientation de l’optimisation de la stratégie

  1. Introduction de filtres de volatilité pour réduire la fréquence des transactions pendant les périodes de faible volatilité
  2. Ajout d’un système de gestion des positions afin d’ajuster le pourcentage de détention en fonction de la dynamique du marché
  3. L’intégration des indicateurs fondamentaux fournit un jugement supplémentaire sur les conditions du marché
  4. Optimiser le suivi des paramètres de stop-loss afin de mieux les adapter aux différentes phases du marché
  5. Ajout d’analyses de volumes de transactions pour une meilleure précision dans le jugement des tendances

Résumer

Il s’agit d’une stratégie de suivi de tendance structurée et logiquement claire. Grâce à l’analyse de plusieurs périodes de temps et au filtrage des indicateurs dynamiques, la stratégie est mieux à même de capturer les tendances principales. Bien qu’il existe des risques inhérents, la stratégie a encore beaucoup à améliorer en optimisant les paramètres et en ajoutant des indicateurs supplémentaires.

Code source de la stratégie
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

// @version=6
strategy("Bitcoin Regime Filter Strategy",         // Strategy name
     overlay=true,                                 // The strategy will be drawn directly on the price chart
     initial_capital=10000,                        // Initial capital of 10000 USD
     currency=currency.USDT,                       // Defines the currency used, USDT
     default_qty_type=strategy.percent_of_equity,  // Position size will be calculated as a percentage of equity
     default_qty_value=100,                        // The strategy uses 100% of available capital for each trade
     commission_type=strategy.commission.percent,  // The strategy uses commission as a percentage
     commission_value=0.1)                         // Transaction fee is 0.1%

// User input 
res = input.timeframe(title = "Timeframe", defval = "W")                     // Higher timeframe for reference
len = input.int(title = "EMA Length", defval = 20)                           // EMA length input
marketTF = input.timeframe(title = "Market Timeframe", defval = "D")         // Current analysis timeframe (D)
useRSI = input.bool(title = "Use RSI Momentum Filter", defval = false)       // Option to use RSI filter
rsiMom = input.int(title = "RSI Momentum Threshold", defval = 70)            // RSI momentum threshold (default 70)

// Custom function to output data
f_sec(_market, _res, _exp) => request.security(_market, _res, _exp[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0: 1]

// The f_sec function has three input parameters: _market, _res, _exp
// request.security = a Pine Script function to fetch market data, accessing OHLC data
// _exp[barstate.isrealtime ? 1 : 0] checks if the current bar is real-time, and retrieves the previous bar (1) or the current bar (0)
// [barstate.isrealtime ? 0 : 1] returns the value of request.security, with a real-time check on the bar

// Define time filter
dateFilter(int st, int et) => time >= st and time <= et
// The dateFilter function has two input parameters: st (start time) and et (end time)
// It checks if the current bar's time is between st and et

// Fetch EMA value
ema = ta.ema(close, len)                                   // Calculate EMA with close prices and input length
htfEmaValue = f_sec(syminfo.tickerid, res, ema)            // EMA value for high time frame, using f_sec function

// Fetch ATR value
atrValue = ta.atr(5)

// Check if price is above or below EMA
marketPrice = f_sec(syminfo.tickerid, marketTF, close)
regimeFilter = marketPrice > (htfEmaValue + (atrValue * 0.25))       // Compare current price with EMA in higher timeframe (with ATR dependency)

// Calculate RSI value
rsiValue = ta.rsi(close, 7)

// Bullish momentum filter
bullish = regimeFilter and (rsiValue > rsiMom or not useRSI)

// Set caution alert
caution = bullish and (ta.highest(high, 7) - low) > (atrValue * 1.5)

// Set momentum background color
bgCol = color.red
if bullish[1]
    bgCol := color.green
if caution[1]
    bgCol := color.orange

// Plot background color
plotshape(1, color = bgCol, style = shape.square, location = location.bottom, size = size.auto, title = "Momentum Strength")
plot(htfEmaValue, color = close > htfEmaValue ? color.green : color.red, linewidth = 2)

// Initialize trailing stop variable
var float trailStop = na

// Entry logic
if bullish and strategy.position_size == 0 and not caution
    strategy.entry(id = "Buy", direction = strategy.long)
    trailStop := na

// Trailing stop logic
temp_trailStop = ta.highest(low, 7) - (caution[1] ? atrValue * 0.2 : atrValue)
if strategy.position_size > 0
    if temp_trailStop > trailStop or na(trailStop)
        trailStop := temp_trailStop

// Exit logic
if (close < trailStop or close < htfEmaValue)
    strategy.close("Buy", comment = "Sell")

// Plot stop loss line
plot(strategy.position_size[1] > 0 ? trailStop : na, style = plot.style_linebr, color = color.red, title = "Stoploss")