Stratégie de suivi des tendances croisées à double MA

Auteur:ChaoZhang est là., Date: 21-12-2023 16:10:22 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie adopte la méthode typique de suivi des tendances de double croisement des moyennes mobiles, combinée à des mécanismes de gestion des risques tels que le stop loss, le take profit et le trailing stop loss, dans le but de réaliser de gros bénéfices sur les marchés en tendance.

La logique de la stratégie

  1. Calculer l'EMA à n jours comme la ligne rapide à court terme;
  2. Calculer l'EMA en jours m comme la ligne lente à long terme;
  3. Allez long lorsque la ligne rapide traverse la ligne lente vers le haut, et allez court quand elle traverse vers le bas;
  4. Signal de sortie: croisement à l'envers (p. ex. longueur de sortie lorsque le croisement à longueur se produit).
  5. Utilisez le stop loss, le profit, le stop loss pour gérer les risques.

Analyse des avantages

  1. L'adoption de lignes EMA doubles permet de mieux déterminer les points d'inversion de la tendance des prix et de saisir les mouvements de tendance.
  2. La combinaison d'un stop loss, d'un take profit et d'un trailing stop aide à limiter les pertes d'une seule transaction, à verrouiller les bénéfices et à réduire le retrait.
  3. Il existe de nombreux paramètres personnalisables à ajuster et à optimiser pour différents produits et environnements de marché.
  4. La logique de la stratégie est simple et claire, facile à comprendre et à modifier.
  5. Soutenir les opérations à long terme et à court terme, adaptées aux différentes conditions du marché.

Analyse des risques

  1. Les stratégies de double MA sont très sensibles aux fausses fuites et sont sujettes à être piégées.
  2. Un mauvais réglage des paramètres peut entraîner des transactions fréquentes, une augmentation des coûts de négociation et des pertes par glissement.
  3. La stratégie elle-même ne peut pas déterminer les points d'inversion de tendance, elle doit être combinée à d'autres indicateurs.
  4. Il est facile de générer des signaux de négociation sur différents marchés, mais la rentabilité réelle tend à être faible.
  5. Les paramètres doivent être optimisés pour les différents produits et environnements de marché.

Les risques peuvent être réduits par:

  1. Filtrer les faux signaux par d'autres indicateurs.
  2. Optimisation des paramètres pour réduire la fréquence des transactions.
  3. Ajout d'indicateurs permettant de juger de la tendance afin d'éviter les transactions sur le marché liées à la fourchette.
  4. Adaptation de la taille des positions pour réduire les risques liés au commerce unique.

Directions d'optimisation

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

  1. Optimiser les périodes d'AEM rapides et lentes pour les différents produits et marchés.
  2. Ajouter d'autres indicateurs pour déterminer les tendances et filtrer les faux signaux, par exemple MACD, KDJ, etc.
  3. Envisager de remplacer l'EMA par une SMA ou une WMA.
  4. Ajustez dynamiquement le stop loss en fonction de l'ATR.
  5. Ajuster de manière flexible les tailles de positions individuelles en fonction de la méthode de dimensionnement des positions.
  6. Optimisation auto-adaptative des paramètres basée sur des métriques de corrélation et de volatilité.

Résumé

En résumé, il s'agit d'une stratégie de suivi de tendance à double EMA. Elle présente l'avantage de capturer les mouvements de tendance, intégrée à des mécanismes de gestion des risques tels que le stop loss, le take profit et le trailing stop loss. Mais elle présente également quelques faiblesses typiques, comme une grande sensibilité au bruit et aux marchés à plage, sujettes à être piégés. Des améliorations supplémentaires peuvent être apportées en introduisant des indicateurs supplémentaires, l'optimisation des paramètres, des ajustements dynamiques et l'utilisation du portefeuille pour améliorer les performances de la stratégie.


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

//@version=2

strategy(title = "Strategy Code Example", shorttitle = "Strategy Code Example", overlay = true)

// Revision:        1
// Author:          @JayRogers
//
// *** THIS IS JUST AN EXAMPLE OF STRATEGY RISK MANAGEMENT CODE IMPLEMENTATION ***

// === GENERAL INPUTS ===
// short ma
maFastSource   = input(defval = open, title = "Fast MA Source")
maFastLength   = input(defval = 14, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource   = input(defval = open, title = "Slow MA Source")
maSlowLength   = input(defval = 21, title = "Slow MA Period", minval = 1)

// === STRATEGY RELATED INPUTS ===
tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === SERIES SETUP ===
/// a couple of ma's..
maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)

// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = red, linewidth = 2, style = line, transp = 50)

// === LOGIC ===
// is fast ma above slow ma?
aboveBelow = maFast >= maSlow ? true : false
// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => not tradeDirection[1] and tradeDirection // functions can be used to wrap up and work out complex conditions
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)


Plus de