Croisement de tendance à indicateurs multiples combiné à une stratégie de volatilité dynamique ATR

RSI SMA MACD ATR MA TP SL
Date de création: 2025-02-20 16:28:37 Dernière modification: 2025-02-27 17:30:15
Copier: 0 Nombre de clics: 366
2
Suivre
319
Abonnés

Croisement de tendance à indicateurs multiples combiné à une stratégie de volatilité dynamique ATR Croisement de tendance à indicateurs multiples combiné à une stratégie de volatilité dynamique ATR

Aperçu

La stratégie est un système de suivi de tendance combinant plusieurs indicateurs techniques. Elle est principalement basée sur les signaux croisés du RSI, du MACD et du SMA pour déterminer la direction des transactions, tout en utilisant les indicateurs ATR pour ajuster dynamiquement les niveaux de stop-loss et de gain. La stratégie intègre également un filtre de volume de transactions pour assurer la négociation avec une liquidité suffisante sur le marché et utilise une partie du mécanisme de stop-loss pour optimiser la gestion des fonds.

Principe de stratégie

La stratégie utilise un mécanisme de triple vérification pour confirmer les signaux de transaction:

  1. Les principales tendances sont définies par la relation entre les positions de 50 et de 200
  2. Utilisez le RSI pour trouver des opportunités d’entrée à la croisée des zones de survente
  3. La dynamique de la tendance est confirmée en combinaison avec les indicateurs MACD
  4. Utilisation d’un filtre de volume pour assurer une liquidité adéquate du marché
  5. La mise en place d’objectifs de stop-loss et de profit dynamiques basés sur l’ATR

Le but de la multi-vérification est de réduire les faux signaux et d’améliorer l’exactitude des transactions. La stratégie consiste à faire plusieurs conditions (trend à la hausse + RSI à travers 40 + MACD à la hausse + confirmation du volume de transaction) pour ouvrir une position et utiliser 2 fois l’ATR comme arrêt-perte et 4 fois comme arrêt.

Avantages stratégiques

  1. Vérification croisée de multiples indicateurs techniques pour réduire efficacement les faux signaux
  2. Un mécanisme dynamique d’arrêt des fluctuations, adapté aux différents environnements de marché
  3. Une stratégie de blocage partiel pour bloquer une partie des bénéfices tout en conservant une marge de progression
  4. Le filtrage du volume des transactions assure une liquidité suffisante du marché
  5. Système complet de gestion des risques, y compris les arrêts fixes, le suivi des arrêts et des gains partiels

Risque stratégique

  1. La multiplication des indicateurs pourrait entraîner la perte de certaines opportunités commerciales
  2. Pourrait subir des baisses importantes dans des marchés volatils
  3. Une optimisation excessive des paramètres peut conduire à un surapprentissage
  4. Le filtrage du volume des transactions pourrait être une occasion manquée dans un marché à faible liquidité
  5. Les pertes dynamiques peuvent être déclenchées prématurément pendant une période de forte volatilité

Orientation de l’optimisation de la stratégie

  1. Considérer l’ajout d’un mécanisme d’adaptation à la volatilité du marché, afin d’ajuster dynamiquement les paramètres dans différents environnements de volatilité
  2. L’introduction de l’analyse pluricyclique pour améliorer la précision des jugements de tendances
  3. Optimiser le taux de coupe partielle et adapter la stratégie de coupe aux différents environnements de marché
  4. Augmentation des filtres d’intensité de tendance pour éviter de négocier dans un environnement de tendance faible
  5. Considérer l’ajout d’analyses saisonnières pour optimiser le timing des transactions

Résumer

Il s’agit d’une stratégie globale de suivi des tendances, qui établit un système de négociation robuste grâce à l’utilisation combinée de multiples indicateurs techniques. La principale caractéristique de la stratégie est de s’adapter aux changements du marché grâce à des mécanismes de stop-loss et de profit dynamiques tout en garantissant la sécurité. Bien qu’il existe des endroits qui nécessitent une optimisation, le cadre global est raisonnable et convient à un perfectionnement ultérieur et à des tests en direct.

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":"ETH_USDT"}]
*/

//@version=5
strategy(    title="AI Trade Strategy v2 (Extended) - Fixed",    shorttitle="AI_Trade_v2",    overlay=true,    format=format.price,    initial_capital=100000,    default_qty_type=strategy.percent_of_equity,    default_qty_value=100,    pyramiding=0)

//============================================================================
//=== 1) Basic Indicators (SMA, RSI, MACD) ==================================
//============================================================================

// Time Filter (optional, you can update)
inDateRange = (time >= timestamp("2018-01-01T00:00:00")) and (time <= timestamp("2069-01-01T00:00:00"))

// RSI Parameters
rsiLength  = input.int(14, "RSI Period")
rsiOB      = input.int(60, "RSI Overbought Level")
rsiOS      = input.int(40, "RSI Oversold Level")
rsiSignal  = ta.rsi(close, rsiLength)

// SMA Parameters
smaFastLen = input.int(50, "SMA Fast Period")
smaSlowLen = input.int(200, "SMA Slow Period")
smaFast    = ta.sma(close, smaFastLen)
smaSlow    = ta.sma(close, smaSlowLen)

// MACD Parameters
fastLength     = input.int(12, "MACD Fast Period")
slowLength     = input.int(26, "MACD Slow Period")
signalLength   = input.int(9,  "MACD Signal Period")
[macdLine, signalLine, histLine] = ta.macd(close, fastLength, slowLength, signalLength)

//============================================================================
//=== 2) Additional Filter (Volume) ========================================
//============================================================================
useVolumeFilter    = input.bool(true, "Use Volume Filter?")
volumeMaPeriod     = input.int(20, "Volume MA Period")
volumeMa           = ta.sma(volume, volumeMaPeriod)

// If volume filter is enabled, current bar volume should be greater than x times the average volume
volMultiplier = input.float(1.0, "Volume Multiplier (Volume > x * MA)")
volumeFilter  = not useVolumeFilter or (volume > volumeMa * volMultiplier)

//============================================================================
//=== 3) Trend Conditions (SMA) ============================================
//============================================================================
isBullTrend = smaFast > smaSlow
isBearTrend = smaFast < smaSlow

//============================================================================
//=== 4) Entry Conditions (RSI + MACD + Trend + Volume) ====================
//============================================================================

// RSI crossing above 30 + Bullish Trend + Positive MACD + Volume Filter
longCondition = isBullTrend    and ta.crossover(rsiSignal, rsiOS)    and (macdLine > signalLine)    and volumeFilter 
shortCondition = isBearTrend    and ta.crossunder(rsiSignal, rsiOB)    and (macdLine < signalLine)    and volumeFilter

//============================================================================
//=== 5) ATR-based Stop + Trailing Stop ===================================
//============================================================================
atrPeriod       = input.int(14, "ATR Period")
atrMultiplierSL = input.float(2.0, "Stop Loss ATR Multiplier")
atrMultiplierTP = input.float(4.0, "Take Profit ATR Multiplier")

atrValue = ta.atr(atrPeriod)

//============================================================================
//=== 6) Trade (Position) Management ======================================
//============================================================================
if inDateRange
    //--- Long Entry ---
    if longCondition
        strategy.entry(id="Long", direction=strategy.long, comment="Long Entry")

    //--- Short Entry ---
    if shortCondition
        strategy.entry(id="Short", direction=strategy.short, comment="Short Entry")

    //--- Stop & TP for Long Position ---
    if strategy.position_size > 0
        // ATR-based fixed Stop & TP calculation
        longStopPrice  = strategy.position_avg_price - atrValue * atrMultiplierSL
        longTakeProfit = strategy.position_avg_price + atrValue * atrMultiplierTP

        // PARTIAL EXIT: (Example) take 50% of the position at early TP
        partialTP = strategy.position_avg_price + (atrValue * 2.5)
        strategy.exit(            id         = "Partial TP Long",            stop       = na,            limit      = partialTP,            qty_percent= 50,            from_entry = "Long"        )

        // Trailing Stop + Final ATR Stop
        // WARNING: trail_offset=... is the offset in price units.
        // For example, in BTCUSDT, a value like 300 means a 300 USDT trailing distance.
        float trailingDist = atrValue * 1.5
        strategy.exit(            id          = "Long Exit (Trail)",            stop        = longStopPrice,            limit       = longTakeProfit,            from_entry  = "Long",            trail_offset= trailingDist        )

    //--- Stop & TP for Short Position ---
    if strategy.position_size < 0
        // ATR-based fixed Stop & TP calculation for Short
        shortStopPrice  = strategy.position_avg_price + atrValue * atrMultiplierSL
        shortTakeProfit = strategy.position_avg_price - atrValue * atrMultiplierTP

        // PARTIAL EXIT: (Example) take 50% of the position at early TP
        partialTPShort = strategy.position_avg_price - (atrValue * 2.5)
        strategy.exit(            id         = "Partial TP Short",            stop       = na,            limit      = partialTPShort,            qty_percent= 50,            from_entry = "Short"        )

        // Trailing Stop + Final ATR Stop for Short
        float trailingDistShort = atrValue * 1.5
        strategy.exit(            id          = "Short Exit (Trail)",            stop        = shortStopPrice,            limit       = shortTakeProfit,            from_entry  = "Short",            trail_offset= trailingDistShort        )

//============================================================================
//=== 7) Plot on Chart (SMA, etc.) =========================================
//============================================================================
plot(smaFast, color=color.blue,   linewidth=2, title="SMA (Fast)")
plot(smaSlow, color=color.orange, linewidth=2, title="SMA (Slow)")

// (Optional) Plot Stop & TP levels dynamically:
longStopForPlot  = strategy.position_size > 0 ? strategy.position_avg_price - atrValue * atrMultiplierSL : na
longTPForPlot    = strategy.position_size > 0 ? strategy.position_avg_price + atrValue * atrMultiplierTP : na
shortStopForPlot = strategy.position_size < 0 ? strategy.position_avg_price + atrValue * atrMultiplierSL : na
shortTPForPlot   = strategy.position_size < 0 ? strategy.position_avg_price - atrValue * atrMultiplierTP : na

plot(longStopForPlot,  color=color.red,   style=plot.style_linebr, title="Long Stop")
plot(longTPForPlot,    color=color.green, style=plot.style_linebr, title="Long TP")
plot(shortStopForPlot, color=color.red,   style=plot.style_linebr, title="Short Stop")
plot(shortTPForPlot,   color=color.green, style=plot.style_linebr, title="Short TP")