Stratégie de tendance ADX Momentum


Date de création: 2024-01-16 15:57:17 Dernière modification: 2024-01-16 15:57:17
Copier: 0 Nombre de clics: 762
1
Suivre
1617
Abonnés

Stratégie de tendance ADX Momentum

Aperçu

La stratégie est basée sur l’indicateur ADX pour déterminer la tendance du marché, combiné à l’indicateur DMI pour déterminer la direction de la pluralité, l’utilisation de l’inclinaison ADX pour déterminer la force de la tendance, définir le filtre des valeurs clés ADX pour les marchés non tendance et aider les signaux de négociation à filtrer la moyenne mobile.

Principe de stratégie

  1. Calculer les indicateurs ADX, DI+ et DI-
  2. La pente ADX est supérieure à 0, indiquant une tendance à la hausse; la valeur critique est fixée à 23 pour filtrer les marchés non tendance.
  3. DI+ est supérieur à DI-, ce qui indique que la force multi-tête est supérieure à la force en l’air, voir plus de signaux.
  4. Lorsque le filtrage des moyennes mobiles est activé, un signal polyhedral est généré uniquement lorsque le prix de clôture est supérieur à la moyenne mobile.
  5. Lorsque la courbe de l’ADX est inférieure à zéro, la tendance se calme.

Analyse des avantages

  1. Le filtrage MA auxiliaire permet de réduire le bruit des transactions sur les marchés non tendanciels.
  2. L’inclinaison de l’ADX permet de juger avec précision le développement de la tendance.
  3. Le DI est associé au jugement de l’ADX pour former un système de décision de trading de tendances plus complet.
  4. Les retraits et les pertes sont de loin supérieurs à la simple stratégie des moyennes mobiles.

Analyse des risques

  1. L’indicateur ADX définit des paramètres différents et les résultats varient considérablement.
  2. Le DMI n’a pas encore complètement déterminé la direction de la plongée, ce qui pourrait entraîner un signal erroné.
  3. Il y a un certain retard qui réduit l’efficacité de la stratégie.

Direction d’optimisation

  1. Optimiser les combinaisons de paramètres ADX pour trouver les meilleurs.
  2. Il est important de mettre en place des stratégies de stop loss pour éviter que les pertes individuelles ne s’accumulent.
  3. Essayez de combiner les signaux de filtrage avec d’autres indicateurs, par exemple le RSI, les bandes de Brin.

Résumer

La stratégie exploite pleinement les avantages de l’ADX pour juger des tendances et de la force des tendances, en collaboration avec le jugement de la direction de l’indicateur DMI, pour former un système de suivi de tendance complet. En même temps, l’aide de la moyenne mobile peut filtrer efficacement le bruit du marché non tendance. L’optimisation des paramètres et la combinaison des indicateurs peuvent également améliorer la stabilité et l’efficacité de la stratégie.

Code source de la stratégie
/*backtest
start: 2024-01-08 00:00:00
end: 2024-01-15 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')