La stratégie de négociation de la moyenne mobile double génère des signaux de négociation en calculant les moyennes mobiles rapides et lentes et en surveillant les croisements. Lorsque la moyenne mobile rapide dépasse la moyenne mobile lente, une position longue est prise. Lorsque la moyenne mobile rapide dépasse la moyenne mobile lente, une position courte est prise.
La stratégie fixe d'abord les longueurs de la moyenne mobile rapide maFastLength et de la moyenne mobile lente maSlowLength. Elle calcule ensuite la moyenne mobile rapide fastMA et la moyenne mobile lente slowMA. La moyenne mobile rapide réagit plus rapidement aux changements de prix et est utilisée pour juger de la tendance actuelle, tandis que la moyenne mobile lente réagit plus lentement et est utilisée pour déterminer la direction de la tendance.
Lorsque la moyenne mobile rapide dépasse la moyenne mobile lente, un signal d'entrée long goLong() est généré.
La stratégie peut être réglée sur long seulement, short seulement, ou permettre à la fois des transactions longues et courtes.
En mode long uniquement, les positions longues sont entrées sur le signal goLong() et sorties sur le signal killLong().
En mode court uniquement, les positions courtes sont entrées sur le signal killLong() et sorties sur le signal goLong().
En mode swap, les positions longues sont entrées sur goLong(), fermées et inversées à court sur killLong().
La stratégie comprend également un stop loss, un stop trailing, des messages et d'autres fonctionnalités optionnelles.
Simple et facile à mettre en œuvre.
Flexibilité pour aller long, court ou les deux.
Fonctionnalités optionnelles de stop loss et de stop trailing.
Messagerie personnalisable pour alerter les transactions.
Sensible aux changements de tendance sur le marché.
Les paramètres réglables s'adaptent aux différents marchés.
Peut générer des échanges excessifs sur des marchés instables ou variés.
Lent à réagir aux nouvelles soudaines.
La sélection des paramètres a une incidence sur les performances de la stratégie.
Il faut suivre les signaux strictement, éviter les transactions discrétionnaires.
Les coûts de négociation peuvent nuire aux bénéfices s'ils ne sont pas pris en compte.
Ajoutez des filtres comme RSI pour éviter les faux signaux.
Mettre en œuvre l'optimisation des paramètres pour trouver les meilleurs paramètres.
Utilisez des arrêts dynamiques pour verrouiller les profits et les ajuster.
Incorporer l'apprentissage automatique pour aider à la prédiction des tendances.
Optimiser la messagerie pour les habitudes commerciales individuelles.
La stratégie des moyennes mobiles doubles est relativement simple et utile pour capturer les fortes tendances. Cependant, il faut faire attention à éviter les coupes de fouet dans les environnements à faible tendance. Paramètres de réglage fin et ajout d'indicateurs ou d'améliorations auxiliaires peuvent améliorer encore la robustesse et l'adaptabilité.
/*backtest start: 2022-10-20 00:00:00 end: 2023-10-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("SMA Strategy", shorttitle="SMA Strategy", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // === Inputs === // short ma maFastSource = input(defval=close, title="Fast MA Source") maFastLength = input(defval=3, title="Fast MA Period", minval=1) // long ma maSlowSource = input(defval=close, title="Slow MA Source") maSlowLength = input(defval=9, title="Slow MA Period", minval=1) // Trade direction shorting = input(defval=false, title="Short only?") longonly = input(defval=true, title="Long only?") swapping = input(defval=false, title="Swap orders?") // risk management useStop = input(defval=false, title="Use Initial Stop Loss?") slPoints = input(defval=25, title="Initial Stop Loss Points", minval=1) useTS = input(defval=false, title="Use Trailing Stop?") tslPoints = input(defval=120, title="Trail Points", minval=1) useTSO = input(defval=false, title="Use Offset For Trailing Stop?") tslOffset = input(defval=20, title="Trail Offset Points", minval=1) // Messages for buy and sell message_long_entry = input("Long entry message", title="Long entry message") message_long_exit = input("Long exit message", title="Long exit message") message_short_entry = input("Short entry message", title="Short entry message") message_short_exit = input("Short exit message", title="Short exit message") // Calculate start/end date and time condition startDate = input(timestamp("2021-01-01T00:00:00"), type = input.time) finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time) time_cond = true // === Vars and Series === fastMA = sma(maFastSource, maFastLength) slowMA = sma(maSlowSource, maSlowLength) plot(fastMA, color=color.blue) plot(slowMA, color=color.purple) goLong() => crossover(fastMA, slowMA) killLong() => crossunder(fastMA, slowMA) // Long only if longonly strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry) strategy.close("Buy", when=killLong() and time_cond, alert_message = message_long_exit) // Short only if shorting strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry) strategy.close("Sell", when=goLong() and time_cond, alert_message = message_short_exit) // Order Swapping if swapping strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry) strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry) if useStop strategy.exit("XLS", from_entry="Buy", stop=strategy.position_avg_price / 1.08, alert_message = message_long_exit) strategy.exit("XSS", from_entry="Sell", stop=strategy.position_avg_price * 1.08, alert_message = message_short_exit)