Cette stratégie est une version améliorée de la stratégie de trading basée sur l'indicateur MACD. Elle combine les caractéristiques de suivi de tendance de l'indicateur MACD avec les idées de trading de momentum, générant des signaux de trading en analysant les différences entre les moyennes mobiles rapides et lentes.
Le noyau de cette stratégie est l'indicateur MACD, qui consiste en la différence entre la moyenne mobile rapide (EMA) et la moyenne mobile lente (EMA). Lorsque l'EMA rapide traverse la moyenne mobile lente, il génère un signal d'achat ou de vente. Plus précisément, lorsque la ligne MACD traverse la ligne de signal de bas en haut, elle génère un signal d'achat; lorsque la ligne MACD tombe en dessous de la ligne de signal de haut en bas, elle génère un signal de vente.
En plus des signaux de croisement MACD de base, la stratégie introduit également un mécanisme de confirmation de tendance. Elle compare avec la moyenne mobile simple (SMA) pour déterminer si le marché actuel est en hausse ou en baisse.
En outre, la stratégie prolonge la fenêtre de temps de confirmation du signal. C'est-à-dire que seulement lorsque le chandelier actuel satisfait aux conditions d'achat ou de vente et que le chandelier précédent satisfait également aux mêmes conditions, la transaction correspondante sera exécutée. Cela améliore encore la fiabilité des signaux.
Enfin, la stratégie fixe des niveaux de stop-loss et de take-profit en pourcentage. Une fois qu'une transaction est effectuée, les prix de stop-loss et de take-profit seront calculés en fonction du prix d'entrée, et la position sera automatiquement fermée une fois que ces prix seront atteints. Cela aide à contrôler le risque et le rendement d'une seule transaction.
Cette stratégie est une stratégie de trading améliorée basée sur l'indicateur MACD. Grâce à la confirmation de tendance, la confirmation du délai de signal, le stop-loss fixe et le take-profit, et d'autres méthodes, elle améliore la robustesse et le potentiel de profit de la stratégie. Cependant, elle fait également face à des risques dans l'optimisation des paramètres, la reconnaissance de tendance, les indicateurs uniques, les données de backtesting, et d'autres aspects.
/*backtest start: 2023-05-08 00:00:00 end: 2024-05-13 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © sligetit //@version=5 strategy("Improved MACD_VXI Strategy", overlay=true) // Calculate MACD and Signal Line fastLength = input.int(13, title="Fast Length") slowLength = input.int(21, title="Slow Length") signalLength = input.int(8, title="Signal Length") fastMA = ta.ema(close, fastLength) slowMA = ta.ema(close, slowLength) macd = fastMA - slowMA signal = ta.sma(macd, signalLength) // Plot MACD and Signal Line plot(macd, color=color.red, linewidth=1) plot(signal, color=color.blue, linewidth=2) // Calculate Cross Signals with Trend Confirmation smaPeriod = input.int(50, title="SMA Period") sma = ta.sma(close, smaPeriod) trendUp = close > sma trendDown = close < sma crossOver = ta.crossover(signal, macd) crossUnder = ta.crossunder(signal, macd) buySignal = crossOver and trendUp sellSignal = crossUnder and trendDown // Execute Buy/Sell Operations if buySignal strategy.entry("Buy", strategy.long) if sellSignal strategy.entry("Sell", strategy.short) // Extend Signal Confirmation Time Window longSignal = crossOver[1] and trendUp[1] shortSignal = crossUnder[1] and trendDown[1] if longSignal strategy.entry("Buy", strategy.long) if shortSignal strategy.entry("Sell", strategy.short) // Set Fixed Percentage Stop Loss and Take Profit stopLossPercent = input.float(1, title="Stop Loss (%)") / 100 takeProfitPercent = input.float(2, title="Take Profit (%)") / 100 stopLossPrice = strategy.position_avg_price * (1 - stopLossPercent) takeProfitPrice = strategy.position_avg_price * (1 + takeProfitPercent) strategy.exit("Stop Loss/Profit", "Buy", stop=stopLossPrice, limit=takeProfitPrice) strategy.exit("Stop Loss/Profit", "Sell", stop=stopLossPrice, limit=takeProfitPrice)