Stratégie de rupture de momentum avec le filtre ADX

Auteur:ChaoZhang est là., Date: 2024-01-04 17:12:30 Le projet de loi est en cours d'adoption.
Les étiquettes:

img

Résumé

Il s'agit d'une stratégie de trading à court terme qui utilise l'indicateur ADX pour filtrer les signaux de rupture. Il va court lorsque le prix dépasse la bande supérieure de Bollinger et que l'ADX est en baisse, et va long lorsque le prix dépasse la bande inférieure de Bollinger et que l'ADX est en hausse.

La logique de la stratégie

Le noyau de cette stratégie consiste à utiliser des bandes de Bollinger pour les signaux de rupture. Les bandes supérieure et inférieure des bandes de Bollinger représentent deux écarts standards du prix, de sorte que les ruptures impliquent généralement que le prix entre dans une forte tendance. En outre, l'indicateur ADX est introduit ici comme un filtre pour éviter de fausses ruptures. Les signaux courts ne sont considérés que lorsque l'ADX chute tandis que les signaux longs ne sont considérés que lorsque l'ADX augmente.

Plus précisément, cette stratégie calcule les bandes de Bollinger en utilisant 33 périodes de prix de clôture. La bande du milieu est une moyenne mobile simple de 33 périodes, et les bandes supérieures/inférieures sont placées à deux écarts types au-dessus/en dessous de la bande du milieu. La stratégie signale short lorsque le prix se ferme en dessous de la bande supérieure et l'ADX de 8 périodes est en dessous de l'ADX de 15 périodes. Elle signale long lorsque le prix se ferme au-dessus de la bande inférieure et l'ADX de 8 périodes est au-dessus de l'ADX de 15 périodes. Les sorties sont fixées à 800 points de profit et 400 points d'arrêt de perte.

Analyse des avantages

En tant que stratégie de rupture intégrant des filtres de tendance et de dynamique, elle présente plusieurs avantages:

  1. L'utilisation des bandes de Bollinger pour détecter les ruptures s'aligne sur les habitudes de la plupart des traders.
  2. Le filtre ADX supplémentaire permet d'éviter les pertes de fouets.
  3. La logique est simple et facile à comprendre et à optimiser.
  4. Le stop loss et le take profit automatisés facilitent le trading par algorithme.

Analyse des risques

Cette stratégie comporte également certains risques:

  1. Les paramètres BB incorrects peuvent générer des signaux trop fréquents et augmenter les coûts.
  2. Des paramètres ADX incorrects pourraient filtrer les signaux valides.
  3. La distance d'arrêt des pertes peut être trop large, ce qui entraîne des pertes importantes.

Pour atténuer ces risques, nous pouvons affiner le paramètre BB pour réduire les bandes, ajuster les périodes ADX pour éviter le sur-filtrage et réduire le stop loss pour contrôler la perte d'un seul trade.

Directions d'optimisation

Il est possible d'optimiser davantage:

  1. Testez sur différentes données de marché afin de trouver l'ensemble de paramètres optimal.
  2. Incorporer d'autres indicateurs comme le volume et la moyenne mobile pour le filtrage du signal.
  3. Utiliser des méthodes d'apprentissage automatique pour optimiser automatiquement les paramètres.
  4. Considérez le stop loss dynamique et le profit.

Conclusion

En conclusion, il s'agit d'une stratégie de rupture simple et pratique avec filtre. Identifier les tendances avec les BB et filtrer les signaux avec ADX aide à éviter le bruit pendant les périodes d'intervalle et à saisir les opportunités de tendance dans une certaine mesure.


/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Hizbullah XAUUSD Sniper", overlay=true)

Price = close

Length = input(33)
Mult = input(2)
Basis = sma(Price, Length)
StdDev = Mult * stdev(Price, Length)
Upper = Basis + StdDev
Lower = Basis - StdDev

ADX_Length = input(4)
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
SmoothedTrueRange = sma(TrueRange, ADX_Length)
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedDirectionalMovementPlus = sma(DirectionalMovementPlus, ADX_Length)
SmoothedDirectionalMovementMinus = sma(DirectionalMovementMinus, ADX_Length)
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus - DIMinus) / (DIPlus + DIMinus)*100
SmoothedADX1 = ema(DX, input(8))
SmoothedADX2 = ema(DX, input(15))

Condition1 = crossunder(Price, Upper) and SmoothedADX1 < SmoothedADX2

Take_Profit = input(800)
Stop_Loss = input(400)

strategy.entry("ShortEntry", true, when = Condition1)
strategy.exit("ShortExit", "ShortEntry", profit = Take_Profit, loss = Stop_Loss)


Plus de