Stratégie combinée de suivi des tendances croisées de moyennes mobiles dynamiques

EMA SMA Moving Average CROSSOVER TREND FOLLOWING STOP LOSS TAKE PROFIT
Date de création: 2025-02-24 09:46:10 Dernière modification: 2025-02-24 09:46:10
Copier: 1 Nombre de clics: 315
2
Suivre
319
Abonnés

Stratégie combinée de suivi des tendances croisées de moyennes mobiles dynamiques Stratégie combinée de suivi des tendances croisées de moyennes mobiles dynamiques

Aperçu

La stratégie est un système de suivi de tendance basé sur des croisements de multiples moyennes, combinant les indicateurs SMA et EMA pour capturer les tendances du marché. La stratégie utilise une moyenne mobile simple (SMA) et une moyenne mobile à deux indices (EMA) de cycles personnalisés pour construire un système de trading de suivi de tendance complet.

Principe de stratégie

Les signaux d’entrée sont déclenchés de deux manières: premièrement, lorsque le prix est au-dessus (en dessous) de l’EMA et que l’EMA rapide est au-dessus (en dessous) de l’EMA lente; deuxièmement, lorsque le prix franchit l’EMA et que le prix de la période précédente est maintenu au-dessus (en dessous) de l’EMA lente. La stratégie utilise un mécanisme de stop loss dynamique, avec un stop loss EMA initial basé sur la position ou un pourcentage fixe, et un stop loss position ajusté en conséquence à mesure que les bénéfices augmentent.

Avantages stratégiques

  1. L’utilisation d’une combinaison de multiples moyennes améliore la précision des jugements de tendances et réduit les pertes causées par les fausses ruptures
  2. La conception des conditions de double entrée permet de saisir les opportunités au début d’une tendance et de suivre la continuité d’une tendance établie
  3. Les mécanismes de stop-loss dynamiques protègent les courbes déjà rentables tout en laissant de la place à la tendance à se développer pleinement.
  4. Le paramètre de stop loss est raisonnable et un bon équilibre est atteint entre la maîtrise des risques et la marge bénéficiaire
  5. Le croisement de la ligne de parité sert de condition supplémentaire de plage pour éviter le risque de renversement de tendance en temps opportun.

Risque stratégique

  1. Des pertes liées à la fréquence des transactions sur des marchés en crise
  2. Les systèmes de MAP peuvent être en retard sur des marchés en évolution rapide.
  3. Un multiplicateur de stop-loss fixe peut ne pas être adapté à toutes les conditions du marché.
  4. Dans les marchés plus volatiles, les arrêts mobiles peuvent bloquer les bénéfices trop tôt.
  5. L’optimisation excessive des paramètres peut entraîner une sous-performance de la stratégie sur disque

Orientation de l’optimisation de la stratégie

  1. L’introduction d’indicateurs de volatilité pour ajuster dynamiquement les stop-loss et les stop-loss multiples afin de mieux adapter les stratégies à différents environnements de marché
  2. Augmentation de l’indicateur de trafic comme confirmation auxiliaire pour améliorer la fiabilité du signal d’entrée
  3. Adaptation des cycles moyens en fonction de la dynamique des fluctuations du marché et amélioration de l’adaptabilité de la stratégie
  4. Ajouter un filtre de force de tendance pour éviter de négocier fréquemment dans un environnement de tendance faible
  5. Développer des mécanismes de stop-loss mobiles adaptatifs pour ajuster la distance de stop-loss en fonction de la dynamique de la volatilité du marché

Résumer

La stratégie utilise la combinaison de plusieurs lignes de parité pour construire un système complet de suivi des tendances, avec une conception détaillée des règles pour l’entrée, la sortie et la gestion des risques. L’avantage de la stratégie réside dans la capacité d’identifier et de suivre efficacement les tendances, tout en protégeant les bénéfices grâce à un mécanisme d’arrêt de perte dynamique. Bien qu’il existe des risques inhérents, la stabilité et l’adaptabilité de la stratégie peuvent être encore améliorées grâce à la direction d’optimisation proposée.

Code source de la stratégie
/*backtest
start: 2025-02-17 17:00:00
end: 2025-02-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("交易策略(自定义EMA/SMA参数)", overlay=true, initial_capital=100000, currency=currency.EUR, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// 输入参数:可调的 SMA 和 EMA 周期
smaLength     = input.int(120, "SMA Length", minval=1, step=1)
emaFastPeriod = input.int(13, "EMA Fast Period", minval=1, step=1)
emaSlowPeriod = input.int(21, "EMA Slow Period", minval=1, step=1)

// 计算均线
smaVal   = ta.sma(close, smaLength)
emaFast  = ta.ema(close, emaFastPeriod)
emaSlow  = ta.ema(close, emaSlowPeriod)

// 绘制均线
plot(smaVal, color=color.orange, title="SMA")
plot(emaFast, color=color.blue, title="EMA Fast")
plot(emaSlow, color=color.red, title="EMA Slow")

// 入场条件 - 做多
// 条件1:收盘价高于SMA 且 EMA Fast 向上穿越 EMA Slow
longTrigger1 = (close > smaVal) and ta.crossover(emaFast, emaSlow)
// 条件2:收盘价上穿SMA 且前5根K线的最低价均高于各自的SMA
longTrigger2 = ta.crossover(close, smaVal) and (low[1] > smaVal[1] and low[2] > smaVal[2] and low[3] > smaVal[3] and low[4] > smaVal[4] and low[5] > smaVal[5])
longCondition = longTrigger1 or longTrigger2

// 入场条件 - 做空
// 条件1:收盘价低于SMA 且 EMA Fast 向下穿越 EMA Slow
shortTrigger1 = (close < smaVal) and ta.crossunder(emaFast, emaSlow)
// 条件2:收盘价下穿SMA 且前5根K线的最高价均低于各自的SMA
shortTrigger2 = ta.crossunder(close, smaVal) and (high[1] < smaVal[1] and high[2] < smaVal[2] and high[3] < smaVal[3] and high[4] < smaVal[4] and high[5] < smaVal[5])
shortCondition = shortTrigger1 or shortTrigger2

// 定义变量记录入场时的价格与EMA Fast值,用于计算止损
var float entryPriceLong      = na
var float entryEMA_Fast_Long   = na
var float entryPriceShort     = na
var float entryEMA_Fast_Short = na

// 入场与初始止盈止损设置 - 做多
// 止损取“开仓时的EMA Fast价格”与“0.2%止损”中较大者;止盈为止损的5倍
if (longCondition and strategy.position_size == 0)
    entryPriceLong      := close
    entryEMA_Fast_Long  := emaFast
    strategy.entry("Long", strategy.long)
    stopPercLong = math.max(0.002, (entryPriceLong - entryEMA_Fast_Long) / entryPriceLong)
    stopLong     = entryPriceLong * (1 - stopPercLong)
    tpLong       = entryPriceLong * (1 + 5 * stopPercLong)
    strategy.exit("LongExit", "Long", stop=stopLong, limit=tpLong)

// 入场与初始止盈止损设置 - 做空
// 止损取“开仓时的EMA Fast价格”与“0.2%止损”中较大者;止盈为止损的5倍
if (shortCondition and strategy.position_size == 0)
    entryPriceShort      := close
    entryEMA_Fast_Short  := emaFast
    strategy.entry("Short", strategy.short)
    stopPercShort = math.max(0.002, (entryEMA_Fast_Short - entryPriceShort) / entryPriceShort)
    stopShort     = entryPriceShort * (1 + stopPercShort)
    tpShort       = entryPriceShort * (1 - 5 * stopPercShort)
    strategy.exit("ShortExit", "Short", stop=stopShort, limit=tpShort)

// 移动止损逻辑
// 当持仓盈利达到0.8%时更新止损和止盈,保持止盈为止损的5倍
var float longHighest = na
if (strategy.position_size > 0)
    longHighest := na(longHighest) ? high : math.max(longHighest, high)
    if (high >= entryPriceLong * 1.008)
        newLongStop = longHighest * (1 - 0.003)
        newPerc     = (entryPriceLong - newLongStop) / entryPriceLong
        newLongTP   = entryPriceLong * (1 + 5 * newPerc)
        strategy.exit("LongExit", "Long", stop=newLongStop, limit=newLongTP)
else
    longHighest := na

var float shortLowest = na
if (strategy.position_size < 0)
    shortLowest := na(shortLowest) ? low : math.min(shortLowest, low)
    if (low <= entryPriceShort * 0.992)
        newShortStop  = shortLowest * (1 + 0.003)
        newPercShort  = (newShortStop - entryPriceShort) / entryPriceShort
        newShortTP    = entryPriceShort * (1 - 5 * newPercShort)
        strategy.exit("ShortExit", "Short", stop=newShortStop, limit=newShortTP)
else
    shortLowest := na

// 额外平仓条件
// 如果持多仓时EMA Fast下穿EMA Slow,则立即平多
if (strategy.position_size > 0 and ta.crossunder(emaFast, emaSlow))
    strategy.close("Long", comment="EMA下穿平多")
// 如果持空仓时EMA Fast上穿EMA Slow,则立即平空
if (strategy.position_size < 0 and ta.crossover(emaFast, emaSlow))
    strategy.close("Short", comment="EMA上穿平空")