Cette stratégie utilise les croisements de moyennes mobiles comme signaux de négociation, combinés à l'indicateur de volatilité BB et à un indicateur de dynamique personnalisé pour la filtration, dans le but d'améliorer la fiabilité des signaux de croisement de MA et de réduire les faux signaux.
Utilisez une EMA à 50 périodes et une SMA à 200 périodes pour former des signaux de croix dorée et de croix de mort.
Lorsque le prix est en hausse, il est nécessaire que le prix soit supérieur à la ligne de 200 jours et que la valeur de l'indicateur de dynamique personnalisé soit inférieure à 25 pour générer des signaux d'achat.
Lorsque le prix est en baisse, il est nécessaire que le prix soit inférieur à la ligne de 200 jours et que la valeur de l'indicateur de dynamique personnalisé soit supérieure à 75 pour générer des signaux de vente.
L'indicateur de dynamique personnalisé cartographie la ligne médiane et la distance de bande BB dans une plage de 0 à 100 en fonction des maxima et des minima historiques.
L'indicateur de dynamique reflète la volatilité relative des prix, le filtrage des seuils aide à réduire les faux croisements.
Utiliser les points forts de l'EMA et de l'SMA pour détecter les tendances à moyen et long terme.
L'augmentation de la filtration avec indicateur de momentum améliore la fiabilité et réduit les faux signaux.
La distance de bande BB reflète l'intensité de volatilité, la normalisation historique évite la dépendance des paramètres.
Les périodes EMA, SMA et seuil de dynamique sont personnalisables et peuvent être adaptées à différents environnements de marché.
Une logique simple avec une flexibilité d'optimisation, une grande praticité.
L'EMA et la SMA ont un effet de retard, peuvent manquer des opportunités à court terme.
Une tendance de nature inappropriée pour les marchés à fourchette.
Le seuil de dynamique nécessite un backtesting itératif pour un paramètre optimal, il y a des risques de surajustement.
Les systèmes à plus long terme offrent des rendements absolus stables mais potentiellement limités.
Peut raccourcir les périodes d'AM ou ajouter des indicateurs complémentaires pour améliorer l'adaptabilité.
Testez différentes combinaisons d'AM pour obtenir les paramètres optimaux.
Ajouter des indicateurs complémentaires tels que MACD, KD pour une validation supplémentaire.
Optimisez les paramètres de l'indicateur de momentum comme la période de rétrospective, la plage de cartographie.
Incorporer le stop loss pour contrôler les risques.
Ajustez les paramètres spécifiques au symbole à l'aide de l'extraction des fonctionnalités d'apprentissage automatique.
Ajouter des indicateurs de volume pour éviter les signaux de croisement déraisonnables.
Cette stratégie combine les atouts du suivi des tendances à long terme et du filtrage du seuil de double dynamique pour une fiabilité et une valeur pratiques élevées. Des améliorations supplémentaires sont possibles grâce à l'optimisation des paramètres et aux techniques complémentaires. Le concept innovant fournit des informations précieuses pour d'autres systèmes de tendance.
/*backtest start: 2023-10-26 00:00:00 end: 2023-10-27 13:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="EMA Difference Mapping with Trades", shorttitle="EMA Diff Map", overlay=false) // Inputs emaLength = input(20, "EMA Length") stdDevLength = input(2, "Standard Deviation Length") priceSource = close takeProfitPoints = input(1000, title="Take Profit (in Points)") stopLossPoints = input(2500, title="Stop Loss (in Points)") // Calculate EMA ema = ema(priceSource, emaLength) // Calculate Standard Deviation stdDev = stdev(priceSource, stdDevLength) // Calculate differences diff1 = (ema + stdDev) - ema diff2 = ema - (ema - stdDev) // Calculate min and max differences from last year lookbackPeriod = 504 // Number of trading days in a year minDiff1 = lowest(diff1, lookbackPeriod) maxDiff1 = highest(diff1, lookbackPeriod) minDiff2 = lowest(diff2, lookbackPeriod) maxDiff2 = highest(diff2, lookbackPeriod) // Map differences based on requirements mappedDiff1 = 50 + 50 * ((diff1 - minDiff1) / (maxDiff1 - minDiff1)) mappedDiff2 = 50 - 50 * ((diff2 - minDiff2) / (maxDiff2 - minDiff2)) // Combine mapped differences into a single line mappedLine = if close > ema mappedDiff1 else mappedDiff2 // Plot 'mappedLine' in the main chart area conditionally plot(mappedLine, title="EMA Difference Mapping", color=(close > ema ? color.blue : na), style=plot.style_line, linewidth=2) // Calculate the 50EMA and 200SMA ema50 = ema(close, 50) sma200 = sma(close, 200) // Plot the 50EMA and 200SMA on the main chart plot(ema50, color=color.blue, title="50 SMA", linewidth=2) plot(sma200, color=color.red, title="200 SMA", linewidth=2) // Initialize trade variables var bool waitingForBuy = na var bool waitingForSell = na var bool buyConditionMet = false var bool sellConditionMet = false if not sellConditionMet and crossunder(ema50, sma200) sellConditionMet := true waitingForBuy := false if sellConditionMet waitingForSell := true sellConditionMet := false if waitingForSell and close < sma200 and mappedLine > 75 strategy.entry("Sell", strategy.short) strategy.exit("Sell Exit", "Sell", profit=takeProfitPoints, loss=stopLossPoints) waitingForSell := false // Define the strategy conditions and execute trades if not buyConditionMet and crossover(ema50, sma200) buyConditionMet := true waitingForSell := false if buyConditionMet waitingForBuy := true buyConditionMet := false if waitingForBuy and close > sma200 and mappedLine < 25 strategy.entry("Buy", strategy.long) strategy.exit("Buy Exit", "Buy", profit=takeProfitPoints, loss=stopLossPoints) waitingForBuy := false