Les ressources ont été chargées... Je charge...

La valeur de l'échange de titres est calculée en fonction de la valeur de l'échange.

Auteur:ChaoZhang est là., Date: 24 mai 2024 à 17h58
Les étiquettes:ADXDIIndice de résistanceLe MAE

img

Résumé

Cette stratégie utilise l'enveloppe de Nadaraya-Watson pour lisser les données de prix et calculer les bandes supérieures et inférieures en fonction du prix lissé. Elle utilise ensuite les indicateurs ADX et DI pour déterminer la force et la direction de la tendance, et l'indicateur RSI pour confirmer l'élan de la tendance.

Principes de stratégie

  1. Appliquer l'enveloppe Nadaraya-Watson pour lisser les données de prix et calculer les bandes supérieures et inférieures.
  2. Utilisez les indicateurs ADX et DI pour déterminer la force et la direction de la tendance. Une tendance haussière est indiquée lorsque l'ADX est supérieure à un seuil et que +DI est supérieur à -DI, et inversement pour une tendance à la baisse.
  3. Identifier les éventuelles ruptures lorsque le prix dépasse la bande supérieure ou la bande inférieure.
  4. Confirmez la dynamique de la tendance à l'aide de l'indicateur RSI. Un RSI supérieur à 70 indique une dynamique haussière, tandis qu'un RSI inférieur à 30 indique une dynamique baissière.
  5. Exécuter des transactions basées sur les signaux combinés de tendance, de rupture et de dynamique:
    • Entrez dans une position longue lorsqu'il y a une forte tendance haussière, une rupture à la hausse et une dynamique haussière.
    • Entrez dans une position courte lorsqu'il y a une forte tendance à la baisse, une rupture à la baisse et une dynamique baissière.
  6. Mettre en œuvre un stop-loss dynamique pour gérer le risque.
  7. Affichez visuellement les signaux de stratégie en traçant les lignes de tendance, les points de rupture et les signaux de dynamique sur le graphique.

Les avantages de la stratégie

  1. L'enveloppe Nadaraya-Watson aplatit efficacement les données sur les prix, réduisant les interférences sonores.
  2. Le mécanisme de confirmation multiple améliore la fiabilité du signal.
  3. La gestion dynamique du stop-loss permet de mieux s'adapter aux fluctuations du marché et de réduire les risques.
  4. Le tracé visuel des lignes de tendance, des points de rupture et des signaux de momentum sur le graphique facilite l'observation et l'interprétation des signaux de stratégie par l'utilisateur.

Risques stratégiques

  1. Dans les marchés instables ou lors d'inversions de tendance, des signaux de rupture fréquents peuvent entraîner un suréchange et des pertes.
  2. Le stop-loss dynamique peut ne pas sortir rapidement des positions lors d'inversions de tendance, ce qui entraîne une augmentation des retraits.
  3. Les paramètres de la stratégie, tels que la bande passante de l'enveloppe Nadaraya-Watson et le seuil ADX, doivent être optimisés pour différents marchés et instruments.

Directions d'optimisation de la stratégie

  1. Incorporer d'autres indicateurs efficaces de détermination des tendances, tels que le MACD, les systèmes de moyennes mobiles, etc., afin d'améliorer la précision et la stabilité de l'identification des tendances.
  2. Optimiser la méthode dynamique de calcul du stop-loss en tenant compte d'indicateurs liés à la volatilité tels que l'ATR et le SAR afin de rendre le stop-loss plus flexible et efficace.
  3. Développer différentes combinaisons de paramètres pour différentes caractéristiques du marché, telles que les tendances ou les marchés à fourchette, afin d'améliorer l'adaptabilité de la stratégie.
  4. Mettre en place un module de dimensionnement des positions permettant d'ajuster dynamiquement la taille des positions en fonction de facteurs tels que l'évolution du marché et la volatilité, contrôlant ainsi le risque.

Résumé

Cette stratégie combine l'enveloppe de Nadaraya-Watson pour lisser les prix avec des indicateurs de tendance tels que ADX et DI, l'indicateur de dynamique RSI et les points de rupture des prix pour créer un système de trading complet. La gestion dynamique du stop-loss aide à s'adapter aux changements du marché et à contrôler les risques dans une certaine mesure. Cependant, dans l'application pratique, l'attention doit être accordée à l'optimisation de l'identification de la tendance, du stop-loss dynamique et des paramètres pour améliorer la robustesse et la rentabilité 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")


Relationnée

Plus de