Les ressources ont été chargées... Je charge...

Stratégie de suivi de la rupture de l'action du prix MACD double

Auteur:ChaoZhang est là., Date: 2024-11-25 11h15 et 50 min
Les étiquettes:Le MACDATR

img

Résumé

Il s'agit d'une stratégie de trading qui combine deux indicateurs MACD avec une analyse d'action des prix. La stratégie identifie les tendances du marché à travers des changements de couleur dans les histogrammes MACD sur la période de 15 minutes, recherche des modèles de bougies forts sur la période de 5 minutes et confirme les signaux de rupture sur la période de 1 minute.

Principes de stratégie

La stratégie utilise deux indicateurs MACD avec des paramètres différents (34/144/9 et 100/200/50) pour confirmer les tendances du marché. Lorsque les deux histogrammes MACD montrent la même tendance de couleur, le système recherche des modèles de bougies fortes sur le graphique de 5 minutes, caractérisés par des corps 1,5 fois plus grands que leurs ombres. Une fois qu'une bougie forte est identifiée, le système surveille les écarts sur le graphique de 1 minute. Les positions sont ouvertes lorsque le prix dépasse les sommets des tendances haussières ou les sommets des tendances baissières. Les arrêts sont définis en fonction de l'ATR, tandis qu'un multiple de 1,5x ATR est utilisé pour les profits dynamiques.

Les avantages de la stratégie

  1. Analyse de plusieurs délais: Combine des délais de 15 minutes, 5 minutes et 1 minute pour une meilleure fiabilité du signal
  2. Confirmation de tendance: utilise la double validation croisée MACD pour réduire les faux signaux
  3. Analyse de l'action des prix: identifie les niveaux clés des prix à travers de fortes tendances des bougies
  4. Gestion dynamique des risques: mécanismes adaptatifs de stop-loss et de prise de bénéfices à la suite basés sur l'ATR
  5. Filtrage des signaux: des conditions d'entrée strictes réduisent les faux échanges
  6. Automatisation élevée: le commerce entièrement automatisé réduit l'intervention humaine

Risques stratégiques

  1. Risque d'inversion de tendance: éventuelle fausse rupture sur des marchés très volatils
  2. Risque de glissement: la négociation à haute fréquence sur une période d'une minute peut présenter un glissement
  3. Risque de suréchange: les signaux fréquents peuvent conduire à une suréchange
  4. Dépendance de l'environnement du marché: peut être sous-performant sur différents marchés Mesures d'atténuation:
  • Ajouter des filtres de tendance
  • Définition des seuils de volatilité minimaux
  • Mettre en œuvre des limites de fréquence des échanges
  • Introduction de la reconnaissance de l'environnement du marché

Directions d'optimisation

  1. Optimisation des paramètres MACD: ajuster les paramètres MACD en fonction des caractéristiques du marché
  2. Optimisation du stop-loss: envisager d'ajouter des stops dynamiques basés sur la volatilité
  3. Filtres de temps de négociation: Ajouter des restrictions de fenêtre de négociation
  4. Gestion des positions: mise en œuvre de mécanismes d'entrée et de sortie à grande échelle
  5. Filtrage de l'environnement du marché: ajout d'indicateurs de force de tendance
  6. Contrôle des recours: Introduction d'un contrôle des risques basé sur la courbe des actions

Résumé

Il s'agit d'un système de stratégie complet combinant analyse technique et gestion des risques. Il garantit la qualité des transactions grâce à une analyse multi-temporelle et un filtrage strict des signaux tout en gérant efficacement les risques grâce à des arrêts dynamiques et à des profits de trailing. La stratégie montre une forte adaptabilité mais nécessite une optimisation continue basée sur les conditions du marché.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-11-24 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=5
strategy("Price Action + Double MACD Strategy with ATR Trailing", overlay=true)

// Inputs for MACD
fastLength1 = input.int(34, title="First MACD Fast Length")
slowLength1 = input.int(144, title="First MACD Slow Length")
signalLength1 = input.int(9, title="First MACD Signal Length")

fastLength2 = input.int(100, title="Second MACD Fast Length")
slowLength2 = input.int(200, title="Second MACD Slow Length")
signalLength2 = input.int(50, title="Second MACD Signal Length")

// Input for ATR Trailing
atrMultiplier = input.float(1.5, title="ATR Multiplier for Trailing")

// Inputs for Stop Loss
atrStopMultiplier = input.float(1.0, title="ATR Multiplier for Stop Loss")

// MACD Calculations
[macdLine1, signalLine1, macdHist1] = ta.macd(close, fastLength1, slowLength1, signalLength1)
[macdLine2, signalLine2, macdHist2] = ta.macd(close, fastLength2, slowLength2, signalLength2)

// Get 15M MACD histogram colors
macdHist1Color = request.security(syminfo.tickerid, "15", (macdHist1 >= 0 ? (macdHist1[1] < macdHist1 ? #26A69A : #B2DFDB) : (macdHist1[1] < macdHist1 ? #FFCDD2 : #FF5252)))
macdHist2Color = request.security(syminfo.tickerid, "15", (macdHist2 >= 0 ? (macdHist2[1] < macdHist2 ? #26A69A : #B2DFDB) : (macdHist2[1] < macdHist2 ? #FFCDD2 : #FF5252)))

// Check MACD color conditions
isMacdUptrend = macdHist1Color == #26A69A and macdHist2Color == #26A69A
isMacdDowntrend = macdHist1Color == #FF5252 and macdHist2Color == #FF5252

// Function to detect strong 5M candles
isStrongCandle(open, close, high, low) =>
    body = math.abs(close - open)
    tail = math.abs(high - low) - body
    body > tail * 1.5  // Ensure body is larger than the tail

// Variables to track state
var float fiveMinuteHigh = na
var float fiveMinuteLow = na
var bool tradeExecuted = false
var bool breakoutDetected = false
var float entryPrice = na
var float stopLossPrice = na
var float longTakeProfit = na
var float shortTakeProfit = na

// Check for new 15M candle and reset flags
if ta.change(time("15"))
    tradeExecuted := false      // Reset trade execution flag
    breakoutDetected := false  // Reset breakout detection
    if isStrongCandle(open[1], close[1], high[1], low[1])
        fiveMinuteHigh := high[1]
        fiveMinuteLow := low[1]
    else
        fiveMinuteHigh := na
        fiveMinuteLow := na

// Get 1-minute close prices
close1m = request.security(syminfo.tickerid, "5", close)

// Ensure valid breakout direction and avoid double breakouts
if not na(fiveMinuteHigh) and not breakoutDetected
    for i = 1 to 3
        if close1m[i] > fiveMinuteHigh and not tradeExecuted  // 1M breakout check with close
            breakoutDetected := true
            if isMacdUptrend 
                // Open Long trade
                entryPrice := close
                stopLossPrice := close - (atrStopMultiplier * ta.atr(14))  // ATR-based stop loss
                longTakeProfit := close + (atrMultiplier * ta.atr(14)) // Initialize take profit

                strategy.entry("Long", strategy.long)
                tradeExecuted := true
            break // Exit the loop after detecting a breakout

        else if close1m[i] < fiveMinuteLow and not tradeExecuted  // 1M breakout check with close
            breakoutDetected := true
            if isMacdDowntrend
                // Open Short trade
                entryPrice := close
                stopLossPrice := close + (atrStopMultiplier * ta.atr(14))  // ATR-based stop loss
                shortTakeProfit := close - (atrMultiplier * ta.atr(14)) // Initialize take profit

                strategy.entry("Short", strategy.short)
                tradeExecuted := true
            break // Exit the loop after detecting a breakout

// Update trailing take-profit dynamically
if tradeExecuted and strategy.position_size > 0  // Long trade
    longTakeProfit := math.max(longTakeProfit, close + (atrMultiplier * ta.atr(14)))
    strategy.exit("Long TP/SL", "Long", stop=stopLossPrice, limit=longTakeProfit)

else if tradeExecuted and strategy.position_size < 0  // Short trade
    shortTakeProfit := math.min(shortTakeProfit, close - (atrMultiplier * ta.atr(14)))
    strategy.exit("Short TP/SL", "Short", stop=stopLossPrice, limit=shortTakeProfit)

// Reset trade state when position is closed
if strategy.position_size == 0
    tradeExecuted := false
    entryPrice := na
    longTakeProfit := na
    shortTakeProfit := na

Relationnée

Plus de