Stratégie de négociation des moyennes mobiles doubles rapides et lentes

Auteur:ChaoZhang est là., Date: 2023-10-27 16:41:24 Je suis désolé
Les étiquettes:

img

Résumé

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 logique de la stratégie

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.

Les avantages

  1. Simple et facile à mettre en œuvre.

  2. Flexibilité pour aller long, court ou les deux.

  3. Fonctionnalités optionnelles de stop loss et de stop trailing.

  4. Messagerie personnalisable pour alerter les transactions.

  5. Sensible aux changements de tendance sur le marché.

  6. Les paramètres réglables s'adaptent aux différents marchés.

Les risques

  1. Peut générer des échanges excessifs sur des marchés instables ou variés.

  2. Lent à réagir aux nouvelles soudaines.

  3. La sélection des paramètres a une incidence sur les performances de la stratégie.

  4. Il faut suivre les signaux strictement, éviter les transactions discrétionnaires.

  5. Les coûts de négociation peuvent nuire aux bénéfices s'ils ne sont pas pris en compte.

Améliorations

  1. Ajoutez des filtres comme RSI pour éviter les faux signaux.

  2. Mettre en œuvre l'optimisation des paramètres pour trouver les meilleurs paramètres.

  3. Utilisez des arrêts dynamiques pour verrouiller les profits et les ajuster.

  4. Incorporer l'apprentissage automatique pour aider à la prédiction des tendances.

  5. Optimiser la messagerie pour les habitudes commerciales individuelles.

Conclusion

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)



Plus de