Système de trading intelligent de suivi des tendances et de prise de bénéfices dynamique combinant une double moyenne mobile et le MACD

MA MACD SMA EMA TP SL PIPS
Date de création: 2024-12-13 11:23:00 Dernière modification: 2024-12-13 11:23:00
Copier: 0 Nombre de clics: 434
1
Suivre
1617
Abonnés

Système de trading intelligent de suivi des tendances et de prise de bénéfices dynamique combinant une double moyenne mobile et le MACD

Aperçu

La stratégie est un système de suivi de la tendance combinant une moyenne mobile double et un indicateur MACD. Elle utilise des moyennes mobiles à 50 et 200 pour déterminer la direction de la tendance, tout en utilisant l’indicateur MACD pour capturer des moments d’entrée spécifiques. La stratégie utilise un mécanisme de stop-loss dynamique et améliore la qualité des transactions grâce à de multiples conditions de filtrage.

Principe de stratégie

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

  1. Détermination de la tendance: utilisez la relation de position de la moyenne 50 et de la moyenne 200 pour déterminer la tendance globale. La moyenne rapide est jugée comme une tendance à la hausse lorsque la moyenne rapide est au-dessus de la moyenne lente, et vice versa.
  2. Signaux d’entrée: après avoir confirmé la direction de la tendance, utilisez le croisement de l’indicateur MACD pour déclencher un signal d’entrée spécifique. Dans une tendance haussière, l’entrée en ligne du MACD sur la ligne de signal est plus longue; dans une tendance baissière, l’entrée en ligne du MACD sur la ligne de signal est vide.
  3. Filtrage des transactions: des mécanismes de filtrage multiples tels que l’intervalle de négociation minimum, l’intensité de la tendance et la dépréciation du MACD ont été introduits pour éviter les transactions excessives dans un environnement de marché très volatil.
  4. Contrôle du risque: utilisation d’un arrêt de perte à nombre de points fixe et d’un arrêt réglable, en combinaison avec une moyenne mobile et un signal inversé du MACD comme condition de sortie dynamique.

Avantages stratégiques

  1. Le suivi de la tendance est associé à la dynamique: la combinaison de la moyenne mobile et de l’indicateur MACD permet de saisir les grandes tendances et de déterminer avec précision le moment d’entrée.
  2. Une bonne gestion des risques: la mise en place de multiples mécanismes de stop-loss, y compris des stop-loss fixes et des stop-loss dynamiques déclenchés par des indicateurs techniques.
  3. Réglages de paramètres flexibles: les paramètres clés tels que le nombre de points d’arrêt de perte, le cycle moyen, etc. peuvent être ajustés de manière flexible en fonction des conditions du marché.
  4. Un mécanisme de filtrage intelligent: réduire les faux signaux et améliorer la qualité des transactions grâce à plusieurs conditions de filtrage.
  5. Statistiques de performances complètes: fonctionnalités intégrées de statistiques de transactions détaillées, y compris le calcul en temps réel des indicateurs clés tels que le taux de victoire, le gain moyen et les pertes.

Risque stratégique

  1. Risque de choc des marchés: les faux signaux peuvent être fréquents dans les marchés de choc horizontal, il est recommandé d’ajouter des indicateurs de confirmation de tendance.
  2. Risque de glissement: les transactions à cycle court sont sujettes à des glissements et il est recommandé d’assouplir les paramètres de stop-loss.
  3. Sensitivité des paramètres: les performances des stratégies sont sensibles aux paramètres et doivent être suffisamment optimisées par les paramètres.
  4. Dépendance des conditions du marché: les stratégies sont plus efficaces dans les marchés à forte tendance, mais peuvent être moins efficaces dans d’autres environnements.

Orientation de l’optimisation de la stratégie

  1. Optimisation des stop-loss dynamiques: les stop-loss peuvent être ajustés dynamiquement en fonction des indicateurs ATR pour mieux s’adapter aux fluctuations du marché.
  2. Optimisation du timing de l’entrée: des indicateurs auxiliaires tels que le RSI peuvent être ajoutés pour confirmer le timing de l’entrée et améliorer la précision des transactions.
  3. Optimisation de la gestion des positions: introduction d’un système de gestion des positions dynamique basé sur la volatilité, permettant une meilleure maîtrise des risques.
  4. Identification de l’environnement de marché: ajout d’un module de reconnaissance de l’environnement de marché qui utilise une combinaison de paramètres différente dans différentes conditions de marché.

Résumer

Il s’agit d’un système de suivi des tendances conçu de manière rationnelle et logique. En combinant des indicateurs techniques classiques et des méthodes modernes de gestion des risques, la stratégie met l’accent sur le contrôle des risques tout en saisissant les tendances.

Code source de la stratégie
/*backtest
start: 2024-11-12 00:00:00
end: 2024-12-11 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © WolfofAlgo

//@version=5
strategy("Trend Following Scalping Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=200)

// Input Parameters
stopLossPips = input.float(5.0, "Stop Loss in Pips", minval=1.0)
takeProfitPips = input.float(10.0, "Take Profit in Pips", minval=1.0)
useFixedTakeProfit = input.bool(true, "Use Fixed Take Profit")

// Moving Average Parameters
fastMA = input.int(50, "Fast MA Period")
slowMA = input.int(200, "Slow MA Period")

// MACD Parameters
macdFastLength = input.int(12, "MACD Fast Length")
macdSlowLength = input.int(26, "MACD Slow Length")
macdSignalLength = input.int(9, "MACD Signal Length")

// Trade Filter Parameters (Adjusted to be less strict)
minBarsBetweenTrades = input.int(5, "Minimum Bars Between Trades", minval=1)
trendStrengthPeriod = input.int(10, "Trend Strength Period")
minTrendStrength = input.float(0.4, "Minimum Trend Strength", minval=0.1, maxval=1.0)
macdThreshold = input.float(0.00005, "MACD Threshold", minval=0.0)

// Variables for trade management
var int barsLastTrade = 0
barsLastTrade := nz(barsLastTrade[1]) + 1

// Calculate Moving Averages
ma50 = ta.sma(close, fastMA)
ma200 = ta.sma(close, slowMA)

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalLength)

// Calculate trend strength (simplified)
trendDirection = ta.ema(close, trendStrengthPeriod) > ta.ema(close, trendStrengthPeriod * 2)
isUptrend = close > ma50 and ma50 > ma200
isDowntrend = close < ma50 and ma50 < ma200

// Calculate pip value
pointsPerPip = syminfo.mintick * 10

// Entry Conditions with Less Strict Filters
macdCrossUp = ta.crossover(macdLine, signalLine) and math.abs(macdLine - signalLine) > macdThreshold
macdCrossDown = ta.crossunder(macdLine, signalLine) and math.abs(macdLine - signalLine) > macdThreshold

// Long and Short Conditions
longCondition = close > ma50 and macdCrossUp and barsLastTrade >= minBarsBetweenTrades and isUptrend
shortCondition = close < ma50 and macdCrossDown and barsLastTrade >= minBarsBetweenTrades and isDowntrend

// Exit Conditions (made more lenient)
exitLongCondition = macdCrossDown or close < ma50
exitShortCondition = macdCrossUp or close > ma50

// Reset bars counter on new trade
if (longCondition or shortCondition)
    barsLastTrade := 0

// Calculate stop loss and take profit levels
longStopPrice = strategy.position_avg_price - (stopLossPips * pointsPerPip)
longTakeProfitPrice = strategy.position_avg_price + (takeProfitPips * pointsPerPip)
shortStopPrice = strategy.position_avg_price + (stopLossPips * pointsPerPip)
shortTakeProfitPrice = strategy.position_avg_price - (takeProfitPips * pointsPerPip)

// Plot Moving Averages
plot(ma50, "50 MA", color=color.blue)
plot(ma200, "200 MA", color=color.red)

// Plot Entry Signals
plotshape(longCondition, "Long Signal", shape.triangleup, location.belowbar, color.green, size=size.small)
plotshape(shortCondition, "Short Signal", shape.triangledown, location.abovebar, color.red, size=size.small)

// Strategy Entry Rules
if (longCondition and strategy.position_size == 0)
    strategy.entry("Long", strategy.long)

if (shortCondition and strategy.position_size == 0)
    strategy.entry("Short", strategy.short)

// Strategy Exit Rules
if (strategy.position_size > 0 and exitLongCondition)
    strategy.close("Long")

if (strategy.position_size < 0 and exitShortCondition)
    strategy.close("Short")

// Stop Loss and Take Profit Management
if (strategy.position_size > 0)
    strategy.exit("Long TP/SL", "Long", stop=longStopPrice, limit=useFixedTakeProfit ? longTakeProfitPrice : na)

if (strategy.position_size < 0)
    strategy.exit("Short TP/SL", "Short", stop=shortStopPrice, limit=useFixedTakeProfit ? shortTakeProfitPrice : na)

// Performance Metrics
var float totalTrades = 0
var float winningTrades = 0
var float totalProfitPips = 0
var float totalLossPips = 0

if (strategy.closedtrades > 0)
    totalTrades := strategy.closedtrades
    winningTrades := strategy.wintrades
    totalProfitPips := strategy.grossprofit / pointsPerPip
    totalLossPips := math.abs(strategy.grossloss) / pointsPerPip

// Display Stats
var label statsLabel = na
label.delete(statsLabel[1])

// Create performance stats text
var string stats = ""
if (strategy.closedtrades > 0)
    winRate = (winningTrades / math.max(totalTrades, 1)) * 100
    avgWin = totalProfitPips / math.max(winningTrades, 1)
    avgLoss = totalLossPips / math.max(totalTrades - winningTrades, 1)
    plRatio = avgWin / math.max(avgLoss, 1)
    
    stats := "Win Rate: " + str.tostring(winRate, "#.##") + "%\n" +
             "Avg Win: " + str.tostring(avgWin, "#.##") + " pips\n" +
             "Avg Loss: " + str.tostring(avgLoss, "#.##") + " pips\n" +
             "P/L Ratio: " + str.tostring(plRatio, "#.##") + "\n" +
             "Total Trades: " + str.tostring(totalTrades, "#")

statsLabel := label.new(x=bar_index, y=high, text=stats, style=label.style_label_down, color=color.new(color.blue, 80))