Stratégie de croisement de moyennes mobiles multi-périodes flexible, édition avancée

MA SMA EMA WMA HMA SMMA
Date de création: 2024-11-28 15:18:47 Dernière modification: 2024-11-28 15:18:47
Copier: 0 Nombre de clics: 516
1
Suivre
1617
Abonnés

Stratégie de croisement de moyennes mobiles multi-périodes flexible, édition avancée

Aperçu

La stratégie est un système de trading quantitatif avancé basé sur plusieurs moyennes et sur plusieurs périodes. Il permet aux traders de choisir avec souplesse différents types de moyennes mobiles (y compris les SMA, EMA, WMA, HMA et SMMA) et de négocier librement sur plusieurs périodes, telles que le jour, la semaine ou la lune, en fonction de la situation du marché. La logique centrale de la stratégie consiste à déterminer les signaux d’achat et de vente en comparant les cours de clôture et la position de la moyenne choisie, tout en vérifiant les différentes périodes de répétition.

Principe de stratégie

La stratégie est conçue de manière modulaire et comprend quatre composants principaux: le module de sélection du type de ligne de parité, le module de sélection du cycle de temps, le module de génération de signaux et le module de gestion de la position. Lorsque le prix de clôture traverse la ligne de parité sélectionnée, le système émet plusieurs signaux au début du prochain cycle de négociation; lorsque le prix de clôture traverse la ligne de parité, le système émet un signal de placement au début du prochain cycle de négociation.

Avantages stratégiques

  1. Haute flexibilité: prend en charge une combinaison de plusieurs types de ligne moyenne et de périodes de temps pour s’adapter à différents environnements de marché
  2. Une meilleure gestion des risques: éviter les failles et les occasions manquées grâce à un mécanisme de vérification automatique à la fin du cycle
  3. Gestion raisonnable des fonds: gestion des pourcentages de position et contrôle efficace des risques
  4. Stabilité du signal: réduction de l’impact des faux signaux grâce à un mécanisme de confirmation multiple
  5. Large adaptabilité: peut être appliquée à une variété de types de transactions et de conditions de marché

Risque stratégique

  1. Risque de retard: l’indicateur de la moyenne a lui-même un certain retard qui peut entraîner des retards dans les heures d’entrée et de sortie
  2. Risque de choc: Faux signaux de rupture peuvent être fréquents dans les marchés à choc horizontal
  3. Risque intercyclique: les signaux de différentes périodes de temps peuvent être contradictoires et nécessitent une priorité de signal efficace
  4. Risques de gestion de fonds: les positions en pourcentage fixe peuvent être trop radicales dans certaines conditions de marché

Orientation de l’optimisation de la stratégie

  1. Introduction d’indicateurs de volatilité: il est recommandé d’ajouter des indicateurs de volatilité tels que l’ATR ou les bandes de Bollinger pour ajuster dynamiquement la taille des positions
  2. Ajout d’un filtre de tendance: un mécanisme de jugement de tendance à long terme peut être ajouté, permettant d’ouvrir des positions uniquement dans la direction de la tendance principale
  3. Optimisation des mécanismes de confirmation des signaux: envisager l’introduction d’indicateurs auxiliaires tels que le volume de trafic, afin d’améliorer la fiabilité des signaux
  4. Amélioration des mécanismes d’arrêt des pertes: augmentation de la fonction de suivi des pertes pour une meilleure protection des bénéfices
  5. Augmentation de l’indicateur de l’humeur du marché: il est recommandé d’introduire des indicateurs tels que le RSI ou le MACD pour juger de l’état de survente du marché

Résumer

La stratégie est un système de négociation bien conçu et logiquement clair, qui offre aux traders un outil de négociation fiable grâce à des paramètres flexibles et à un mécanisme de confirmation multiple. La conception modulaire de la stratégie lui confère une forte extensibilité qui peut être améliorée par une optimisation continue.

Code source de la stratégie
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Flexible Moving Average Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Input to select the review frequency (Daily, Weekly, Monthly)
check_frequency = input.string("Weekly", title="Review Frequency", options=["Daily", "Weekly", "Monthly"])

// Input to select the Moving Average method (SMA, EMA, WMA, HMA, SMMA)
ma_method = input.string("EMA", title="Moving Average Method", options=["SMA", "EMA", "WMA", "HMA", "SMMA"])

// Input to select the length of the Moving Average
ma_length = input.int(30, title="Moving Average Length", minval=1)

// Input to select the timeframe for Moving Average calculation
ma_timeframe = input.string("W", title="Moving Average Timeframe", options=["D", "W", "M"])

// Calculate all Moving Averages on the selected timeframe
sma_value = request.security(syminfo.tickerid, ma_timeframe, ta.sma(close, ma_length), lookahead=barmerge.lookahead_off)
ema_value = request.security(syminfo.tickerid, ma_timeframe, ta.ema(close, ma_length), lookahead=barmerge.lookahead_off)
wma_value = request.security(syminfo.tickerid, ma_timeframe, ta.wma(close, ma_length), lookahead=barmerge.lookahead_off)
hma_value = request.security(syminfo.tickerid, ma_timeframe, ta.hma(close, ma_length), lookahead=barmerge.lookahead_off)
smma_value = request.security(syminfo.tickerid, ma_timeframe, ta.rma(close, ma_length), lookahead=barmerge.lookahead_off) // Smoothed Moving Average (SMMA)

// Select the appropriate Moving Average based on user input
ma = ma_method == "SMA" ? sma_value : 
     ma_method == "EMA" ? ema_value :
     ma_method == "WMA" ? wma_value :
     ma_method == "HMA" ? hma_value :
     smma_value  // Default to SMMA

// Variable initialization
var float previous_close = na
var float previous_ma = na
var float close_to_compare = na
var float ma_to_compare = na

// Detect the end of the period (Daily, Weekly, or Monthly) based on the selected frequency
var bool is_period_end = false

if check_frequency == "Daily"
    is_period_end := ta.change(time('D')) != 0
else if check_frequency == "Weekly"
    is_period_end := ta.change(time('W')) != 0
else if check_frequency == "Monthly"
    is_period_end := ta.change(time('M')) != 0

// Store the close and Moving Average values at the end of the period
if is_period_end
    previous_close := close[0]  // Closing price of the last day of the period
    previous_ma := ma[0]  // Moving Average value at the end of the period

// Strategy logic
is_period_start = is_period_end

// Check if this is the first bar of the backtest
is_first_bar = barstate.isfirst

if (is_period_start or is_first_bar)
    // If the previous period values are not available, use current values
    close_to_compare := not na(previous_close) ? previous_close : close[0]
    ma_to_compare := not na(previous_ma) ? previous_ma : ma[0]
    
    if close_to_compare < ma_to_compare
        // Close price below the MA -> Sell
        if strategy.position_size > 0
            strategy.close("Long")
    else
        // Close price above the MA -> Buy/Hold
        if strategy.position_size == 0
            strategy.entry("Long", strategy.long)

// Close all positions at the end of the backtest period
if barstate.islastconfirmedhistory
    strategy.close_all(comment="Backtest End")

// Plot the previous period's close price for comparison
plot(previous_close, color=color.red, title="Previous Period Close", style=plot.style_stepline)
plot(close_to_compare, color=color.blue, title="Close to Compare", style=plot.style_line)

// Plot the selected Moving Average
plot(ma, color=color.white, title="Moving Average", style=plot.style_line, linewidth=3)