
La stratégie est optimisée spécifiquement pour les périodes de 15 minutes, en utilisant une méthode d’alignement de trois périodes: 240 minutes WaveTrend sert de filtre de tendance macro, 30 minutes WaveTrend est utilisé pour la confirmation de la dynamique, et 15 minutes WaveTrend est responsable de la génération de signaux. La stratégie est centrée sur la détermination des points d’entrée et de sortie en identifiant les croisements d’indicateurs WaveTrend sur différents périodes de temps, tout en combinant des mécanismes de suivi de stop-loss avancés, y compris une logique de suivi basée sur le maximum de gains et une tolérance de retrait basée sur le pourcentage, pour maximiser les profits et contrôler efficacement les risques.
Le principe central de cette stratégie est d’utiliser l’indicateur WaveTrend pour identifier la direction de la tendance et les points de basculement. L’indicateur WaveTrend est lui-même un indicateur technique de mesure de l’état de survente des prix en calculant la relation entre le prix et sa moyenne mobile indicielle (EMA), combinée à des facteurs de volatilité.
Le processus de mise en œuvre de la stratégie est le suivant:
Tout d’abord, définissez la fonction WaveTrend, qui calcule les deux valeurs principales (wt1 et wt2):
La stratégie consiste à appliquer l’indicateur WaveTrend sur trois périodes:
Conditions d’entrée :
Les mécanismes de stop-loss et de retrait sont combinés:
La stratégie enregistre et suit le prix d’entrée, les piliers d’entrée et le taux de rendement maximal de chaque transaction, paramètres qui sont utilisés pour ajuster dynamiquement le point de sortie.
Synergie dans plusieurs périodesEn analysant l’indicateur WaveTrend sur différentes périodes, la stratégie permet de mieux saisir les tendances du marché, de réduire les interférences de faux signaux et d’améliorer la précision des transactions. Les périodes basses fournissent des points d’entrée précis et les périodes hautes assurent la conformité de la direction des transactions avec les tendances principales.
Système d’arrêt dynamiqueLa stratégie utilise un triple système de protection contre les pertes, comprenant des pertes de pourcentage fixe, des pertes de suivi basées sur les gains et un mécanisme de protection des gains maximaux. Cette stratégie de prévention des pertes composée permet de protéger les fonds tout en capturant le maximum de gains dans la tendance.
Système de rétroaction visuelleLes points d’entrée et de sortie des transactions sont indiqués sur le graphique par des étiquettes en couleurs et contiennent des informations de colonnes pour faciliter l’analyse et le recul des transactions.
Les paramètres sont flexibles: La stratégie fournit plusieurs paramètres personnalisables, y compris le pourcentage de déclenchement du stop loss, le pourcentage de suivi et le pourcentage de retrait maximal autorisé, que l’utilisateur peut ajuster en fonction de ses préférences de risque et de la situation du marché.
La structure du code est claire: La stratégie est conçue de manière fonctionnelle, les parties sont logiquement distinctes, faciles à comprendre et à entretenir, mais aussi faciles à optimiser et à étendre.
La réaction au renversement de tendance est retardée: Comme stratégie de suivi de la tendance, il peut y avoir une réaction de retard au point de basculement de la tendance, ce qui entraîne un retrait plus important lors d’une inversion de la tendance. La solution consiste à ajuster le paramètre de suivi des arrêts de perte ou à ajouter un indicateur supplémentaire de basculement de la tendance en guise d’aide.
Les marchés volatiles ne sont pas performants: Dans un environnement de marché en cours de correction horizontale ou de forte volatilité, la stratégie peut générer de fréquents faux signaux et des arrêts de perte, entraînant des pertes continues. Il est recommandé d’activer la stratégie uniquement lorsque le marché est clairement en tendance.
Paramètre SensibilitéLa performance de la stratégie est sensible aux paramètres de WaveTrend (n1 = 10, n2 = 21) et aux paramètres de stop loss. Les paramètres trop lâches peuvent entraîner des arrêts trop tardifs et les paramètres trop serrés peuvent entraîner une sortie prématurée d’une tendance favorable.
Risques liés à la liquidité: Le code utilise par défaut la quantité relative de fonds ((10%) pour la transaction, mais cela peut entraîner une augmentation des points de glissement ou des difficultés de transaction dans les marchés à faible liquidité. La taille de la position doit être ajustée en fonction de la liquidité des variétés de transactions réelles.
Demander une dépendance à des données externesLa stratégie consiste à utiliser la fonction request.security () pour obtenir des données à des périodes plus longues, ce qui peut entraîner des retards ou des risques d’inactivité des données sur certaines plateformes de négociation. Il faut s’assurer que l’environnement de négociation prend en charge les demandes de données à des périodes plus longues.
Ajustement des paramètres dynamiques: les stratégies actuelles utilisent des paramètres WaveTrend et des stop ratios fixes, il est possible d’envisager d’ajuster ces paramètres en fonction de la volatilité du marché (comme l’ATR). Par exemple, augmenter la distance de stop dans un environnement à forte volatilité et resserrer le stop dans un environnement à faible volatilité pour s’adapter aux différentes conditions du marché.
Filtrage d’intensité de la tendance à la hausseIl est possible d’ajouter l’ADX ou un indicateur similaire pour mesurer la force de la tendance et d’exécuter des transactions uniquement lorsque la force de la tendance dépasse une certaine marge, afin d’éviter une survente des transactions dans les marchés à tendance faible ou à la traîne.
Optimiser le choix du délaiLes stratégies actuelles utilisent des délais de 15, 30 et 60 minutes, permettant de trouver la combinaison optimale de délais par analyse de rétroaction ou d’ajuster les délais en fonction des caractéristiques des différentes variétés de transactions.
Confirmation de la quantité ajoutée: intégrer les indicateurs de volume de transactions dans les conditions d’entrée, s’assurer que les transactions ne soient prises en compte que dans les tendances soutenues par le volume de transactions, améliorer la qualité du signal.
Amélioration du mécanisme de sortie: les sorties en cours dépendent principalement des déclencheurs de stop-loss, on peut considérer l’ajout d’objectifs de profit ou de signaux de revers basés sur l’indicateur WaveTrend lui-même comme condition de sortie active, plutôt que de dépendre uniquement de stop-loss passif.
Ajout de logique de gestion de positionLes stratégies actuelles utilisent une gestion de fonds à pourcentage fixe, et peuvent envisager de modifier dynamiquement la taille des positions en fonction de la volatilité ou de l’intensité des signaux, d’augmenter les positions dans des transactions plus sûres, et de réduire les marges de risque dans des transactions plus incertaines.
La stratégie de suivi des tendances en ondes multi-temporelles est un système de suivi des tendances bien conçu, qui capture efficacement les tendances du marché et maîtrise les risques grâce à la synergie des indicateurs WaveTrend multi-temporels, combinée à un mécanisme de suivi des pertes flexible. Les principaux avantages de la stratégie résident dans sa vision globale du marché et sa méthode de gestion des risques dynamique, mais elle peut être confrontée à des défis dans les marchés en mouvement.
/*backtest
start: 2024-07-07 00:00:00
end: 2024-11-28 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("WT-FLOW: MTF WaveTrend Trend-Follower", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// === WaveTrend Fonksiyonu ===
waveTrend(_src, _n1, _n2) =>
esa = ta.ema(_src, _n1)
d = ta.ema(math.abs(_src - esa), _n1)
ci = (_src - esa) / (0.015 * d)
wt1 = ta.ema(ci, _n2)
wt2 = ta.sma(wt1, 4)
[wt1, wt2]
// === Giriş Fiyatı ve Maksimum Kazanç Değişkenleri ===
var float longEntryPrice = na
var float shortEntryPrice = na
var float maxGainLong = 0.0
var float maxGainShort = 0.0
var int longEntryBar = na
var int shortEntryBar = na
var string currentPosition = ""
// === WT Değerlerini Al (Farklı Zaman Dilimleri) ===
var int n1 = 10
var int n2 = 21
ap = hlc3
[wt1_15, wt2_15] = waveTrend(ap, n1, n2)
[wt1_30, wt2_30] = request.security(syminfo.tickerid, "30", waveTrend(ap, n1, n2))
[wt1_60, wt2_60] = request.security(syminfo.tickerid, "60", waveTrend(ap, n1, n2))
// === Kullanıcı Girdileri: Trailing Stop Parametreleri ===
marginStopPerc = input.float(2.0, "Marjinal Stop (%)")
trailTriggerPerc = input.float(1.5, "Trailing Tetikleyici (%)")
trailFollowPerc = input.float(0.8, "Trailing Takip (%)")
trailMaxDropPerc = input.float(3.0, "Maksimum Düşüş (%)")
// === ATR için tr hesaplaması ===
tr = ta.tr(true)
// === Sinyal Koşulları ===
trendUp = wt1_30 > wt2_30
trendDown = wt1_30 < wt2_30
entryLong = ta.crossover(wt1_15, wt2_15) and wt1_15 > -60 and trendUp
entryShort = ta.crossunder(wt1_15, wt2_15) and wt1_15 < 20 and trendDown
// === Pozisyon Girişleri ===
if entryLong and currentPosition != "Long"
strategy.entry("Long", strategy.long)
longEntryPrice := close
maxGainLong := 0.0
longEntryBar := bar_index
currentPosition := "Long"
label.new(bar_index, high + 2 * tr, "🟢 Giriş Long #" + str.tostring(bar_index), style=label.style_label_up, color=color.green, textcolor=color.white)
if entryShort and currentPosition != "Short"
strategy.entry("Short", strategy.short)
shortEntryPrice := close
maxGainShort := 0.0
shortEntryBar := bar_index
currentPosition := "Short"
label.new(bar_index, low - 2 * tr, "🔴 Giriş Short #" + str.tostring(bar_index), style=label.style_label_down, color=color.red, textcolor=color.white)
// === Trailing Stop ve Marjinal Stop Seviyeleri ===
if currentPosition == "Long" and not na(longEntryPrice)
gainFromEntry = (close - longEntryPrice) / longEntryPrice * 100
maxGainLong := math.max(maxGainLong, gainFromEntry)
trailTriggerReached = gainFromEntry >= trailTriggerPerc
trailStop = close * (1 - trailFollowPerc / 100)
dropStop = longEntryPrice * (1 + (maxGainLong - trailMaxDropPerc) / 100)
finalStop = trailTriggerReached ? math.max(trailStop, dropStop) : longEntryPrice * (1 - marginStopPerc / 100)
if close <= finalStop
strategy.close("Long")
label.new(bar_index, low - 2 * tr, "❅ Çıkış Long #" + str.tostring(longEntryBar), style=label.style_label_down, color=color.red, textcolor=color.white)
longEntryPrice := na
longEntryBar := na
currentPosition := ""
if currentPosition == "Short" and not na(shortEntryPrice)
gainFromEntryShort = (shortEntryPrice - close) / shortEntryPrice * 100
maxGainShort := math.max(maxGainShort, gainFromEntryShort)
trailTriggerReachedShort = gainFromEntryShort >= trailTriggerPerc
trailStopShort = close * (1 + trailFollowPerc / 100)
dropStopShort = shortEntryPrice * (1 - (maxGainShort - trailMaxDropPerc) / 100)
finalStopShort = trailTriggerReachedShort ? math.min(trailStopShort, dropStopShort) : shortEntryPrice * (1 + marginStopPerc / 100)
if close >= finalStopShort
strategy.close("Short")
label.new(bar_index, high + 2 * tr, "❄ Çıkış Short #" + str.tostring(shortEntryBar), style=label.style_label_up, color=color.green, textcolor=color.white)
shortEntryPrice := na
shortEntryBar := na
currentPosition := ""