Stratégie d'indicateur de tendance moyenne dynamique ADX


Date de création: 2024-01-15 15:32:45 Dernière modification: 2024-01-15 15:32:45
Copier: 0 Nombre de clics: 584
1
Suivre
1617
Abonnés

Stratégie d’indicateur de tendance moyenne dynamique ADX

Aperçu

La stratégie d’indicateur de tendance des moyennes dynamiques de l’ADX est une stratégie de négociation quantitative qui utilise les indicateurs de l’ADX pour déterminer la force et la direction des tendances du marché. La stratégie détermine si le marché est en tendance en calculant l’indicateur de tendance moyenne ((ADX) et la direction de la tendance en calculant l’indicateur positif ((DI +) et l’indicateur négatif ((DI -)) pour générer des signaux d’achat et de vente.

Principe de stratégie

La stratégie utilise d’abord l’indicateur ADX pour déterminer si le marché est en tendance. Lorsque l’ADX est supérieur à la valeur clé définie par l’utilisateur (par défaut 23), la tendance du marché est forte. Lorsque la valeur actuelle de l’ADX est supérieure à la valeur de n jours avant l’ADX (par défaut 3 jours), l’ADX est en hausse et la tendance du marché se forme.

La stratégie utilise ensuite les valeurs DI+ et DI- pour déterminer la direction de la tendance du marché. Lorsque DI+ est supérieur à DI-, le marché est en hausse; lorsque DI+ est inférieur à DI-, le marché est en baisse.

Enfin, la stratégie de synthèse juge l’ADX et le DI et génère des signaux d’achat et de vente spécifiques:

  1. Lorsque l’ADX est en hausse, au-dessus de la valeur critique, et DI+ au-dessus de DI-, un signal d’achat est généré
  2. Lorsque l’ADX est supérieur à la valeur critique et que le DI+ est inférieur au DI-, un signal de vente est généré
  3. Lorsque l’ADX se transforme en baisse, un signal de plage est généré

La stratégie fournit également des fonctionnalités telles que le filtrage des moyennes mobiles et des intervalles de temps de rétroaction personnalisés, qui peuvent être configurés selon les besoins.

Analyse des avantages

La stratégie d’indicateur de tendance des moyennes dynamiques de l’ADX présente les avantages suivants:

  1. Il permet de déterminer automatiquement si une tendance est présente sur le marché et d’éviter des transactions inefficaces.
  2. Il permet de déterminer automatiquement la direction des tendances du marché et de suivre les tendances.
  3. Fournir une logique claire pour acheter quand la tendance est présente / fermer quand la tendance disparaît
  4. Filtrez les moyennes mobiles configurables pour éviter les fausses ruptures
  5. Une plage de temps de retour configurable pour les tests historiques
  6. Indicateurs et paramètres sont ajustables et optimisés pour différentes variétés

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. L’indicateur ADX est en retard et risque de manquer une opportunité au début de la tendance
  2. Le jugement de la pluralité dépend de l’indicateur DI, l’indicateur DI est sensible et peut produire un mauvais signal
  3. Le filtrage des moyennes mobiles peut manquer une occasion de courte ligne
  4. Une mauvaise plage de temps de détection peut entraîner une suradaptation
  5. Une mauvaise configuration des paramètres de l’indicateur peut affecter les effets de la stratégie

Pour atténuer les risques, il faut tenir compte des points suivants:

  1. Réduire le retard en raccourcissant les paramètres ADX
  2. Ajustez ou supprimez le filtre DI pour éviter les signaux erronés
  3. Réduction appropriée des cycles de moyenne mobile
  4. Élargissement de la période de dépistage pour un test à l’échantillon entier
  5. Optimiser les paramètres de l’indicateur pour trouver le meilleur réglage

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Test de portefeuille combiné avec plusieurs actions pour diversifier le risque d’une seule action
  2. Augmentation de la logique de stop-loss pour contrôler les pertes individuelles
  3. Vérification combinée avec d’autres indicateurs pour améliorer la précision du signal
  4. L’introduction d’algorithmes d’apprentissage automatique pour détecter les signaux d’achat et de vente
  5. Ajout d’un module d’optimisation automatique des paramètres permettant un ajustement dynamique des paramètres

Résumer

La stratégie de l’indicateur de tendance ADX utilise l’ADX pour juger de l’existence d’une tendance et le DI pour juger de la direction de la tendance, pour générer des signaux de négociation lorsque la tendance est présente, l’idée de la stratégie est claire. La stratégie peut juger automatiquement de la tendance, suivre la tendance et, dans une certaine mesure, éviter les transactions inefficaces sur les marchés non tendance.

Code source de la stratégie
/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © millerrh with inspiration from @9e52f12edd034d28bdd5544e7ff92e 
//The intent behind this study is to look at ADX when it has an increasing slope and is above a user-defined key level (23 default). 
//This is to identify when it is trending.
//It then looks at the DMI levels.  If D+ is above D- and the ADX is sloping upwards and above the key level, it triggers a buy condition.  Opposite for short.
//Can use a user-defined moving average to filter long/short if desried.
// NOTE: THIS IS MEANT TO BE USED IN CONJUNCTION WITH MY "ATX TRIGGER" INDICATOR FOR VISUALIZATION. MAKE SURE SETTINGS ARE THE SAME FOR BOTH.

strategy("ADX | DMI Trend", overlay=true, initial_capital=10000, currency='USD', 
   default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.04)

// === BACKTEST RANGE ===
From_Year  = input(defval = 2019, title = "From Year")
From_Month = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
From_Day   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
To_Year    = input(defval = 9999, title = "To Year")
To_Month   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
To_Day     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
Start  = timestamp(From_Year, From_Month, From_Day, 00, 00)  // backtest start window
Finish = timestamp(To_Year, To_Month, To_Day, 23, 59)        // backtest finish window

// == INPUTS ==
// ADX Info
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Period")
keyLevel = input(23, title="Keylevel for ADX")
adxLookback = input(3, title="Lookback Period for Slope")

// == FILTERING ==
// Inputs
useMaFilter = input(title = "Use MA for Filtering?", type = input.bool, defval = true)
maType = input(defval="EMA", options=["EMA", "SMA"], title = "MA Type For Filtering")
maLength   = input(defval = 200, title = "MA Period for Filtering", minval = 1)

// Declare function to be able to swap out EMA/SMA
ma(maType, src, length) =>
    maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc)
maFilter = ma(maType, close, maLength)
plot(maFilter, title = "Trend Filter MA", color = color.green, linewidth = 3, style = plot.style_line, transp = 50)

// Check to see if the useMaFilter check box is checked, this then inputs this conditional "maFilterCheck" variable into the strategy entry 
maFilterCheck = if useMaFilter == true
    maFilter
else
    close

// == USE BUILT-IN DMI FUNCTION TO DETERMINE ADX AND BULL/BEAR STRENGTH
[diplus, diminus, adx] = dmi(dilen, adxlen)

buySignal = (adx[0]-adx[adxLookback] > 0) and adx > keyLevel and diplus > diminus  and close >= maFilterCheck
// buySignalValue = valuewhen(buySignal, close, 0)
shortSignal = (adx[0]-adx[adxLookback] > 0) and adx > keyLevel and diplus < diminus  and close <= maFilterCheck
// shortSignalValue = valuewhen(shortSignal, close, 0)
sellCoverSignal = adx[0]-adx[adxLookback] < 0

// == ENTRY & EXIT CRITERIA
// Triggers to be TRUE for it to fire of the BUY Signal : (opposite for the SELL signal).
// (1): Price is over the 200 EMA line. (EMA level configurable by the user)
// (2): "D+" is OVER the "D-" line
// (3): RSI 7 is under 30 (for SELL, RSI 7 is over 70)
// 1* = The ultimate is to have a combination line of 3 EMA values, EMA 14, EMA 50 and EMA 200 - And if price is over this "combo" line, then it's a strong signal

// == STRATEGY ENTRIES/EXITS == 
strategy.entry("Long", strategy.long, when = buySignal)
strategy.close("Long", when = sellCoverSignal)
strategy.entry("Short", strategy.short, when = shortSignal)
strategy.close("Short", when = sellCoverSignal)
    
// == ALERTS == 
// alertcondition(buySignal, title='ADX Trigger Buy', message='ADX Trigger Buy')
// alertcondition(sellSignal, title='ADX Trigger Sell', message='ADX Trigger Sell')