Stratégie inverse d'inversion moyenne basée sur la moyenne mobile

Auteur:ChaoZhang est là., Date: 21-12-2023 à 15 h 45 min 23 s
Les étiquettes:

img

La stratégie est appelée Mean Reversion Reverse Strategy Based on Moving Average. L'idée principale est d'acheter lorsque le prix dépasse les moyennes mobiles clés et de réaliser des bénéfices lorsque les objectifs prédéfinis sont atteints.

Le principe principal de cette stratégie est de saisir les opportunités de rebond sur les marchés à plage en utilisant l'inversion des moyennes mobiles à court terme. Plus précisément, lorsque les prix franchissent les moyennes mobiles à plus long cycle (telles que les moyennes mobiles à 20 jours et à 50 jours) et montrent des signes de forte survente, les prix ont tendance à rebondir dans une certaine mesure en raison de la caractéristique de réversion moyenne des fluctuations du marché. À ce moment-là, si les moyennes mobiles à cycle plus court (telles que les moyennes mobiles à 10 jours) montrent un signal d'inversion à la hausse, ce serait un bon moment pour acheter. Dans cette stratégie, il achètera lorsque le prix de clôture est inférieur à la moyenne mobiles à 20 jours alors qu'il est supérieur à la moyenne mobiles à 50 jours, afin de capturer son rebond avec une inversion de la moyenne mobiles à court terme.

La logique d'entrée spécifique est la suivante: acheter 1 lot lorsque le prix franchit la barre des 20 jours, ajouter 1 lot lorsque le prix franchit la barre des 50 jours, continuer à ajouter 1 lot lorsque le prix franchit la barre des 100 jours et ajouter jusqu'à 1 lot lorsque le prix franchit la barre des 200 jours, pour un maximum de 4 lots.

Analyse des avantages

  1. Identifier efficacement les opportunités de rebond à court terme en utilisant les caractéristiques d'inversion des moyennes mobiles
  2. Réduire les risques d'un point unique par des ordres pyramidaux
  3. Sécuriser les bénéfices en fixant des objectifs de prise de profit
  4. Évitez les fausses ruptures en utilisant des filtres de prix ouverts et de prix bas précédents

Analyse des risques

  1. Les pertes augmenteraient si le marché continuait à baisser.
  2. Les signaux MA peuvent donner de faux signaux, entraînant des pertes
  3. Il peut ne pas réaliser totalement ou partiellement des bénéfices si l'objectif de profit n'est pas atteint.

Directions d'optimisation

  1. Testez la rentabilité et la stabilité sous différents paramètres
  2. Considérez la combinaison d'autres indicateurs tels que MACD, KD pour décider des entrées
  3. Choisir les périodes d'AM appropriées en fonction des caractéristiques des différents produits
  4. Introduire des algorithmes d'apprentissage automatique pour optimiser dynamiquement les paramètres

Résumé

En général, il s'agit d'une stratégie de trading de MA classique et universelle. Elle utilise correctement la fonction de lissage des MA, combinée à plusieurs MA pour identifier les opportunités d'achat à court terme. Elle contrôle les risques en pyramidant les ordres et en prenant des bénéfices en temps opportun. Mais sa réponse aux événements du marché comme les nouvelles politiques importantes peut être plus passive. C'est quelque chose qui peut être optimisé davantage. Dans l'ensemble, avec des améliorations appropriées dans l'optimisation des paramètres et le contrôle des risques, cette stratégie peut obtenir des rendements excessifs constants.


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

//@version=5
strategy("EMA_zorba1", shorttitle="zorba_ema", overlay=true)

// Input parameters
qt1 = input.int(5, title="Quantity 1", minval=1)
qt2 = input.int(10, title="Quantity 2", minval=1)
qt3 = input.int(15, title="Quantity 3", minval=1)
qt4 = input.int(20, title="Quantity 4", minval=1)
ema10 = ta.ema(close, 10)
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema100 = ta.ema(close, 100)
ema200 = ta.ema(close, 200)

// Date range filter
start_date = timestamp(year=2021, month=1, day=1)
end_date = timestamp(year=2024, month=10, day=27)
in_date_range = true

// Profit condition
profit_percentage = input(1, title="Profit Percentage")  // Adjust this value as needed

// Pyramiding setting
pyramiding = input.int(2, title="Pyramiding", minval=1, maxval=10)

// Buy conditions
buy_condition_1 = in_date_range and close < ema20 and close > ema50 and close < open and close < low[1]
buy_condition_2 = in_date_range and close < ema50 and close > ema100 and close < open and close < low[1]
buy_condition_3 = in_date_range and close < ema100 and close > ema200 and close < open and close < low[1]
buy_condition_4 = in_date_range and close < ema200 and close < open and close < low[1]

// Exit conditions
profit_condition = strategy.position_avg_price * (1 + profit_percentage / 100) <= close
exit_condition_1 = in_date_range and (close > ema10 and ema10 > ema20 and ema10 > ema50 and ema10 > ema100 and ema10 > ema200 and close < open) and profit_condition and close < low[1] and close < low[2]
exit_condition_2 = in_date_range and (close < ema10 and close[1] > ema10 and close < close[1] and ema10 > ema20 and ema10 > ema50 and ema10 > ema100 and ema10 > ema200 and close < open) and profit_condition and close < low[1] and close < low[2]

// Exit condition for when today's close is less than the previous day's low
//exit_condition_3 = close < low[1]

// Strategy logic
strategy.entry("Buy1", strategy.long, qty=qt1 * pyramiding, when=buy_condition_1)
strategy.entry("Buy2", strategy.long, qty=qt2 * pyramiding, when=buy_condition_2)
strategy.entry("Buy3", strategy.long, qty=qt3 * pyramiding, when=buy_condition_3)
strategy.entry("Buy4", strategy.long, qty=qt4 * pyramiding, when=buy_condition_4)

strategy.close("Buy1", when=exit_condition_1 or exit_condition_2)
strategy.close("Buy2", when=exit_condition_1 or exit_condition_2)
strategy.close("Buy3", when=exit_condition_1 or exit_condition_2)
strategy.close("Buy4", when=exit_condition_1 or exit_condition_2)

Plus de