Stratégie de trading de tendance dynamique multi-indicateurs : SuperTrend, ADX et système d'analyse complet du delta de liquidité

PSAR supertrend ADX Liquidity Delta ATR 趋势交易 波段策略 风险管理 技术指标
Date de création: 2025-05-15 16:37:32 Dernière modification: 2025-05-15 16:37:32
Copier: 1 Nombre de clics: 476
2
Suivre
319
Abonnés

Stratégie de trading de tendance dynamique multi-indicateurs : SuperTrend, ADX et système d’analyse complet du delta de liquidité Stratégie de trading de tendance dynamique multi-indicateurs : SuperTrend, ADX et système d’analyse complet du delta de liquidité

Aperçu

La stratégie est un système de trading d’analyse technique intégré qui identifie les opportunités de trading de bandes à forte probabilité en intégrant plusieurs indicateurs. Le système est basé sur l’indicateur SuperTrend en tant que filtre de direction de la tendance, combiné avec l’indice ADX (indice de direction moyenne) pour confirmer la force de la tendance, et utilise l’analyse des déséquilibres de pression de vente et d’achat du delta de liquidité (Delta de liquidité) pour générer avec précision des signaux d’entrée et de sortie dans une variété d’environnements de marché.

Principe de stratégie

La stratégie forme des signaux de trading en travaillant en synergie avec les quatre indicateurs centraux suivants:

  1. Indicateur de SuperTrend: Le filtre principal de direction de la tendance utilise les paramètres d’optimisation (facteur: 3,0, cycle ATR: 10) pour équilibrer la réactivité et la fiabilité. Identifié comme tendance à la hausse lorsque le prix est au-dessus de la ligne de SuperTrend; identifié comme tendance à la baisse lorsque le prix est au-dessous de la ligne de SuperTrend.

  2. Indicateur ADX: Utilisé pour confirmer la force de la tendance actuelle, filtrer les courbes horizontales ou les environnements de marché chaotiques. La stratégie utilise des implémentations personnalisées pour calculer l’amplitude réelle, les mouvements positifs et négatifs, et finalement générer une valeur d’ADX. Lorsque la valeur d’ADX est supérieure au seuil de réglage (la valeur par défaut de 25), indiquant la présence d’une tendance forte, le système est plus enclin à générer des transactions de signaux.

  3. Indicateur de la mobilité du delta: analyse les déséquilibres de pression de vente et d’achat, calcule le volume de vente et d’achat et obtient la valeur finale du delta par une série de traitements de normalisation et de lissage. Un signal de plus est produit lorsque le delta est supérieur à la marge positive et un signal de moins lorsqu’il est inférieur à la marge négative, afin de vérifier la direction de la tendance et le potentiel de revirement.

  4. Indicateur PSAR(Optionnel): peut être utilisé comme confirmation supplémentaire d’un changement de tendance, et est désactivé par défaut pour réduire le filtrage du signal. Lorsqu’un prix est supérieur au point PSAR, il est considéré comme une tendance à la hausse; lorsqu’il est inférieur au point PSAR, il est considéré comme une tendance à la baisse.

La logique de négociation génère un signal de synthèse en combinant tous les indicateurs activés. Un signal final d’achat ou de vente est généré lorsque tous les indicateurs pointent dans la même direction. Par exemple, le système ne génère un signal d’achat que lorsque les conditions PSAR, les conditions SuperTrend, les conditions ADX et les conditions du delta de liquidité sont satisfaites.

Avantages stratégiques

La stratégie présente les avantages suivants:

  1. Système de vérification multidimensionnelleEn intégrant différents types d’indicateurs techniques, la confirmation des transactions sur plusieurs dimensions, allant de la tendance, de l’intensité et du volume des transactions, réduit considérablement le risque de faux signaux et améliore la précision des transactions.

  2. Très adaptable: La stratégie permet à l’utilisateur de choisir la direction de la transaction et d’activer / désactiver des indicateurs spécifiques, ce qui permet au système de s’adapter à diverses conditions de marché et à différentes variétés de transactions.

  3. Des contrôles rigoureux des risques: un mécanisme de stop-loss et de stop-loss à taux fixe intégré, garantissant que chaque transaction a des limites de risque et des objectifs de profit prédéfinis, protégeant ainsi efficacement la sécurité des fonds.

  4. Prendre en compte le coût réel des transactionsLe modèle de stratégie inclut des calculs de commissions (0,035%) et de points de glissement (2 points), ce qui rend les résultats de la rétroanalyse plus conformes à l’environnement de négociation réel.

  5. Signaux de négociation visualisés: fournit une flèche de signal d’achat/vente claire, de taille personnalisable et facile à identifier rapidement sur le graphique.

  6. Panneau de renseignements: affiche dynamiquement les paramètres d’indicateurs et de risques actuellement actifs et fournit des commentaires instantanés sur l’état de fonctionnement de la stratégie.

  7. Gestion conservatrice des positionsPar défaut, 5% d’intérêt est utilisé comme taille de position pour chaque transaction, afin d’éviter les pertes de fonds causées par une survente.

Risque stratégique

Bien que cette stratégie soit conçue de manière globale, les risques potentiels sont les suivants:

  1. Paramètre SensibilitéLa performance de la stratégie dépend fortement de la configuration des paramètres de l’indicateur, en particulier du facteur SuperTrend et des seuils ADX. Différentes conditions de marché peuvent nécessiter des optimisations de paramètres différentes, ce qui peut entraîner une survente ou une perte d’occasions importantes.

  2. Risque de retard: En raison de l’utilisation de plusieurs indicateurs de la classe des moyennes mobiles, le signal peut être retardé, ce qui entraîne une entrée ou une sortie insuffisante dans un marché à basse vitesse.

  3. Risque de corrélation: Il peut y avoir une corrélation intrinsèque entre plusieurs indicateurs techniques, ce qui signifie que des confirmations apparemment indépendantes peuvent provenir d’indicateurs basés sur des modèles mathématiques similaires, ce qui réduit la valeur réelle des confirmations multiples.

  4. Risques de sur-optimisationUne bonne performance au cours de la période de réévaluation 2021-2033 ne signifie pas nécessairement qu’elle sera tout aussi efficace sur les marchés futurs, en particulier si ces paramètres sont le résultat d’une sur-optimisation des données historiques.

La solution est simple:

  • Réévaluer et ajuster régulièrement les paramètres de l’indicateur pour s’assurer qu’ils restent adaptés à l’environnement actuel du marché
  • Envisager d’ajouter des indicateurs basés sur des principes différents, tels que des indicateurs d’humeur ou des indicateurs fondamentaux, et de réduire la corrélation entre les indicateurs techniques
  • Mettre en œuvre des stratégies de stop-loss dynamiques, telles que le suivi des stops, pour mieux s’adapter aux fluctuations du marché
  • Test en direct sur un petit capital pour vérifier progressivement la performance de la stratégie dans différentes conditions de marché

Orientation de l’optimisation de la stratégie

Cette stratégie peut être optimisée par les éléments suivants:

  1. Ajustement des paramètres dynamiques: mise en place d’un mécanisme d’ajustement automatique du facteur SuperTrend et de la dépréciation de l’ADX en fonction de la volatilité du marché, permettant ainsi aux stratégies de mieux s’adapter aux différentes conditions du marché. Par exemple, l’utilisation d’un facteur SuperTrend plus petit dans les marchés à faible volatilité et d’un facteur plus grand dans les marchés à forte volatilité.

  2. Filtreur de tempsLe système de filtrage basé sur le temps a été ajouté afin d’éviter de négocier pendant les périodes de faible liquidité ou de forte volatilité connues, comme le week-end des marchés de crypto-monnaie ou la publication de données économiques importantes sur les marchés des changes.

  3. Analyse de plusieurs périodes: l’intégration de la confirmation de la tendance à des périodes plus élevées, par exemple, l’entrée dans une transaction uniquement lorsque la direction de la tendance japonaise est en accord avec la période de négociation actuelle. Cela peut considérablement améliorer le taux de réussite de la stratégie.

  4. Stratégie de réduction des pertesRemplacer les arrêts à taux fixe par des arrêts dynamiques basés sur l’ATR ou le support/résistance, afin de mieux refléter les fluctuations réelles du marché et de réduire les arrêts déclenchés par le bruit du marché.

  5. Ajout de filtres d’entréeIl est possible d’inclure des conditions de filtrage telles que le jugement de surachat ou de survente du RSI ou le test de la limite de la ceinture de Brin, afin d’améliorer la qualité de l’entrée uniquement à un niveau de prix plus favorable.

  6. Optimisation de la gestion des fonds: réalisation d’une gestion dynamique des positions basée sur la performance de la stratégie actuelle et les conditions du marché, augmentation progressive des positions lorsque la stratégie fonctionne bien et réduction des positions lorsque l’incertitude augmente.

  7. Le renforcement de l’apprentissage automatiqueL’utilisation de la technologie d’apprentissage automatique pour optimiser la distribution des poids des indicateurs et ajuster automatiquement l’importance de chaque indicateur dans la formation du signal final en fonction des différents environnements de marché.

Résumer

La stratégie de négociation de tendance dynamique multi-indicateur, qui intègre plusieurs indicateurs techniques tels que SuperTrend, ADX et Delta de la liquidité, construit un système de négociation complet et flexible, adapté à la négociation de bandes dans divers environnements de marché. Le principal avantage de la stratégie réside dans son mécanisme de confirmation de signal multidimensionnel et son cadre de gestion du risque rigoureux, capable de filtrer efficacement le bruit du marché et de protéger les fonds de négociation. Cependant, les utilisateurs doivent être attentifs aux risques potentiels tels que la sensibilité des paramètres et le retard des indicateurs et réévaluer régulièrement la performance de la stratégie.

Le système a le potentiel d’améliorer encore sa rentabilité et sa stabilité en mettant en œuvre des directions d’optimisation recommandées, telles que l’ajustement des paramètres dynamiques, l’analyse des cadres temporels multiples et les stratégies de stop loss intelligentes. En fin de compte, cette stratégie offre aux traders quantifiés un cadre solide qui peut être personnalisé et étendu en fonction de leurs préférences de risque personnelles et de leurs opinions sur le marché.

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

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

//@version=6
// ====================================================================================
// Multi-Indicator Swing Trading Strategy [TIAMATCRYPTO]v6
// ====================================================================================
// DESCRIPTION:
// This strategy uses a combination of technical indicators to identify swing trading
// opportunities in various markets. The default settings are optimized for daily
// timeframes on cryptocurrency and forex markets.
// 
// RECOMMENDED DEFAULT SETTINGS:
// - Trading direction: Both (performs well in trending and ranging markets)
// - Position size: 5% (conservative position sizing to manage risk)
// - Stop Loss: 2% (conservative risk management for capital preservation)
// - Take Profit: 4% (realistic profit target with 1:2 risk-reward ratio)
// - Initial capital: $10,000 (realistic starting account size)
// - Timeframe: 2m (best performance on 2m charts)
// - Testing period: 2021-2033 (provides sufficient sample size of trades)
// ====================================================================================

strategy("Multi-Indicator Swing [TIAMATCRYPTO]v6", overlay=true, 
     default_qty_type=strategy.percent_of_equity, default_qty_value=5, 
     initial_capital=10000, commission_type=strategy.commission.percent, 
     commission_value=0.035, slippage=2)

// === BASIC SETTINGS ===
// Backtesting time period set directly in the code for realistic testing
var startDateInput = timestamp("2021-01-01T00:00:00")
var endDateInput = timestamp("2033-12-31T23:59:59")
var inDateRange = time >= startDateInput and time <= endDateInput

// Trading direction settings
tradeDirection = input.string("Both", "Trading Direction", options=["Long Only", "Short Only", "Both"], group="Basic Settings")

// === INDICATOR SWITCHES ===
// PSAR is now disabled by default
usePSAR = input.bool(false, "Use PSAR", group="Indicator Switches")
useSupertrend = input.bool(true, "Use Supertrend", group="Indicator Switches")
useADX = input.bool(true, "Use ADX", group="Indicator Switches")
useLiquidityDelta = input.bool(true, "Use Liquidity Delta", group="Indicator Switches")

// === INDICATOR SETTINGS SECTION ===
// PSAR Settings
// Default PSAR settings are conservative and work well across multiple markets
psarStart = input.float(0.02, "PSAR Initial Value", minval=0.01, maxval=0.1, step=0.01, group="PSAR Settings")
psarIncrement = input.float(0.02, "PSAR Increment", minval=0.01, maxval=0.1, step=0.01, group="PSAR Settings")
psarMaximum = input.float(0.2, "PSAR Maximum", minval=0.1, maxval=0.5, step=0.05, group="PSAR Settings")

// Supertrend Settings
// Factor 3.0 provides a good balance between sensitivity and false signals
atrPeriod = input.int(10, "SuperTrend ATR Period", minval=1, maxval=50, group="SuperTrend Settings")
factor = input.float(3.0, "SuperTrend Multiplier", minval=1, maxval=10, step=0.1, group="SuperTrend Settings")

// ADX Settings
// ADX threshold of 25 is standard for identifying strong trends
adxLength = input.int(14, "ADX Length", minval=1, maxval=50, group="ADX Settings")
adxThreshold = input.int(25, "ADX Trend Strength Threshold", minval=10, maxval=50, group="ADX Settings")

// Liquidity Delta Settings
// These settings help identify significant volume imbalances for trend confirmation
deltaLength = input.int(14, "Liquidity Delta Length", minval=1, maxval=50, group="Liquidity Delta")
deltaSmooth = input.int(3, "Delta Smoothing", minval=1, maxval=20, group="Liquidity Delta")
deltaThreshold = input.float(0.5, "Delta Signal Threshold", minval=0.1, maxval=5, step=0.1, group="Liquidity Delta")

// Risk Management Settings
// Conservative settings to ensure capital preservation
useStopLoss = input.bool(true, "Use Stop Loss", group="Risk Management")
useTakeProfit = input.bool(true, "Use Take Profit", group="Risk Management")
stopLossPercent = input.float(2.0, "Stop Loss (%)", minval=0.5, maxval=5, step=0.1, group="Risk Management")
takeProfitPercent = input.float(4.0, "Take Profit (%)", minval=1.0, maxval=10, step=0.1, group="Risk Management")

// Visualization Settings
signalSize = input.string("Normal", "Signal Size", options=["Small", "Normal", "Large"], group="Visualization")
buyColor = input.color(color.green, "Buy Signal Color", group="Visualization")
sellColor = input.color(color.red, "Sell Signal Color", group="Visualization")

// === INDICATOR CALCULATIONS ===
// All remaining indicators set to initialize as true when their respective switch is off

// PSAR Calculations
psar = ta.sar(psarStart, psarIncrement, psarMaximum)
psarCondition = not usePSAR or (close > psar)
psarSellCondition = not usePSAR or (close < psar)

// Supertrend Calculations
[supertrendValue, supertrendDirection] = ta.supertrend(factor, atrPeriod)
supertrendCondition = not useSupertrend or (supertrendDirection > 0)
supertrendSellCondition = not useSupertrend or (supertrendDirection < 0)

// ADX Calculations - custom implementation
trueRange = math.max(high - low, math.abs(high - close[1]), math.abs(low - close[1]))
smoothedTrueRange = ta.sma(trueRange, adxLength)
dmPlus = high > high[1] ? math.max(high - high[1], 0) : 0
dmMinus = low[1] > low ? math.max(low[1] - low, 0) : 0
smoothedDmPlus = ta.sma(dmPlus, adxLength)
smoothedDmMinus = ta.sma(dmMinus, adxLength)
diPlus = smoothedTrueRange > 0 ? 100 * smoothedDmPlus / smoothedTrueRange : 0
diMinus = smoothedTrueRange > 0 ? 100 * smoothedDmMinus / smoothedTrueRange : 0
dx = (diPlus + diMinus) > 0 ? math.abs(diPlus - diMinus) / (diPlus + diMinus) * 100 : 0
adxValue = ta.sma(dx, adxLength)
adxCondition = not useADX or (adxValue > adxThreshold)

// Liquidity Delta Calculations
bidVolume = close < open ? volume : volume * (high - close) / (high - low + 0.000001)
askVolume = close > open ? volume : volume * (close - low) / (high - low + 0.000001)
deltaRaw = bidVolume - askVolume
deltaAvg = ta.sma(deltaRaw, deltaLength)
deltaNormalized = deltaAvg / ta.sma(volume, deltaLength)
deltaSmoothed = ta.ema(deltaNormalized, deltaSmooth)

// Delta Signals
bullishDelta = deltaSmoothed > deltaThreshold
bearishDelta = deltaSmoothed < -deltaThreshold
deltaCondition = not useLiquidityDelta or bullishDelta
deltaSellCondition = not useLiquidityDelta or bearishDelta

// === TRADING LOGIC ===
// Buy signal - combination of all active indicators
buySignal = psarCondition and supertrendCondition and adxCondition and deltaCondition

// Sell signal - combination of all active indicators
sellSignal = psarSellCondition and supertrendSellCondition and adxCondition and deltaSellCondition

// Apply trading direction
isLongAllowed = tradeDirection == "Long Only" or tradeDirection == "Both"
isShortAllowed = tradeDirection == "Short Only" or tradeDirection == "Both"
finalBuySignal = buySignal and isLongAllowed
finalSellSignal = sellSignal and isShortAllowed

// === POSITION ENTRY WITH RISK MANAGEMENT ===
// Conservative position management with defined risk parameters
if finalBuySignal and inDateRange
    strategy.entry("Long", strategy.long)

    // Conditional setting of stop-loss and take-profit
    if useStopLoss or useTakeProfit
        stopLevel = useStopLoss ? close * (1 - stopLossPercent / 100) : na
        takeProfitLevel = useTakeProfit ? close * (1 + takeProfitPercent / 100) : na
        strategy.exit("Long Exit", "Long", stop=stopLevel, limit=takeProfitLevel)

if finalSellSignal and inDateRange
    strategy.entry("Short", strategy.short)

    // Conditional setting of stop-loss and take-profit
    if useStopLoss or useTakeProfit
        stopLevel = useStopLoss ? close * (1 + stopLossPercent / 100) : na
        takeProfitLevel = useTakeProfit ? close * (1 - takeProfitPercent / 100) : na
        strategy.exit("Short Exit", "Short", stop=stopLevel, limit=takeProfitLevel)

// === SIGNAL VISUALIZATION ===
// Creating separate signals for different sizes
buySmallSignal = finalBuySignal and signalSize == "Small"
buyNormalSignal = finalBuySignal and signalSize == "Normal"
buyLargeSignal = finalBuySignal and signalSize == "Large"

sellSmallSignal = finalSellSignal and signalSize == "Small"
sellNormalSignal = finalSellSignal and signalSize == "Normal"
sellLargeSignal = finalSellSignal and signalSize == "Large"

// Draw signals for each size
plotshape(buySmallSignal and inDateRange, title="Buy Small", location=location.belowbar, color=buyColor, style=shape.triangleup, size=size.small)
plotshape(buyNormalSignal and inDateRange, title="Buy Normal", location=location.belowbar, color=buyColor, style=shape.triangleup, size=size.normal)
plotshape(buyLargeSignal and inDateRange, title="Buy Large", location=location.belowbar, color=buyColor, style=shape.triangleup, size=size.large)

plotshape(sellSmallSignal and inDateRange, title="Sell Small", location=location.abovebar, color=sellColor, style=shape.triangledown, size=size.small)
plotshape(sellNormalSignal and inDateRange, title="Sell Normal", location=location.abovebar, color=sellColor, style=shape.triangledown, size=size.normal)
plotshape(sellLargeSignal and inDateRange, title="Sell Large", location=location.abovebar, color=sellColor, style=shape.triangledown, size=size.large)

// === INFORMATION PANEL ===
// Building list of active indicators
indList = ""
indList := usePSAR ? indList + "PSAR, " : indList
indList := useSupertrend ? indList + "SuperT, " : indList
indList := useADX ? indList + "ADX, " : indList
indList := useLiquidityDelta ? indList + "Delta" : indList

// Remove last comma if it exists
if str.endswith(indList, ", ")
    indList := str.substring(indList, 0, str.length(indList) - 2)

// Building risk management text
riskText = ""
if useStopLoss and useTakeProfit
    riskText := str.tostring(stopLossPercent, "#.#") + "% SL, " + str.tostring(takeProfitPercent, "#.#") + "% TP"
else if useStopLoss
    riskText := str.tostring(stopLossPercent, "#.#") + "% SL"
else if useTakeProfit
    riskText := str.tostring(takeProfitPercent, "#.#") + "% TP"
else
    riskText := "Disabled"

// Display strategy information
var table infoTable = table.new(position.top_right, 2, 5, border_width=1)
table.cell(infoTable, 0, 0, "Strategy:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 0, "Multi-Indicator Swing", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 0, 1, "Period:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 1, "2021-2023", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 0, 2, "Direction:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 2, tradeDirection, bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 0, 3, "Indicators:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 3, indList, bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 0, 4, "Risk Management:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 4, riskText, bgcolor=color.new(color.blue, 90), text_color=color.white)