Cette stratégie génère des signaux de trading basés sur le croisement de la moyenne mobile simple et de la moyenne mobile pondérée, combinés à un stop loss et à un take profit pour gérer les positions.
La logique de base consiste à calculer deux moyennes mobiles avec des périodes différentes, l'une est la moyenne mobile simple de 9 jours et l'autre est la moyenne mobile pondérée de 21 jours.
Après avoir reçu le signal, les ordres sont passés selon les ratios de stop loss et de take profit définis. Par exemple, si le ratio de stop loss est fixé à 5%, le prix de stop loss sera fixé à 95% du prix d'entrée. Si le ratio de take profit est de 5%, le prix de take profit sera fixé à 105% du prix d'entrée. Cela réalise la fusion de facteurs dynamiques (crossover moyen mobile décidant du moment de l'entrée et de la sortie) et de facteurs statiques (ratios de stop loss et de take profit fixes).
La stratégie combine des indicateurs techniques dynamiques et des paramètres de stratégie statiques, possédant les avantages des systèmes dynamiques et statiques. Les indicateurs techniques peuvent capturer dynamiquement les caractéristiques du marché, ce qui est bénéfique pour capturer les tendances.
Comparée aux systèmes purement dynamiques, cette stratégie est plus robuste dans la gestion des positions, ce qui réduit l'impact des décisions irrationnelles.
Les risques de cette stratégie proviennent principalement de deux aspects. Premièrement, la possibilité de signaux erronés des moyennes mobiles. Lorsque le marché est limité à une plage, les moyennes mobiles peuvent avoir des croisements fréquents, ce qui entraîne une stratégie déformée.
Deuxièmement, le risque que le stop loss et le take profit fixes ne puissent pas s'adapter à des conditions de marché extrêmes.
Les contre-mesures sont les suivantes: premièrement, éviter les nœuds de temps clés pour réduire la probabilité de signaux erronés; deuxièmement, activer des algorithmes de stop loss adaptatifs en fonction de la volatilité du marché et d'événements spéciaux, en ajustant le stop loss et le take profit avec le marché.
Cette stratégie peut être optimisée par les aspects suivants:
Test de différentes combinaisons de paramètres pour trouver les paramètres optimaux;
Ajouter des conditions de filtrage pour éviter les signaux non valides;
Appliquer des algorithmes d'arrêt de perte adaptatifs pour suivre le marché;
Incorporer d'autres indicateurs pour juger de la force de la tendance, en évitant les marchés à fourchette;
Utiliser des méthodes d'apprentissage automatique pour optimiser automatiquement les paramètres.
En testant des paramètres, en ajoutant des filtres, en améliorant les arrêts, en évaluant les tendances, etc., la stabilité et la rentabilité de la stratégie peuvent être encore améliorées.
La stratégie combine avec succès des indicateurs dynamiques et des paramètres statiques, équilibrant flexibilité et robustesse. Par rapport aux stratégies dynamiques et statiques pures, cette stratégie fonctionne mieux dans l'ensemble. Bien sûr, il y a encore une marge d'optimisation en ajustant les paramètres, en ajoutant des filtres, des arrêts adaptatifs, l'apprentissage automatique, etc., pour rendre la stratégie plus efficace.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("WMA vs MMA Crossover Strategy with SL/TP", shorttitle="WMA_MMA_Cross_SL_TP", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // Définition des périodes pour les moyennes mobiles wmaLength = input.int(9, title="WMA Length") mmaLength = input.int(21, title="MMA Length") // Paramètres de Stop Loss et Take Profit en pourcentage stopLossPercentage = input.float(5, title="Stop Loss (%)") / 100 takeProfitPercentage = input.float(5, title="Take Profit (%)") / 100 // Calcul des moyennes mobiles wmaValue = ta.wma(close, wmaLength) mmaValue = ta.sma(close, mmaLength) // Conditions pour les signaux d'achat et de vente buySignal = ta.crossover(wmaValue, mmaValue) sellSignal = ta.crossunder(wmaValue, mmaValue) // Génération des ordres en fonction des signaux if buySignal strategy.entry("Buy", strategy.long) strategy.exit("Exit Buy", "Buy", stop=strategy.position_avg_price * (1 - stopLossPercentage), limit=strategy.position_avg_price * (1 + takeProfitPercentage)) if sellSignal strategy.entry("Sell", strategy.short) strategy.exit("Exit Sell", "Sell", stop=strategy.position_avg_price * (1 + stopLossPercentage), limit=strategy.position_avg_price * (1 - takeProfitPercentage)) // Affichage des moyennes mobiles sur le graphique plot(wmaValue, color=color.blue, title="WMA") plot(mmaValue, color=color.red, title="MMA") // Affichage des signaux sur le graphique pour référence plotshape(series=buySignal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY") plotshape(series=sellSignal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL")