Les ressources ont été chargées... Je charge...

Stratégie de rupture de la moyenne mobile

Auteur:ChaoZhang est là., Date: le 26 septembre 2023 16:18:37
Les étiquettes:

Résumé

La stratégie de rupture de moyenne mobile est une stratégie de trading à court terme qui utilise des moyennes mobiles pour déterminer les entrées et les sorties.

La logique de la stratégie

La logique de base repose sur deux moyennes mobiles, une ligne rapide et une ligne lente, pour mesurer la tendance des prix. La ligne rapide a une période plus courte et est plus sensible. La ligne lente a une période plus longue et est plus stable.

Le code permet aux utilisateurs de définir la période de ligne rapide shortPeriod et la période de ligne lente longPeriod via des paramètres d'entrée. Les valeurs des deux moyennes mobiles sont calculées comme shortSMA et longSMA.

Lorsque la moyenne mobile rapide dépasse la moyenne mobile lente, elle signale une rupture à la hausse et une entrée longue.

Condition d'entrée longue:

Fast MA crosses above slow MA
Fast MA > Slow MA

Condition d'entrée courte:

Fast MA crosses below slow MA
Fast MA < Slow MA 

La stratégie comprend également des paramètres de stop loss, de prise de bénéfices et de dimensionnement des positions pour contrôler les risques.

Les avantages

  • Simple à utiliser, facile à comprendre pour les débutants
  • Les moyennes mobiles filtrent le bruit
  • Flexibilité dans les périodes de réglage fin de l'AM pour différentes périodes
  • Résultats de l'évaluation de la valeur ajoutée

Les risques

  • Réceptif à de fausses éruptions et à de faux fouets
  • Pas idéal pour les marchés agités
  • Indication de retard, les entrées pourraient être en retard
  • Incapacité à filtrer efficacement les renversements de tendance

Gestion des risques:

  • Ajouter des filtres pour éviter les faux signaux
  • Appliquer une stratégie lorsque la tendance est évidente
  • Optimiser les paramètres MA pour de meilleures entrées
  • Permettre des arrêts plus larges pour éviter les arrêts prématurés

Des possibilités d'amélioration

  • Optimiser les paramètres MA pour trouver les meilleures combinaisons
  • Ajouter des indicateurs supplémentaires tels que les canaux BOLL ou KD
  • Améliorer les règles de sortie pour maximiser les bénéfices
  • Robustesse des essais sur différents instruments
  • Incorporer l'apprentissage automatique à l'aide du Big Data

Conclusion

La stratégie de rupture moyenne mobile est facile à comprendre, générant des signaux avec des MAs rapides et lents. Mais elle présente également des défauts tels que de fausses pauses et des problèmes de retard. Avec le réglage des paramètres, des filtres supplémentaires et d'autres améliorations, la stratégie peut être améliorée.


/*backtest
start: 2023-08-26 00:00:00
end: 2023-09-25 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/
// © YohanNaftali

//@version=5

///////////////////////////////////////////////////////////////////////////////
// Heikin Ashi Candle Startegy
// ver 2021.12.29
// © YohanNaftali
// This script composed by Yohan Naftali for educational purpose only 
// Reader who will use this signal must do own research
///////////////////////////////////////////////////////////////////////////////
strategy(
     title = 'Heikin Ashi Candle Startegy Long',  
     shorttitle = 'HA Strategy Long',  
     format = format.price,
     precision = 0,
     overlay = true)

// Input
validationPeriod = input.int( 
     defval = 3, 
     title = 'Validation Period', 
     group = 'Candle')

qtyOrder = input.float(
     defval = 1.0,
     title = 'Qty', 
     group = 'Order')

maxActive = input.float(
     defval = 1.0,
     title = 'Maximum Active Open Position', 
     group = 'Order')

// Long Strategy
tpLong = input.float(
     defval = 1,
     title = "Take Profit (%)",
     minval = 0.0, 
     step = 0.1, 
     group = "Long") * 0.01

slLong = input.float(
     defval = 25,
     title = "Stop Loss (%)", 
     minval=0.0, 
     step=0.1,
     group="Long") * 0.01

trailingStopLong = input.float(
     defval = 0.2,
     title = "Trailing Stop (%)",
     minval = 0.0, 
     step = 0.1,
     group = 'Long') * 0.01

// Calculation
haTicker = ticker.heikinashi(syminfo.tickerid)
haClose = request.security(haTicker, timeframe.period, close)
haOpen = request.security(haTicker, timeframe.period, open)

// Long
limitLong = tpLong > 0.0 ? strategy.position_avg_price * (1 + tpLong) : na
stopLong = slLong > 0.0 ? strategy.position_avg_price * (1 - slLong) : na
float trailLong = 0.0
trailLong := if strategy.position_size > 0
    trailClose = close * (1 - trailLong)
    math.max(trailClose, trailLong[1])
else
    0

isGreen = true
for i = 0 to validationPeriod-1
    isGreen := isGreen and haClose[i] > haOpen[i]        
isLong = isGreen and haClose[validationPeriod] < haOpen[validationPeriod]



plot(
     limitLong,
     title = 'Limit', 
     color = color.rgb(0, 0, 255, 0), 
     style = plot.style_stepline,
     linewidth = 1)

plot(
     trailLong,
     title = 'Trailing', 
     color = color.rgb(255, 255, 0, 0), 
     style = plot.style_stepline,
     linewidth = 1)

plot(
     stopLong,
     title = 'Stop', 
     style = plot.style_stepline,
     color = color.rgb(255, 0, 0, 0), 
     linewidth = 1)

// plotshape(
//      isLong, 
//      title = 'Entry', 
//      style = shape.arrowup, 
//      location = location.belowbar, 
//      offset = 1, 
//      color = color.new(color.green, 0), 
//      text = 'Long Entry',
//      size = size.small)

// Strategy
strategy.risk.max_position_size(maxActive)
strategy.risk.allow_entry_in(strategy.direction.long)

strategy.entry(
     id = "Long", 
     direction = strategy.long, 
     qty = qtyOrder,  
     when = isLong,       
     alert_message = "LN")
if (strategy.position_size > 0)
    strategy.exit(
         id = "Long Exit",
         from_entry = "Long",
         limit = limitLong,
         stop = stopLong,
         trail_price = trailLong,
         alert_message = "LX")      

Plus de