Stratégie de trading adaptative dynamique à indicateurs multitechniques (MTDAT)

MACD RSI BB ATR SMA SD
Date de création: 2024-11-29 14:54:57 Dernière modification: 2024-11-29 14:54:57
Copier: 0 Nombre de clics: 506
1
Suivre
1617
Abonnés

Stratégie de trading adaptative dynamique à indicateurs multitechniques (MTDAT)

Aperçu

La stratégie est un système de négociation intégré basé sur plusieurs indicateurs techniques, qui permet de capturer les tendances du marché et les opportunités de retournement en combinant plusieurs indicateurs techniques tels que le MACD, le RSI, les bandes de Brent et l’ATR. La stratégie utilise un schéma de stop-loss et de prise de profit dynamique, capable d’ajuster les paramètres de négociation en fonction de la volatilité du marché et de contrôler efficacement les risques tout en garantissant les gains. Les résultats de la revue montrent que la stratégie a réalisé un rendement de 676,27% au cours des trois derniers mois de test, montrant une bonne adaptabilité au marché.

Principe de stratégie

La stratégie utilise un système de vérification à plusieurs niveaux de paramètres techniques, comprenant:

  1. Le MACD ((12,26,9) est utilisé pour capturer les signaux de conversion de momentum, générant un signal d’achat lorsque le MACD traverse la ligne et un signal de vente lorsque la ligne est traversée.
  2. Le RSI ((14) est un filtre secondaire, avec un niveau inférieur à 35 considéré comme une zone de survente et un niveau supérieur à 65 considéré comme une zone de survente
  3. Les bandes de Brin ((20,2) sont utilisées pour identifier les bandes de fluctuation des prix, en considérant l’achat lorsque le prix touche la voie basse et la vente lorsqu’il touche la voie haute.
  4. L’ATR est utilisé pour définir dynamiquement les niveaux de stop-loss et de profit, avec un stop-loss de 3 fois l’ATR et un profit de 5 fois l’ATR.

La logique de négociation combine les deux stratégies de suivi de tendance et de négociation inversée pour améliorer l’exactitude des transactions grâce à la vérification multiple. Le système ajuste automatiquement les niveaux de stop loss et de profit en fonction de la volatilité du marché en temps réel, optimisant ainsi la gestion dynamique des risques.

Avantages stratégiques

  1. Un système de vérification de signaux multidimensionnels améliore la fiabilité des transactions
  2. Les régimes de stop loss et de profit dynamiques s’adaptent à différents environnements de marché
  3. L’intégration de deux types de trading, le trend et le revers, pour augmenter les opportunités de trading
  4. Les systèmes automatisés de gestion des risques réduisent les erreurs de jugement humaines
  5. Un taux de victoire de 53,99% et un facteur de profit de 1,44 indiquent une stratégie stable
  6. Stratégie pour faciliter les opérations des traders avec des rappels de transactions en temps réel

Risque stratégique

  1. La multiplication des indicateurs peut entraîner un retard de signal et une perte d’opportunité dans un marché rapide.
  2. Un taux de retrait maximal de 56,33% nécessite une plus grande tolérance au risque
  3. La fréquence des transactions peut entraîner des coûts de transaction plus élevés
  4. Les stratégies peuvent être plus risquées en cas de forte volatilité du marché

Suggestions de contrôle des risques :

  • Rigoureusement appliquer le plan de gestion des fonds
  • Vérifiez et ajustez régulièrement les paramètres
  • Suspension des transactions pendant la publication des données importantes
  • Limite de perte maximale par jour

Orientation de l’optimisation de la stratégie

  1. Optimisation des paramètres:

    • Paramètres de l’indicateur à prendre en compte pour les cycles d’adaptation
    • Optimiser le réglage du coefficient ATR pour améliorer le rapport risque/rendement
  2. Amélioration du système de signalisation:

    • Ajout d’une vérification de l’indicateur de transaction
    • L’introduction de l’indicateur de l’humeur du marché
  3. Optimisation de la gestion des risques :

    • Réaliser une gestion dynamique des positions
    • Ajouter un filtre de temps
  4. Améliorations techniques:

    • Ajout d’un filtre de volatilité du marché
    • Optimiser le jugement de la saison

Résumer

La stratégie a obtenu de meilleurs résultats commerciaux grâce à une combinaison de multiples indicateurs techniques et à un système de gestion des risques dynamique. Bien qu’il existe un certain risque de rétractation, la stratégie affiche une bonne adaptabilité et stabilité au marché grâce à un contrôle strict des risques et à une optimisation continue. Il est recommandé aux traders de suivre strictement le système de gestion des risques lors de l’utilisation de la stratégie et d’ajuster les paramètres en fonction des changements du marché.

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

//@version=5
strategy("XAUUSD STRATEGY 10MIN", overlay=true)

// Spread Adjustment (38-point spread)
spread = 38 * syminfo.mintick       

// MACD Calculation
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
macdBuy = ta.crossover(macdLine, signalLine)
macdSell = ta.crossunder(macdLine, signalLine)

// RSI Calculation
rsi = ta.rsi(close, 14)
rsiOverbought = rsi > 65
rsiOversold = rsi < 35

// Bollinger Bands Calculation
basis = ta.sma(close, 20)
dev = 2 * ta.stdev(close, 20)
upperBand = basis + dev
lowerBand = basis - dev

// ATR Calculation for Volatility-Based Stop Loss and Take Profit
atr = ta.atr(14)
stopLoss = 3 * atr
takeProfit = 5 * atr

// Variables to track entry price and line
var line entryLine = na
var int tradeNumber = 0
var string tradeType = ""
var string tradeSignalComment = ""

// Buy Condition
buyCondition = (macdBuy or rsiOversold or close < lowerBand)

// Sell Condition
sellCondition = (macdSell or rsiOverbought or close > upperBand)

// Strategy Entry and Alerts
if (buyCondition and strategy.opentrades == 0)  // Open a new buy trade
    // Remove the previous entry line if it exists
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Adjust the entry price by adding the spread (ask price)
    buyPrice = close + spread

    // Enter a new buy trade at the ask price, and close it with the bid price
    strategy.entry("Buy", strategy.long, stop=buyPrice - stopLoss, limit=buyPrice + takeProfit, comment="Enter buy $" + str.tostring(buyPrice))
    tradeNumber := tradeNumber + 1  // Increment trade number
    tradeType := "Entry Long"
    tradeSignalComment := "Enter buy trade"
    
    // Plot new dotted entry line for the current trade
    // entryLine := line.new(bar_index, buyPrice, bar_index + 50, buyPrice, width=1, color=color.green, style=line.style_dotted)
    
    // Send alert for the buy entry
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - " + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(buyPrice), alert.freq_once_per_bar_close)

if (sellCondition and strategy.opentrades == 0)  // Open a new sell trade
    // Remove the previous entry line if it exists
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Adjust the entry price by subtracting the spread (bid price)
    sellPrice = close - spread

    // Enter a new sell trade at the bid price, and close it with the ask price
    strategy.entry("Sell", strategy.short, stop=sellPrice + stopLoss, limit=sellPrice - takeProfit, comment="Enter sell $" + str.tostring(sellPrice))
    tradeNumber := tradeNumber + 1  // Increment trade number
    tradeType := "Entry Short"
    tradeSignalComment := "Enter sell trade"
    
    // Plot new dotted entry line for the current trade
    // entryLine := line.new(bar_index, sellPrice, bar_index + 50, sellPrice, width=1, color=color.red, style=line.style_dotted)
    
    // Send alert for the sell entry
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - " + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(sellPrice), alert.freq_once_per_bar_close)

// Exit conditions and alerts
if (strategy.position_size > 0 and sellCondition)  // Close buy when sell conditions met
    // Adjust the exit price by subtracting the spread (bid price)
    exitPrice = close - spread
    strategy.close("Buy", comment="Exit buy $" + str.tostring(exitPrice))
    
    // Remove the entry line when the trade is closed
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Send alert for the buy exit
    tradeType := "Exit Long"
    tradeSignalComment := "Exit buy trade"
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - "  + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(exitPrice), alert.freq_once_per_bar_close)

if (strategy.position_size < 0 and buyCondition)  // Close sell when buy conditions met
    // Adjust the exit price by adding the spread (ask price)
    exitPrice = close + spread
    strategy.close("Sell", comment="Exit sell $" + str.tostring(exitPrice))
    
    // Remove the entry line when the trade is closed
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Send alert for the sell exit
    tradeType := "Exit Short"
    tradeSignalComment := "Exit sell trade"
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - " + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(exitPrice), alert.freq_once_per_bar_close)

// Plot Indicators
plot(upperBand, title="Upper Bollinger Band", color=color.blue)
plot(lowerBand, title="Lower Bollinger Band", color=color.blue)