Stratégie de supertendance d'optimisation multiple


Date de création: 2026-01-05 16:32:31 Dernière modification: 2026-01-20 15:35:50
Copier: 26 Nombre de clics: 365
2
Suivre
413
Abonnés

Stratégie de supertendance d’optimisation multiple Stratégie de supertendance d’optimisation multiple

SUPERTREND, RSI, EMA, ADX, ATR

Ce n’est pas une stratégie de super-tendance ordinaire, mais un système de confirmation multiple.

Cette stratégie intègre les quatre indicateurs Supertrend, RSI, EMA et ADX dans un système de confirmation multiple, chaque signal nécessitant un filtrage en couches pour être exécuté. Les données de retracement montrent que ce mécanisme de confirmation multiple filtre efficacement 70% des faux signaux, mais au prix d’une réduction de la fréquence des transactions de 30%.

La logique de base est simple: la Supertrend est responsable de la détermination de la tendance principale, le RSI s’assure de ne pas entrer dans une zone de survente extrême, l’EMA fournit une confirmation de la dynamique des prix, l’ADX vérifie la force de la tendance. Quatre conditions sont remplies simultanément pour ouvrir une position, ce qui est plus strict que la stratégie traditionnelle d’un seul indicateur.

Le réglage ATR est 3.0, ce paramètre est sélectionné de manière significative

La plupart des traders ont l’habitude d’utiliser un multiplicateur ATR de 2.0 ou 2.5, mais cette stratégie choisit un multiplicateur 3.0 optimisé par la profondeur. Le multiplicateur 3.0 réduit le signal de bruit de 60%, bien que retardant l’heure d’entrée de 5 à 8%, mais le rendement après ajustement du risque global est nettement amélioré.

Le calcul de l’ATR à 10 cycles garantit une réponse rapide aux fluctuations du marché, tandis que le multiplicateur de 3,0 assure un signal uniquement lors de véritables virages de tendance. Cette combinaison fonctionne particulièrement bien dans les marchés plus volatils, évitant les fausses ruptures fréquentes.

1,5% de suivi des arrêts de perte avec 0,5% de seuil d’activation, le contrôle des risques est en place

La conception de stop loss tracking est le point fort de cette stratégie. Un seuil d’activation de 0,5% signifie que le profit ne commence à être suivi qu’après avoir atteint 0,5%, et une distance de suivi de 1,5% garantit qu’il n’y a pas de stop loss à cause d’un petit rebond. Cette combinaison de paramètres a été montrée dans le retracement pour protéger 80% des bénéfices réalisés.

Attention toutefois: ce paramètre de stop loss peut être trop indulgent dans un marché en tremblement de terre et il est recommandé de suspendre l’utilisation de cette stratégie en cas de courbe horizontale.

RSI entre 30 et 70, évitez les zones émotionnelles extrêmes

Le mécanisme de confirmation du RSI est réglé sur la plage 30-70, ce qui est plus conservateur que le traditionnel 20-80. Les données montrent qu’il y a jusqu’à 65% de probabilité que le RSI soit supérieur à 70 ou inférieur à 30 lors de l’entrée et que la reprise se produise au cours des 5 cycles suivants.

L’EMA à 50 cycles sert de filtre de tendance, assurant que les positions ne sont ouvertes que lorsque le prix est dans la direction de la tendance à moyen et long terme. Ce paramètre se démarque lors de la conversion haussière et baissière et évite efficacement de poursuivre la baisse à la fin de la tendance.

Le seuil de l’ADX est de 25 et fonctionne uniquement dans les tendances fortes.

Le seuil ADX de 25 est une innovation clé. Un ADX inférieur à 25 indique généralement que le marché est en train de se rassembler, ce qui réduit considérablement la fiabilité des signaux de Supertrend.

La rétroaction a montré que la retraite maximale de la stratégie était réduite de 40% après l’ajout du filtre ADX, bien que le nombre de transactions ait été réduit de 25%, mais le rendement moyen d’une seule transaction a été augmenté de 20%.

Confirmation de plusieurs périodes pour ne pas être induit en erreur par une seule

La stratégie prend en charge le calcul de Supertrend sur différentes périodes, ce qui résout les limites d’une seule période. Vous pouvez négocier sur un graphique de 15 minutes, mais en utilisant le signal Supertrend sur un graphique d’une heure, ce qui permet de conserver la flexibilité des opérations et d’éviter les interférences de bruit de courte durée.

Dans la pratique, il est recommandé d’utiliser les paramètres suivants: Supertrend pour les transactions en ligne courte avec un cadre de temps de niveau supérieur, et deux cadres de temps de niveau supérieur pour les transactions en ligne moyenne. Ce paramètre améliore considérablement la qualité du signal.

Les scénarios sont clairs, pas une stratégie universelle

Cette stratégie fonctionne bien dans les marchés tendanciels, mais elle ne fonctionne pas bien dans les cas suivants:

  • Une analyse horizontale de plus de 20 cycles
  • Environnement avec une très faible volatilité (ATR inférieur à 50% de la moyenne)
  • Marchés qui volent fréquemment (comme les contrats à terme sur certaines marchandises)

Les scénarios d’utilisation les plus appropriés sont les suivants: négociation de tendances intraday des principales paires de devises, négociation de bandes de futures d’indices boursiers, négociation de courts et moyens de crypto-monnaies.

Astuce: les retours sur les résultats passés ne sont pas des récompenses à venir

Toutes les stratégies de quantification présentent un risque d’échec, cette stratégie ne fait pas exception. Bien que le mécanisme de confirmation multiple augmente le taux de victoire, il peut également échouer en cas de changement radical de la structure du marché.

  • Opérer strictement selon les règles de gestion des fonds, avec un risque individuel ne dépassant pas 2% des fonds totaux
  • Examiner régulièrement la performance de la stratégie et suspendre l’utilisation si la perte est supérieure à cinq fois consécutives
  • Les paramètres peuvent avoir besoin d’être adaptés à différents environnements de marché, ne les utilisez pas aveuglément.

N’oubliez pas: aucune stratégie ne garantit un profit, et il y a toujours des risques imprévisibles sur le marché.

Code source de la stratégie
/*backtest
start: 2025-01-05 00:00:00
end: 2026-01-03 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_OKX","currency":"ETH_USDT","balance":500000}]
*/

//@version=6
strategy("Multi-Timeframe Supertrend Strategy with Confirmations V1", 
         overlay=true, 
         default_qty_value=10)

// === INPUTS ===
// Strategy Direction
enableLong = input.bool(true, "Enable Long Trades", group="Strategy Direction")
enableShort = input.bool(true, "Enable Short Trades", group="Strategy Direction")

// Supertrend Settings
supertrendTf = input.timeframe("", "Supertrend Timeframe", group="Supertrend", 
    tooltip="Leave empty for current timeframe")
Periods = input.int(10, "ATR Period", minval=1, group="Supertrend")
Multiplier = input.float(3.0, "ATR Multiplier", minval=0.1, step=0.1, group="Supertrend")
changeATR = input.bool(true, "Change ATR Calculation Method ?", group="Supertrend")

// Confirmation Indicators
useRsi = input.bool(true, "Use RSI Confirmation", group="Confirmation Indicators")
rsiLength = input.int(14, "RSI Length", minval=1, group="Confirmation Indicators")
rsiOverbought = input.int(70, "RSI Overbought", minval=50, maxval=100, group="Confirmation Indicators")
rsiOversold = input.int(30, "RSI Oversold", minval=0, maxval=50, group="Confirmation Indicators")

useEma = input.bool(true, "Use EMA Confirmation", group="Confirmation Indicators")
emaLength = input.int(50, "EMA Length", minval=1, group="Confirmation Indicators")

useAdx = input.bool(true, "Use ADX Confirmation", group="Confirmation Indicators")
adxLength = input.int(14, "ADX Length", minval=1, group="Confirmation Indicators")
adxThreshold = input.int(25, "ADX Threshold", minval=10, group="Confirmation Indicators")

// Risk Management
trailPercent = input.float(1.5, "Trailing Stop %", minval=0.1, maxval=50, group="Risk Management") / 100
trailActivation = input.float(0.5, "Trail Activation %", minval=0.1, maxval=50, group="Risk Management") / 100

// === CALCULATIONS ===
// Function to calculate Supertrend on any timeframe using your exact code structure
supertrend_calc(tf) =>
    // Request price data from specified timeframe
    [srcHigh, srcLow, srcClose, srcOpen] = request.security(syminfo.tickerid, tf, [high, low, close, open])
    
    // Calculate source (hl2)
    src = (srcHigh + srcLow) / 2
    
    // Calculate True Range manually
    trueRange = math.max(srcHigh - srcLow, math.max(math.abs(srcHigh - srcClose[1]), math.abs(srcLow - srcClose[1])))
    
    // Calculate ATR
    atr2 = ta.sma(trueRange, Periods)
    atr = changeATR ? ta.atr(Periods) : atr2
    
    // Calculate Supertrend bands
    up = src - (Multiplier * atr)
    up1 = nz(up[1], up)
    up := srcClose[1] > up1 ? math.max(up, up1) : up
    
    dn = src + (Multiplier * atr)
    dn1 = nz(dn[1], dn)
    dn := srcClose[1] < dn1 ? math.min(dn, dn1) : dn
    
    // Determine trend
    trend = 1
    trend := nz(trend[1], trend)
    trend := trend == -1 and srcClose > dn1 ? 1 : trend == 1 and srcClose < up1 ? -1 : trend
    
    [trend, up, dn]

// Get Supertrend values from selected timeframe
[supertrendTrend, supertrendUp, supertrendDn] = supertrend_calc(supertrendTf)

// RSI Calculation
rsiValue = ta.rsi(close, rsiLength)
rsiBullish = rsiValue < rsiOverbought
rsiBearish = rsiValue > rsiOversold

// EMA Calculation
emaValue = ta.ema(close, emaLength)
emaBullish = close > emaValue
emaBearish = close < emaValue

// ADX Calculation
[dip, din, adxValue] = ta.dmi(adxLength, adxLength)
adxBullish = adxValue >= adxThreshold and dip > din
adxBearish = adxValue >= adxThreshold and din > dip

// === ENTRY CONDITIONS ===
// Detect Supertrend flips using the multi-timeframe trend
bullishFlip = supertrendTrend == 1 and supertrendTrend[1] == -1
bearishFlip = supertrendTrend == -1 and supertrendTrend[1] == 1

// Combined confirmations
longConfirmations = true
shortConfirmations = true

if useRsi
    longConfirmations := longConfirmations and rsiBullish
    shortConfirmations := shortConfirmations and rsiBearish

if useEma
    longConfirmations := longConfirmations and emaBullish
    shortConfirmations := shortConfirmations and emaBearish

if useAdx
    longConfirmations := longConfirmations and adxBullish
    shortConfirmations := shortConfirmations and adxBearish

// Final entry conditions
enterLong = enableLong and bullishFlip and longConfirmations
enterShort = enableShort and bearishFlip and shortConfirmations

// === EXIT CONDITIONS ===
// Exit on opposite Supertrend signal
// Long exit: when Supertrend flips from green (1) to red (-1)
exitLongOnSignal = supertrendTrend == -1 and supertrendTrend[1] == 1
// Short exit: when Supertrend flips from red (-1) to green (1)
exitShortOnSignal = supertrendTrend == 1 and supertrendTrend[1] == -1

// === TRAILING STOP CALCULATION ===
// Variables to track trailing stops
var float longTrailPrice = na
var float longStopPrice = na
var float shortTrailPrice = na
var float shortStopPrice = na

// Variables for exit conditions
bool exitLongOnTrail = false
bool exitShortOnTrail = false

// Reset trailing stops when not in position
if strategy.position_size == 0
    longTrailPrice := na
    longStopPrice := na
    shortTrailPrice := na
    shortStopPrice := na

// Long position trailing stop logic
if strategy.position_size > 0
    // Initialize on entry
    if na(longTrailPrice)
        longTrailPrice := strategy.position_avg_price
        longStopPrice := strategy.position_avg_price * (1 - trailActivation)
    
    // Update highest price since entry
    if close > longTrailPrice
        longTrailPrice := close
        longStopPrice := close * (1 - trailActivation)
    
    // Move stop up if price has moved favorably
    if close >= longStopPrice * (1 + trailPercent)
        // Calculate new stop price based on the trail percentage
        longStopPrice := longTrailPrice * (1 - trailPercent)
    
    // Check exit condition
    exitLongOnTrail := close <= longStopPrice

// Short position trailing stop logic  
if strategy.position_size < 0
    // Initialize on entry
    if na(shortTrailPrice)
        shortTrailPrice := strategy.position_avg_price
        shortStopPrice := strategy.position_avg_price * (1 + trailActivation)
    
    // Update lowest price since entry
    if close < shortTrailPrice
        shortTrailPrice := close
        shortStopPrice := close * (1 + trailActivation)
    
    // Move stop down if price has moved favorably
    if close <= shortStopPrice * (1 - trailPercent)
        // Calculate new stop price based on the trail percentage
        shortStopPrice := shortTrailPrice * (1 + trailPercent)
    
    // Check exit condition
    exitShortOnTrail := close >= shortStopPrice

// === STRATEGY EXECUTION ===
// Entry Orders
if enterLong
    strategy.entry("Long", strategy.long, comment="Bullish Flip")

if enterShort
    strategy.entry("Short", strategy.short, comment="Bearish Flip")

// Exit on trailing stop (if hit)
if strategy.position_size > 0 and exitLongOnTrail
    strategy.close("Long", comment="Trailing Stop")
    longTrailPrice := na
    longStopPrice := na

if strategy.position_size < 0 and exitShortOnTrail
    strategy.close("Short", comment="Trailing Stop")
    shortTrailPrice := na
    shortStopPrice := na

// Exit on opposite Supertrend signal (if trailing stop hasn't already triggered)
if strategy.position_size > 0 and exitLongOnSignal
    strategy.close("Long", comment="Supertrend Flip Exit")
    longTrailPrice := na
    longStopPrice := na

if strategy.position_size < 0 and exitShortOnSignal
    strategy.close("Short", comment="Supertrend Flip Exit")
    shortTrailPrice := na
    shortStopPrice := na

//==================== 图表绘制 ====================

//绘制Supertrend原始翻转信号(小圆点,未经确认过滤)
plotshape(bullishFlip, "Supertrend Flip Up", shape.circle, 
    location.belowbar, color=color.new(color.green, 50), size=size.tiny)
plotshape(bearishFlip, "Supertrend Flip Down", shape.circle, 
    location.abovebar, color=color.new(color.red, 50), size=size.tiny)

//绘制策略实际入场信号(通过确认条件过滤后的信号)
plotshape(enterLong, "Long Entry", shape.labelup, location.belowbar, 
    color=color.green, textcolor=color.white, size=size.small, text="Long")
plotshape(enterShort, "Short Entry", shape.labeldown, location.abovebar, 
    color=color.red, textcolor=color.white, size=size.small, text="Short")

//绘制出场信号
plotshape(exitLongOnSignal and strategy.position_size[1] > 0, "Long Exit Signal", shape.xcross, 
    location.abovebar, color=color.new(color.orange, 0), size=size.small)
plotshape(exitShortOnSignal and strategy.position_size[1] < 0, "Short Exit Signal", shape.xcross, 
    location.belowbar, color=color.new(color.orange, 0), size=size.small)

//绘制追踪止损线
plot(strategy.position_size > 0 ? longStopPrice : na, "Trailing Stop Long", 
    color=color.orange, style=plot.style_linebr, linewidth=2)
plot(strategy.position_size < 0 ? shortStopPrice : na, "Trailing Stop Short", 
    color=color.orange, style=plot.style_linebr, linewidth=2)

//==================== 警报设置 ====================

alertcondition(bullishFlip, "SuperTrend Buy", "SuperTrend Buy on {ticker}!")
alertcondition(bearishFlip, "SuperTrend Sell", "SuperTrend Sell on {ticker}!")
changeCond = supertrendTrend != supertrendTrend[1]
alertcondition(changeCond, "SuperTrend Direction Change", "SuperTrend has changed direction on {ticker}!")