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

Stratégie quantitative croisée de tendance SMA à long terme

Auteur:ChaoZhang est là., Date: 2025-01-06 17:01:08 Je vous en prie
Les étiquettes:SMALe taux d'intérêt

img

Résumé

Cette stratégie est un système de trading quantitatif basé sur des signaux croisés de moyenne mobile simple (SMA) à plusieurs périodes. Elle identifie principalement les opportunités de rebond dans les tendances haussières à long terme.

Principes de stratégie

La logique de base comprend plusieurs composantes clés:

  1. Identification de la tendance à long terme à travers la position relative de SMA20 et de SMA60, confirmant une tendance haussière lorsque SMA20 est supérieur à SMA60.
  2. Les signaux d'achat sont déclenchés lorsque le SMA5 à court terme franchit le sommet du SMA20 après un repli, ce qui indique un rebond dans la tendance haussière.
  3. Les signaux de sortie se produisent lorsque le SMA20 franchit le sommet du SMA5, ce qui suggère un affaiblissement de l'élan à court terme.
  4. La stratégie comprend une fonctionnalité de filtrage du temps pour limiter les périodes de backtesting, ce qui améliore la flexibilité.

Les avantages de la stratégie

  1. Une logique claire et simple qui est facile à comprendre et à mettre en œuvre, évitant les calculs complexes.
  2. Filtrage efficace du bruit grâce à l'utilisation de moyennes mobiles à plusieurs périodes, améliorant la fiabilité du signal.
  3. Concentrez-vous sur les opportunités de repli sur les marchés en tendance, en vous alignant sur les principes de base du suivi des tendances.
  4. L'utilisation de la SMA au lieu de l'EMA réduit la sensibilité des prix et les faux signaux.
  5. Une logique d'entrée et de sortie claire facilite l'exécution et la gestion des risques.

Risques stratégiques

  1. Le décalage inhérent aux systèmes de moyennes mobiles peut entraîner des temps d'entrée et de sortie sous-optimaux.
  2. Des croisements fréquents sur des marchés variés peuvent générer des faux signaux excessifs.
  3. L'absence de mécanisme de filtrage de la volatilité expose la stratégie à un risque de tirage important en période de forte volatilité.
  4. La fiabilité des signaux peut être compromise sans confirmation de volume.
  5. Les paramètres moyens mobiles fixes peuvent ne pas convenir à toutes les conditions du marché.

Directions d'optimisation

  1. Mettre en œuvre l'indicateur ATR pour le filtrage de la volatilité afin d'éviter les opérations en période de forte volatilité.
  2. Incorporer un mécanisme de confirmation du volume pour améliorer la fiabilité du signal.
  3. Développer des périodes de moyennes mobiles adaptatives pour mieux s'adapter aux différents environnements de marché.
  4. Ajouter des filtres de force de tendance, tels que l'indicateur ADX, pour garantir que les transactions ne sont effectuées que dans des tendances fortes.
  5. Améliorer les mécanismes d'arrêt des pertes, y compris les arrêts de trailing, pour un meilleur contrôle des risques.

Résumé

La stratégie construit un système de trading axé sur la capture des opportunités de rebond dans les tendances haussières à long terme grâce à l'utilisation coordonnée de SMA à plusieurs périodes. Sa conception est pratique et simple, offrant une bonne compréhensibilité et une bonne exécutabilité.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Long-Term Growing Stock Strategy", overlay=true)
// Date Range
// STEP 1. Create inputs that configure the backtest's date range
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2014"),title="Start Date", group="Backtest Time Period",tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " +"zone of the chart or of your computer.")
backtestEndDate = input(timestamp("31 Dec 2024"), title="End Date", group="Backtest Time Period")
// STEP 2. See if current bar falls inside the date range
inTradeWindow = true


// Calculate EMAs
// ema20 = ta.ema(close, ema20_length)
// ema60 = ta.ema(close, ema60_length)
// ema120 = ta.ema(close, ema120_length)
sma5 = ta.sma(close, 5)
sma10 = ta.sma(close, 10)
sma20 = ta.sma(close, 20)
sma60 = ta.sma(close, 60)
sma120 = ta.sma(close, 120)

// Long-term growth condition: EMA 20 > EMA 60 > EMA 120
longTermGrowth = sma20 > sma60
//  and ema60 > ema120

// Entry condition: Stock closes below EMA 20 and then rises back above EMA 10

// entryCondition = ta.crossover(close, ema20) or (close[1] < ema20[1] and close > ema20)
entryCondition =  sma5[1] <= sma20[1] and sma5 > sma20
// ta.crossover(sma5, sma20)

// Exit condition: EMA 20 drops below EMA 60
// exitCondition = ema5 < ema60 or (year == 2024 and month == 12 and dayofmonth == 30)
exitCondition = ta.crossover(sma20, sma5)

// Execute trades
if entryCondition and inTradeWindow
    strategy.entry("Long Entry", strategy.long)

if exitCondition and inTradeWindow
    strategy.close("Long Entry")
// plotchar(true, char="sma5: " + str.tostring(sma5))
// plotchar(true, char="sma5: " + sma20)
// label.new(x=bar_index, y=high + 10, text="SMA 5: " + str.tostring(sma5), color=color.blue, style=label.style_label_down, textcolor=color.white, size=size.small)
// label.new(x=bar_index, y=low, text="SMA 20: " + str.tostring(sma20), color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)


// x = time + (time - time[1]) * offset_x

//     var label lab = na
//     label.delete(lab)
//     lab := label.new(x=x, y=0, text=txt, xloc=xloc.bar_time, yloc=yloc.belowbar, color=color.red, textcolor=color.black, size=size.normal, style=label.style_label_up)
//     label.set_x(lab, x)



// Plot EMAs for visualization
// plot(ema20, color=color.red, title="EMA 20")
// plot(ema60, color=color.green, title="EMA 60")
// plot(ema120, color=color.blue, title="EMA 120")

Relationnée

Plus de