Stratégie de stop loss dynamique à confirmation multiple avec graphique en bande Nadaraya-Watson

ADX DI RSI MAE
Date de création: 2024-05-24 17:58:47 Dernière modification: 2024-05-24 17:58:47
Copier: 0 Nombre de clics: 1065
1
Suivre
1617
Abonnés

Stratégie de stop loss dynamique à confirmation multiple avec graphique en bande Nadaraya-Watson

Aperçu

La stratégie utilise le diagramme des bandes de Nadaraya-Watson pour traiter les prix en douceur et calculer la hausse et la baisse en fonction des prix après la levée. Ensuite, l’indicateur ADX et DI est utilisé pour déterminer la force et la direction de la tendance, l’indicateur RSI pour confirmer la dynamique de la tendance, tout en identifiant les points de rupture potentiels par la hausse et la baisse des prix. Enfin, la combinaison de plusieurs signaux tels que la tendance, la rupture et la dynamique est utilisée pour exécuter les transactions et la gestion des risques par des arrêts dynamiques.

Principe de stratégie

  1. Les prix sont traités de manière lisse à l’aide d’un graphique en bandes de Nadaraya-Watson, calculé en haut et en bas.
  2. Les indicateurs ADX et DI sont utilisés pour déterminer la force et la direction d’une tendance. Lorsque l’ADX est supérieur à la marge et que +DI est supérieur à -DI, il s’agit d’une tendance à la hausse, par opposition à la baisse.
  3. Détermine si le prix a franchi la trajectoire de haut ou de bas du graphique en bandes, indiquant respectivement une éventuelle rupture vers le haut et une rupture vers le bas.
  4. L’indicateur RSI est utilisé pour confirmer la dynamique de la tendance. Lorsque le RSI est supérieur à 70, il indique une dynamique ascendante et inférieure à 30, une dynamique descendante.
  5. Les traders utilisent des signaux multiples, tels que la tendance, les points de rupture et la dynamique, pour effectuer des transactions:
    • Il y a une forte tendance à la hausse, des ruptures à la hausse et de la dynamique à la hausse.
    • Il y a une forte tendance à la baisse, une rupture vers le bas et une baisse de la dynamique.
  6. Le prix de l’arrêt est calculé sur la base du prix le plus élevé/le plus bas et du prix de clôture.
  7. Les signaux de stratégie sont visuellement affichés en marquant sur le graphique les lignes de tendance, les points de rupture et les signaux de dynamique.

Avantages stratégiques

  1. Les bandes de Nadleria-Watson permettent d’aplanir efficacement les données sur les prix et de réduire les interférences sonores.
  2. Les mécanismes de confirmation de signaux multiples améliorent la fiabilité des signaux, les signaux de tendance, de rupture et de dynamique se complètent et vérifient les opportunités de négociation.
  3. La gestion dynamique des arrêts permet de mieux s’adapter aux fluctuations du marché et de réduire les risques. Le prix d’arrêt est calculé en fonction du prix le plus élevé/le plus bas et du prix de clôture, et peut suivre l’ajustement du marché.
  4. Les lignes de tendance, les points de rupture et les signaux de dynamique sont indiqués sur le graphique pour faciliter l’observation et la lecture des signaux de stratégie.

Risque stratégique

  1. Les signaux de rupture fréquents peuvent entraîner des transactions excessives et des pertes en période de turbulences ou de retournement de tendance.
  2. Les stop-loss dynamiques peuvent ne pas être arrêtés en temps opportun lors d’un renversement de tendance, ce qui augmente le retrait.
  3. Les paramètres de la stratégie, tels que la bande passante du diagramme de Nadaraya-Watson, les seuils de l’ADX, etc., doivent être optimisés en fonction des différents marchés et des normes. Une mauvaise configuration des paramètres peut affecter l’efficacité de la stratégie.

Orientation de l’optimisation de la stratégie

  1. L’introduction de plus d’indicateurs efficaces de jugement de tendance, tels que le MACD, le système de coordonnées, etc., améliore l’exactitude et la stabilité du jugement de tendance.
  2. L’optimisation des méthodes de calcul des pertes dynamiques, telles que la prise en compte des indicateurs liés à la volatilité tels que l’ATR, le SAR, etc., rend les pertes plus flexibles et plus efficaces.
  3. Pour adapter la stratégie à différentes caractéristiques du marché, telles que la tendance, la volatilité, etc., définissez différents ensembles de paramètres.
  4. Adhésion à un module de gestion de position, ajustement dynamique des positions en fonction des tendances du marché, de la volatilité et d’autres facteurs, contrôle des risques.

Résumer

La stratégie utilise un graphique à bandes de Nadezhda-Watson pour aplanir les prix, combinant des indicateurs de tendance tels que l’ADX, le DI et l’indicateur de dynamique du RSI, ainsi que des signaux multiples tels que les points de rupture des prix, pour construire un système de négociation plus complet. La gestion dynamique des arrêts de perte peut être adaptée aux changements du marché et contrôler les risques dans une certaine mesure.

Code source de la stratégie
/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-18 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Nadaraya-Watson Envelope with Multi-Confirmation and Dynamic Stop-Loss", overlay=true)

// Input parameters
h = input.float(7.2, "Bandwidth", minval=0)
mult = input.float(2.1, minval=0)
src = input(close, "Source")

// ADX and DI Input Parameters
adxLength = input.int(14, "ADX Length")
adxThreshold = input.float(25, "ADX Threshold")
adxSmoothing = input.int(14, "ADX Smoothing")

// Calculate ADX and DI
[dmiPlus, dmiMinus, adx] = ta.dmi(adxLength, adxSmoothing)
strongTrendUp = dmiPlus > dmiMinus and adx > adxThreshold
strongTrendDown = dmiMinus > dmiPlus and adx > adxThreshold

// Nadaraya-Watson Envelope Calculation
gauss(x, h) =>
    math.exp(-(math.pow(x, 2) / (h * h * 2)))

coefs = array.new_float(0)
den = 0.0

for i = 0 to 100
    w = gauss(i, h)
    array.push(coefs, w)

den := array.sum(coefs)

out = 0.0
for i = 0 to 100
    out += src[i] * array.get(coefs, i)
out /= den
mae = ta.sma(math.abs(src - out), 100) * mult

upper = ta.sma(out + mae, 10)
lower = ta.sma(out - mae, 10)

// Confirmations
breakoutUp = ta.crossover(src, upper)
breakoutDown = ta.crossunder(src, lower)

// Original RSI period and thresholds
rsiPeriod = input.int(14, "RSI Period")
rsi = ta.rsi(src, rsiPeriod)
momentumUp = rsi > 70 and adx > adxThreshold
momentumDown = rsi < 30 and adx > adxThreshold

// // Plot ADX-based Trend Confirmation Lines
// if (strongTrendUp)
//     line.new(bar_index, low, bar_index + 1, low, color=color.new(color.blue, 50), width=2, style=line.style_dashed)

// if (strongTrendDown)
//     line.new(bar_index, high, bar_index + 1, high, color=color.new(color.red, 50), width=2, style=line.style_dashed)

// Plot Breakout Confirmation Dots
plotshape(series=breakoutUp, style=shape.circle, location=location.abovebar, color=color.blue, size=size.tiny, title="Breakout Up")
plotshape(series=breakoutDown, style=shape.circle, location=location.belowbar, color=color.orange, size=size.tiny, title="Breakout Down")

// Plot Momentum Confirmation Arrows
plotshape(series=momentumUp, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny, title="Momentum Up")
plotshape(series=momentumDown, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny, title="Momentum Down")

// Strategy Entry and Exit
var float stopLossLevel = na
var float highestPrice = na

potentialBuy = strongTrendUp and breakoutUp
potentialSell = strongTrendDown and breakoutDown
momentumConfirmUp = potentialBuy and momentumUp
momentumConfirmDown = potentialSell and momentumDown

if (momentumConfirmUp)
    strategy.entry("Buy", strategy.long)
    stopLossLevel := close * 0.90
    highestPrice := close

if (momentumConfirmDown)
    strategy.entry("Sell", strategy.short)
    stopLossLevel := close * 1.10
    highestPrice := close

if (strategy.position_size > 0)
    highestPrice := math.max(highestPrice, close)
    stopLossLevel := math.max(highestPrice * 0.85, close * 0.90)

if (strategy.position_size < 0)
    highestPrice := math.min(highestPrice, close)
    stopLossLevel := math.min(highestPrice * 1.15, close * 1.10)

// Close position if stop loss is hit
if (strategy.position_size > 0 and close < stopLossLevel)
    strategy.close("Buy")

if (strategy.position_size < 0 and close > stopLossLevel)
    strategy.close("Sell")