Système de croisement des moyennes mobiles

Auteur:ChaoZhang est là., Date: 2024-01-03 16h22 et 18h
Les étiquettes:

img

Résumé

Il s'agit d'une stratégie de suivi de tendance basée sur les signaux de croisement de la moyenne mobile. Lorsque la moyenne mobile rapide franchit le niveau supérieur de la moyenne mobile lente depuis le bas, un signal d'achat est généré. Lorsque la moyenne mobile rapide franchit le niveau inférieur de la moyenne mobile lente depuis le haut, un signal de vente est généré.

La logique de la stratégie

La stratégie utilise deux moyennes mobiles, une moyenne mobile simple de 20 périodes et une moyenne mobile simple de 30 périodes.

Les moyennes mobiles elles-mêmes servent d'indicateurs de tendance, représentant efficacement la direction de la tendance du marché. Le principe de croisement permet à la stratégie de capturer les points d'inversion de tendance en temps opportun et de générer des signaux de trading. Les périodes de 20 et 30 jours sont définies de manière appropriée pour refléter la tendance du marché sans être trop sensibles au bruit.

Analyse des avantages

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

  1. La logique est simple et claire, facile à comprendre et à mettre en œuvre, adaptée aux débutants;
  2. La négociation selon la tendance évite les positions contraires à la tendance et les pertes inutiles;
  3. Les moyennes mobiles ont un effet de filtrage pour éliminer le bruit du marché et éviter les faux signaux;
  4. Les paramètres sont raisonnables pour ne pas provoquer une trop grande sensibilité.

Analyse des risques

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

  1. Les ordres de stop loss fréquents peuvent être déclenchés pendant la consolidation du marché lorsque le croisement des moyennes mobiles se produit fréquemment;
  2. Des bénéfices manqués en raison du retard des moyennes mobiles lors de fortes tendances;
  3. Les paramètres ne sont pas réglés de manière appropriée et peuvent affecter la stabilité.

Les solutions:

  1. Ajustez les périodes de moyenne mobile, utilisez des moyennes mobiles triangulaires, etc. pour lisser les courbes et réduire la fréquence de croisement;
  2. Utiliser d'autres indicateurs pour déterminer la tendance, éviter les transactions lors de la consolidation;
  3. Optimisez les paramètres pour trouver la meilleure combinaison.

Directions d'optimisation

Les principaux aspects pour optimiser la stratégie:

  1. Tester différents types de moyennes mobiles, telles que la moyenne mobile pondérée, la moyenne mobile triangulaire, etc.;
  2. Ajouter d'autres indicateurs techniques pour éviter les signaux lors de la consolidation;
  3. Incorporer d'autres techniques d'analyse comme les ondes d'Elliott, la théorie des canaux pour déterminer la tendance;
  4. Adopter des modèles d'apprentissage automatique pour optimiser dynamiquement les paramètres;
  5. Utilisez des outils quantiques et appliquez des techniques de prise de stop loss/profit pour affiner la gestion de l'argent.

Conclusion

Le système de croisement moyen mobile est une stratégie simple et efficace de suivi de tendance. La logique est claire et facile à comprendre, très adaptée aux débutants. Il génère des signaux de trading basés sur des croisements moyens mobiles et des profits du trading le long de la tendance. La stratégie peut être optimisée de plusieurs façons pour devenir plus stable et efficace.


/*backtest
start: 2023-12-03 00:00:00
end: 2024-01-02 00:00:00
period: 1h
basePeriod: 15m
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