Stratégie de croisement des moyennes mobiles

Auteur:ChaoZhang est là., Date: 2023-09-18 17h35 et 37 min
Les étiquettes:

Résumé

La stratégie de croisement des moyennes mobiles est une stratégie de suivi de tendance basée sur le croisement des moyennes mobiles comme signaux de trading.

Principe de stratégie

Les principaux principes de cette stratégie sont les suivants:

  1. Calculer deux moyennes mobiles, une rapide et une lente, peut choisir SMA ou EMA.

  2. Allez long quand la ligne rapide traverse au-dessus de la ligne lente, position proche quand la ligne rapide traverse au-dessous de la ligne lente.

  3. Les signaux de trading peuvent être des signaux de rupture de prix ou des signaux de croisement de moyenne mobile.

  4. Peut définir la période d'exécution de la stratégie.

  5. On ne peut aller long que sur les marchés haussiers et court sur les marchés baissiers.

  6. Optimiser les paramètres des moyennes mobiles par le backtesting pour différentes périodes.

La stratégie utilise la tendance suivant la capacité des moyennes mobiles. Lorsque le MA à court terme franchit au-dessus du MA à long terme, il indique une tendance à la hausse, devrait aller long. vice versa, tendance à la baisse, devrait réduire la position.

Analyse des avantages

Les principaux avantages de cette stratégie:

  1. Principe simple, facile à mettre en œuvre, signaux commerciaux clairs.

  2. Peut suivre efficacement les tendances et saisir les opportunités commerciales en temps opportun.

  3. Peut combiner différents paramètres d'AM pour différents environnements de marché.

  4. Peut choisir seulement long ou seulement court pour éviter des opérations inverses incertaines.

  5. Peut définir une stratégie de temps d'exécution pour éviter certaines périodes.

  6. Peut améliorer continuellement la stratégie grâce à l'optimisation des paramètres.

Analyse des risques

Les principaux risques de cette stratégie:

  1. Préoccupé par les signaux erronés, évitez les transactions trop fréquentes.

  2. Les performances dépendent des paramètres de l'AM, une mauvaise sélection peut entraîner des pertes.

  3. Il y a un certain retard, évitez l'entrée prématurée et la sortie retardée.

  4. Ne convient pas à des environnements de marché limités à une plage.

  5. Les croisements MA ont un certain hasard, ne peuvent pas éviter complètement les pertes.

Les risques peuvent être réduits par la confirmation du volume, l'optimisation des paramètres ou l'utilisation avec d'autres indicateurs.

Directions d'optimisation

Cette stratégie peut être optimisée dans les aspects suivants:

  1. Ajouter un filtre de pente comme % ((Ligne - ShortMa) /ShortMa) / ((Ligne - LongMa) /LongMa).

  2. Optimiser les périodes moyennes mobiles, tester différentes combinaisons.

  3. Ajouter des indicateurs tels que MACD ou RSI pour une confirmation multiple.

  4. Mettre en place un stop loss pour limiter les pertes d'une seule transaction.

  5. Distinguer les marchés tendance et les marchés variants pour une utilisation conditionnelle.

  6. Testez différentes périodes de rétention pour trouver le schéma optimal.

Résumé

La stratégie de croisement des moyennes mobiles est une stratégie simple et pratique de suivi des tendances. Les avantages sont une mise en œuvre facile et un suivi efficace des tendances. Les inconvénients sont le retard et la propension à de faux signaux. La stratégie peut être améliorée grâce à l'optimisation des paramètres et au filtrage des indicateurs pour obtenir de meilleures performances sur les marchés à forte tendance.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gliese581d

//@version=4
strategy(title="Moving Averages Testing", overlay=true, precision=2, calc_on_every_tick=false, max_bars_back=5000, pyramiding=2,  
 default_qty_type=strategy.percent_of_equity, default_qty_value=50, commission_type=strategy.commission.percent, initial_capital=10000)


//SETTINGS

longs_on = input(title="Long Trades enabled", defval=true)
shorts_on = input(title="Short Trades enabled", defval=true)

long_cond = input(title="Buy/Long Crossover Condition", defval="price x MA1", options=["price x MA1", "price x MA2", "MA1 x MA2"])
short_cond = input(title="Sell/Short Crossunder Condition", defval="price x MA2", options=["price x MA1", "price x MA2", "MA1 x MA2"])

ma1_type = input(title="Moving Average 1 Type", defval="SMA", options=["SMA", "EMA"])
ma1_len = input(defval=20, title="Moving Average 1 Len", type=input.integer, minval=1, maxval=1000, step=1)
ma2_type = input(title="Moving Average 2 Type", defval="SMA", options=["SMA", "EMA"])
ma2_len = input(defval=30, title="Moving Average 2 Len", type=input.integer, minval=1, maxval=1000, step=1)


//MOVING AVERAGES

ma_1 = ma1_type == "EMA" ? ema(close, ma1_len) : sma(close, ma1_len)
ma_2 = ma2_type == "EMA" ? ema(close, ma2_len) : sma(close, ma2_len)


//STRATEGY

//trade entries
long_entry = long_cond == "price x MA1" ? crossover(close, ma_1) : long_cond == "price x MA2" ? crossover(close, ma_2) : long_cond == "MA1 x MA2" ? crossover(ma_1, ma_2) : false
short_entry = short_cond == "price x MA1" ? crossunder(close, ma_1) : short_cond == "price x MA2" ? crossunder(close, ma_2) : short_cond == "MA1 x MA2" ? crossunder(ma_1, ma_2) : false

start_month = input(defval=4, title="Strategy Start Month", type=input.integer, minval=1, maxval=12, step=1)
start_year = input(defval=2018, title="Strategy Start Year", type=input.integer, minval=2000, maxval=2025, step=1)
end_month = input(defval=12, title="Strategy End Month", type=input.integer, minval=1, maxval=12, step=1)
end_year = input(defval=2020, title="Strategy End Year", type=input.integer, minval=2000, maxval=2025, step=1)

in_time = true

strategy.entry("Long", strategy.long, when=longs_on and in_time and long_entry)
strategy.close("Long", when=longs_on and not shorts_on and short_entry)

strategy.entry("Short", strategy.short, when=shorts_on and in_time and short_entry)
strategy.close("Short", when=shorts_on and not longs_on and long_entry)


//PLOTTING

//color background
last_entry_was_long = nz(barssince(long_entry)[1], 5000) < nz(barssince(short_entry)[1], 5000)
bgcol = (longs_on and last_entry_was_long) ? color.green : (shorts_on and not last_entry_was_long) ? color.red : na
bgcolor(color=bgcol, transp=90)

plot((long_cond == "price x MA1" or long_cond == "MA1 x MA2") or (short_cond == "price x MA1" or short_cond == "MA1 x MA2") ? ma_1 : na, color=color.blue)
plot((long_cond == "price x MA2" or long_cond == "MA1 x MA2") or (short_cond == "price x MA2" or short_cond == "MA1 x MA2") ? ma_2 : na, color=color.black)
plotshape(long_entry, style=shape.triangleup, location=location.belowbar, color=color.green)
plotshape(short_entry, style=shape.triangledown, location=location.abovebar, color=color.red)

Plus de