Stratégie améliorée de suivi de la tendance des vagues

Auteur:ChaoZhang est là., Date: 2024-01-31 15h35 et 41 min
Les étiquettes:

img

Cette stratégie utilise l'oscillateur de tendance de vague pour identifier les tendances. Il calcule les moyennes mobiles exponentielles du prix moyen et la différence de prix absolue pour tracer une ligne de tendance de vague. Les signaux de trading sont générés lorsque la ligne de tendance de vague traverse les zones de surachat/survente.

La logique de la stratégie:

  1. Calculer le prix moyen ap = (haut + bas + proche) / 3

  2. Calculer l'EMA de n1 périodes de ap pour obtenir esa

  3. Calculer l'EMA de la différence absolue entre ap et esa pour n périodes pour obtenir d

  4. Comptez la ligne de tendance de l'onde: ci = (ap - esa) /(0.015*d)

  5. Calculer l'EMA de ci sur n2 périodes pour obtenir la ligne de tendance de l'onde finale tci, c'est-à-dire wt1

  6. Calculer la SMA à 4 périodes de wt1 pour obtenir wt2

  7. Légines de niveau obLevel1/2 et osLevel1/2 suracheté/survendu

  8. Générer un signal d'achat lorsque wt1 dépasse le niveau ob2; générer un signal de vente lorsque wt1 dépasse le niveau os2

  9. Ajouter une moyenne mobile emaFilter et un filtre de volumeFilter en tant que filtres pour éviter les faux signaux

  10. Série de prises de bénéfices/arrêt des pertes après entrée en position de sortie

Les avantages:

  1. La ligne de tendance de vague gère bien les transitions tendance/contre-tendance

  2. Amélioration de la fiabilité grâce à des doubles filtres de moyenne mobile et de volume

  3. Les paramètres multiples évitent les limitations d'un seul indicateur

  4. Résultats de l'évaluation de la valeur ajoutée

Risques et limites:

  1. Le choix des paramètres peut entraîner une mauvaise performance ou un surajustement

  2. Aucune orientation définitive sur les paramètres optimaux

  3. Ignore les conditions plus générales du marché

  4. Risque de piqûres de fouet sur les marchés à plage/décalés

  5. Manque de règles de sortie autres que la prise de profit/arrêt de perte

Des possibilités d'amélioration:

  1. Paramètres d'essai à travers les délais/actifs pour trouver des valeurs optimales

  2. Incorporer des indicateurs de volatilité pour éviter les régimes à faible volatilité

  3. Ajouter des indicateurs comme le RSI pour améliorer la précision du signal

  4. Construire un modèle d'apprentissage automatique pour trouver des paramètres adaptés optimaux

  5. Améliorer les sorties avec des arrêts de retard ou des sorties basées sur des événements de volatilité

Conclusion:

Il s'agit d'une stratégie de suivi de tendance incorporant l'indicateur de tendance de vague avec des filtres supplémentaires. Il capitalise sur la capacité de la ligne de tendance de vague à identifier les transitions de tendance, utilise des filtres mobiles et de volume pour éviter de faux signaux et vise à capturer la plupart des tendances à moyen / long terme.


/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Bush Strategy test", shorttitle="Nique Audi", overlay=false)

// Paramètres
n1 = input(10, title="Channel Length")
n2 = input(21, title="Average Length")
obLevel1 = input(60, title="Over Bought Level 1")
obLevel2 = input(53, title="Over Bought Level 2")
osLevel1 = input(-65, title="Over Sold Level 1")
osLevel2 = input(-60, title="Over Sold Level 2")
takeProfitPercentage = input(1, title="Take Profit (%)")
stopLossPercentage = input(0.50, title="Stop Loss (%)")

// Calculs
ap = hlc3 
esa = ta.ema(ap, n1)
d = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ta.ema(ci, n2)

wt1 = tci
wt2 = ta.sma(wt1, 4)

// Tracé des lignes
plot(0, color=color.gray)
plot(obLevel1, color=color.red)
plot(osLevel1, color=color.green)
plot(obLevel2, color=color.red, style=plot.style_line)
plot(osLevel2, color=color.green, style=plot.style_line)

plot(wt1, color=color.green)
plot(wt2, color=color.red, style=plot.style_line)

// Tracé de la différence entre wt1 et wt2 en bleu
hline(0, "Zero Line", color=color.gray)

// Conditions d'entrée long et court
longCondition = ta.crossover(wt1, obLevel2)
shortCondition = ta.crossunder(wt1, osLevel2)

// Tracé des signaux d'achat et de vente
plotshape(series=longCondition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, title="Buy Signal")
plotshape(series=shortCondition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, title="Sell Signal")

// Conditions d'entrée et de sortie
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)

// Niveaux de prise de profit pour les positions longues et courtes
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercentage / 100)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercentage / 100)

// Vérification si les niveaux de prise de profit sont atteints
longTakeProfitReached = strategy.position_size > 0 and high >= longTakeProfitLevel
shortTakeProfitReached = strategy.position_size < 0 and low <= shortTakeProfitLevel

// Tracé des formes de prise de profit
plotshape(series=longTakeProfitReached, style=shape.xcross, location=location.belowbar, color=color.blue, size=size.small, title="Take Profit Long")
plotshape(series=shortTakeProfitReached, style=shape.xcross, location=location.abovebar, color=color.blue, size=size.small, title="Take Profit Short")

// Niveaux de stop loss pour les positions longues et courtes
longStopLossLevel = strategy.position_avg_price * (1 - stopLossPercentage / 100)
shortStopLossLevel = strategy.position_avg_price * (1 + stopLossPercentage / 100)

// Vérification si les niveaux de stop loss sont atteints
longStopLossReached = strategy.position_size > 0 and low <= longStopLossLevel
shortStopLossReached = strategy.position_size < 0 and high >= shortStopLossLevel

// Tracé des formes de stop loss
plotshape(series=longStopLossReached, style=shape.xcross, location=location.belowbar, color=color.red, size=size.small, title="Stop Loss Long")
plotshape(series=shortStopLossReached, style=shape.xcross, location=location.abovebar, color=color.red, size=size.small, title="Stop Loss Short")

// Fermeture des positions en cas de prise de profit ou de stop loss
strategy.close("Long", when=longTakeProfitReached or longStopLossReached)
strategy.close("Short", when=shortTakeProfitReached or shortStopLossReached)




Plus de