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:
Calculer le prix moyen ap = (haut + bas + proche) / 3
Calculer l'EMA de n1 périodes de ap pour obtenir esa
Calculer l'EMA de la différence absolue entre ap et esa pour n périodes pour obtenir d
Comptez la ligne de tendance de l'onde: ci = (ap - esa) /(0.015*d)
Calculer l'EMA de ci sur n2 périodes pour obtenir la ligne de tendance de l'onde finale tci, c'est-à-dire wt1
Calculer la SMA à 4 périodes de wt1 pour obtenir wt2
Légines de niveau obLevel1/2 et osLevel1/2 suracheté/survendu
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
Ajouter une moyenne mobile emaFilter et un filtre de volumeFilter en tant que filtres pour éviter les faux signaux
Série de prises de bénéfices/arrêt des pertes après entrée en position de sortie
Les avantages:
La ligne de tendance de vague gère bien les transitions tendance/contre-tendance
Amélioration de la fiabilité grâce à des doubles filtres de moyenne mobile et de volume
Les paramètres multiples évitent les limitations d'un seul indicateur
Résultats de l'évaluation de la valeur ajoutée
Risques et limites:
Le choix des paramètres peut entraîner une mauvaise performance ou un surajustement
Aucune orientation définitive sur les paramètres optimaux
Ignore les conditions plus générales du marché
Risque de piqûres de fouet sur les marchés à plage/décalés
Manque de règles de sortie autres que la prise de profit/arrêt de perte
Des possibilités d'amélioration:
Paramètres d'essai à travers les délais/actifs pour trouver des valeurs optimales
Incorporer des indicateurs de volatilité pour éviter les régimes à faible volatilité
Ajouter des indicateurs comme le RSI pour améliorer la précision du signal
Construire un modèle d'apprentissage automatique pour trouver des paramètres adaptés optimaux
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)