Stratégie de suivi de tendance EMA/SMA et de swing trading combinée à un filtrage du volume et à un système de stop loss et de take profit en pourcentage

EMA SMA
Date de création: 2024-12-11 15:12:35 Dernière modification: 2024-12-11 15:12:35
Copier: 1 Nombre de clics: 444
1
Suivre
1617
Abonnés

Stratégie de suivi de tendance EMA/SMA et de swing trading combinée à un filtrage du volume et à un système de stop loss et de take profit en pourcentage

Aperçu

La stratégie est un système de trading intégré qui combine le suivi des tendances avec les méthodes de trading de la bande, pour construire un système de trading complet grâce à l’intersection homogène de l’EMA et du SMA, à l’identification des hauts et des bas de la bande, au filtrage du volume de transaction et au mécanisme de stop-loss et de suivi des pourcentages. La stratégie est conçue en mettant l’accent sur la confirmation de signaux multidimensionnels, pour améliorer l’exactitude et la fiabilité des transactions grâce à l’action synchrone des indicateurs techniques.

Principe de stratégie

La stratégie utilise un mécanisme de filtrage du signal à plusieurs niveaux, en utilisant d’abord les courants de base de la formation croisée EMA10) et SMA21) pour déterminer le moment d’entrée en jeu, puis en brisant les hauts et les bas de six lignes K à gauche et à droite, tout en exigeant un volume de transactions supérieur à la moyenne mobile à 200 cycles, afin de garantir une liquidité suffisante. Le système utilise un pourcentage de stop loss de 2% et un stop loss de suivi de 1% pour gérer le risque.

Avantages stratégiques

  1. Mécanisme de confirmation de signaux multiples pour réduire les faux signaux: augmentation de la triple vérification et de la fiabilité des transactions grâce à la tendance de la ligne moyenne, à la rupture des prix et au volume des transactions
  2. Un mécanisme de stop-loss flexible: un stop-loss est défini en pourcentage et est associé à un stop-loss de suivi pour bloquer les bénéfices
  3. Système de visualisation perfectionné: affichage graphique des points de rupture et de rupture pour faciliter la surveillance des transactions
  4. Haute personnalisation: les paramètres clés peuvent être ajustés pour s’adapter à différents environnements de marché
  5. Gestion systématique des risques: contrôle des risques par des arrêts de perte et des arrêts de position prédéfinis

Risque stratégique

  1. Le marché horizontal pourrait provoquer de fréquentes fausses ruptures
  2. Les filtres de quantité de livraison ont peut-être manqué certains signaux valides
  3. Les points fixes peuvent être retirés prématurément dans un match fort.
  4. Le système linéaire est en retard dans la transition rapide vers le marché
  5. Il faut prendre en compte l’impact des coûts de transaction sur le rendement de la stratégie

Orientation de l’optimisation de la stratégie

  1. Introduction d’un mécanisme d’adaptation au taux de volatilité et d’ajustement dynamique des paramètres de stop-loss
  2. Augmenter le filtrage de la force de la tendance et éviter de négocier dans une tendance faible
  3. Optimisation des algorithmes de filtrage du volume de transaction en tenant compte des variations relatives du volume de transaction
  4. Ajout d’un filtrage temporel pour éviter les échanges pendant les périodes défavorables
  5. Considérer l’ajout d’une classification des environnements de marché, avec différents paramètres pour différents marchés

Résumer

La stratégie a construit un système de négociation complet adapté au suivi des tendances à moyen et long terme grâce à un système homogène, à des ruptures de prix et à la vérification du volume de transactions. L’avantage du système réside dans la reconnaissance de plusieurs signaux et un mécanisme de gestion du risque amélioré.

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

//@version=5
// Strategy combining EMA/SMA Crossover, Swing High/Low, Volume Filtering, and Percentage TP & Trailing Stop
strategy("Swing High/Low Strategy with Volume, EMA/SMA Crossovers, Percentage TP and Trailing Stop", overlay=true)

// --- Inputs ---
source = close
TITLE = input(false, title='Enable Alerts & Background Color for EMA/SMA Crossovers')
turnonAlerts = input(true, title='Turn on Alerts?')
colorbars = input(true, title="Color Bars?")
turnonEMASMA = input(true, title='Turn on EMA1 & SMA2?')
backgroundcolor = input(false, title='Enable Background Color?')

// EMA/SMA Lengths
emaLength = input.int(10, minval=1, title='EMA Length')
smaLength = input.int(21, minval=1, title='SMA Length')
ema1 = ta.ema(source, emaLength)
sma2 = ta.sma(source, smaLength)

// Swing High/Low Lengths
leftBars = input.int(6, title="Left Bars for Swing High/Low", minval=1)
rightBars = input.int(6, title="Right Bars for Swing High/Low", minval=1)

// Volume MA Length
volMaLength = input.int(200, title="Volume Moving Average Length")

// Percentage Take Profit with hundredth place adjustment
takeProfitPercent = input.float(2.00, title="Take Profit Percentage (%)", minval=0.01, step=0.01) / 100

// Trailing Stop Loss Option
useTrailingStop = input.bool(true, title="Enable Trailing Stop Loss?")
trailingStopPercent = input.float(1.00, title="Trailing Stop Loss Percentage (%)", minval=0.01, step=0.01) / 100

// --- Swing High/Low Logic ---
pivotHigh(_leftBars, _rightBars) =>
    ta.pivothigh(_leftBars, _rightBars)

pivotLow(_leftBars, _rightBars) =>
    ta.pivotlow(_leftBars, _rightBars)

ph = fixnan(pivotHigh(leftBars, rightBars))
pl = fixnan(pivotLow(leftBars, rightBars))

// --- Volume Condition ---
volMa = ta.sma(volume, volMaLength)

// Declare exit conditions as 'var' so they are initialized
var bool longExitCondition = na
var bool shortExitCondition = na

// --- Long Entry Condition: Close above Swing High & Volume >= 200 MA ---
longCondition = (close > ph and volume >= volMa)
if (longCondition)
    strategy.entry("Long", strategy.long)

// --- Short Entry Condition: Close below Swing Low & Volume >= 200 MA ---
shortCondition = (close < pl and volume >= volMa)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// --- Take Profit and Trailing Stop Logic ---

// For long position: Set take profit at the entry price + takeProfitPercent
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercent)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercent)

// --- Long Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Long
    strategy.exit("Long Exit", "Long", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=longTakeProfitLevel)
else
    // Exit Long on Take Profit only
    strategy.exit("Long Exit", "Long", limit=longTakeProfitLevel)

// --- Short Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Short
    strategy.exit("Short Exit", "Short", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=shortTakeProfitLevel)
else
    // Exit Short on Take Profit only
    strategy.exit("Short Exit", "Short", limit=shortTakeProfitLevel)

// --- Plot Swing High/Low ---

plot(ph, style=plot.style_circles, linewidth=1, color=color.blue, offset=-rightBars, title="Swing High")
plot(ph, style=plot.style_line, linewidth=1, color=color.blue, offset=0, title="Swing High")
plot(pl, style=plot.style_circles, linewidth=1, color=color.red, offset=-rightBars, title="Swing High")
plot(pl, style=plot.style_line, linewidth=1, color=color.red, offset=0, title="Swing High")
// --- Plot EMA/SMA ---
plot(turnonEMASMA ? ema1 : na, color=color.green, title="EMA")
plot(turnonEMASMA ? sma2 : na, color=color.orange, title="SMA")

// --- Alerts ---
alertcondition(longCondition, title="Long Entry", message="Price closed above Swing High with Volume >= 200 MA")
alertcondition(shortCondition, title="Short Entry", message="Price closed below Swing Low with Volume >= 200 MA")

// --- Bar Colors for Visualization ---
barcolor(longCondition ? color.green : na, title="Long Entry Color")
barcolor(shortCondition ? color.red : na, title="Short Entry Color")
bgcolor(backgroundcolor ? (ema1 > sma2 ? color.new(color.green, 50) : color.new(color.red, 50)) : na)