Stratégie de suivi de tendance à double croisement : système de trading collaboratif sur la moyenne mobile de l'indice et le MACD

EMA MACD DIF DEA TP SL RR
Date de création: 2025-01-17 16:06:16 Dernière modification: 2025-01-17 16:06:16
Copier: 0 Nombre de clics: 374
1
Suivre
1617
Abonnés

Stratégie de suivi de tendance à double croisement : système de trading collaboratif sur la moyenne mobile de l’indice et le MACD

Aperçu

Cette stratégie est un système de trading de suivi des tendances qui combine la moyenne mobile et les indicateurs techniques doubles MACD. Il capture principalement les tendances du marché via l’intersection de la moyenne mobile EMA9 et du prix, ainsi que l’intersection de la ligne rapide (DIF) et de la ligne lente (DEA) dans l’indicateur MACD. Dans le même temps, la stratégie adopte une méthode de stop-loss adaptative basée sur les 5 dernières lignes K et utilise un ratio risque-rendement de 3,5 fois pour fixer des objectifs de profit, formant ainsi un système de trading complet.

Principe de stratégie

La logique de base de la stratégie est divisée en deux directions : longue et courte :

  1. Conditions longues : lorsque le cours de clôture franchit l’EMA9 de bas en haut et que la ligne DIF du MACD croise la ligne DEA de bas en haut, le système envoie un signal long.
  2. Conditions de vente à découvert : lorsque le cours de clôture tombe en dessous de l’EMA9 de haut en bas et que la ligne DIF du MACD croise la ligne DEA de haut en bas, le système envoie un signal de vente à découvert.
  3. Gestion des risques :
    • Le stop loss des ordres longs est fixé en dessous du point le plus bas des 5 K lignes précédentes
    • Le stop loss pour les ordres courts est fixé au-dessus du point le plus élevé des 5 lignes K précédentes
    • L’objectif de profit est de 3,5 fois la distance du stop loss

Avantages stratégiques

  1. Mécanisme de double confirmation : grâce à la coopération coordonnée de la moyenne mobile et du MACD, les faux signaux peuvent être efficacement filtrés et la précision des transactions peut être améliorée.
  2. Stop loss adaptatif : le niveau de stop loss défini en fonction des fluctuations de prix récentes peut ajuster automatiquement la position de protection en fonction de la volatilité du marché.
  3. Rapport risque/rendement clair : un rapport risque/rendement fixe de 3,5 fois permet d’obtenir des bénéfices stables à long terme.
  4. La logique de la stratégie est claire : les conditions d’entrée et de sortie sont claires, faciles à comprendre et à exécuter.
  5. Forte adaptabilité : les paramètres peuvent être ajustés en fonction des différentes conditions du marché.

Risque stratégique

  1. Risque de marché volatil : de fausses cassures peuvent se produire fréquemment dans un marché latéral et volatil, entraînant des stop loss continus.
  2. Risque de dérapage : dans un marché rapide, les prix réels du stop loss et du profit peuvent s’écarter de ceux attendus.
  3. Sensibilité des paramètres : Les paramètres de période de l’EMA et du MACD ont un impact important sur les performances de la stratégie.
  4. Dépendance à la tendance : les stratégies peuvent être peu performantes dans des environnements de marché sans tendance claire.

Orientation de l’optimisation de la stratégie

  1. Ajouter un filtre de tendance : vous pouvez introduire des indicateurs de tendance avec des périodes plus longues et ouvrir des positions uniquement dans le sens de la tendance principale.
  2. Multiple de risque dynamique : ajuste automatiquement le ratio risque/rendement en fonction de la volatilité du marché.
  3. Filtre temporel : ajoutez un filtre de période de négociation pour éviter les périodes de faible liquidité.
  4. Optimisation de la gestion de position : le rapport de position peut être ajusté dynamiquement en fonction de la force du signal.
  5. Présentation de l’indicateur de volatilité : utilisé pour ajuster dynamiquement la distance du stop loss.

Résumer

Cette stratégie construit un système de trading complet de suivi des tendances grâce à une double confirmation des indicateurs techniques et à une gestion stricte des risques. Bien qu’il existe un certain degré de dépendance à l’environnement du marché, la stratégie démontre une bonne adaptabilité et stabilité grâce à une optimisation raisonnable des paramètres et à une gestion des risques. Les orientations d’optimisation ultérieures se concentreront principalement sur la précision de l’identification des tendances et la dynamique de la gestion des risques pour améliorer la performance globale de la stratégie.

Code source de la stratégie
/*backtest
start: 2024-01-17 00:00:00
end: 2025-01-16 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

// =======================
// @version=6
strategy(title="MACD + EMA9 3 h",
     shorttitle="MACD+EMA9+StopTP_5candles",
     overlay=true,
     initial_capital=100000,    // Ajuste conforme desejar
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=200)      // Ajuste % de risco ou quantidade

// ----- Entradas (Inputs) -----
emaLen          = input.int(9,     "Período da EMA 9", minval=1)
macdFastLen     = input.int(12,    "Período MACD Rápido", minval=1)
macdSlowLen     = input.int(26,    "Período MACD Lento",  minval=1)
macdSignalLen   = input.int(9,     "Período MACD Signal", minval=1)
riskMultiplier  = input.float(3.5, "Fator de Multiplicação do Risco (TP)")
lookbackCandles = input.int(5,     "Quantidade de candles p/ Stop", minval=1)

// ----- Cálculo da EMA -----
ema9 = ta.ema(close, emaLen)

// ----- Cálculo do MACD -----
[macdLine, signalLine, histLine] = ta.macd(close, macdFastLen, macdSlowLen, macdSignalLen)
// DIF cruza DEA para cima ou para baixo
macdCrossover   = ta.crossover(macdLine, signalLine)   // DIF cruza DEA p/ cima
macdCrossunder  = ta.crossunder(macdLine, signalLine)  // DIF cruza DEA p/ baixo

// ----- Condições de Compra/Venda -----

// Compra quando:
// 1) Preço cruza EMA9 de baixo pra cima
// 2) MACD cruza a linha de sinal para cima
buySignal = ta.crossover(close, ema9) and macdCrossover

// Venda quando:
// 1) Preço cruza EMA9 de cima pra baixo
// 2) MACD cruza a linha de sinal para baixo
sellSignal = ta.crossunder(close, ema9) and macdCrossunder

// ----- Execução das ordens -----

// Identifica o menor e o maior preço dos últimos 'lookbackCandles' candles.
// A função ta.lowest() e ta.highest() consideram, por padrão, a barra atual também.
// Se você quiser EXCLUIR a barra atual, use low[1] / high[1] dentro do ta.lowest() / ta.highest().
lowestLow5  = ta.lowest(low, lookbackCandles)
highestHigh5= ta.highest(high, lookbackCandles)

// >>> Quando há sinal de COMPRA <<<
if (buySignal)
    // Fecha posição vendida, se existir
    strategy.close("Sell")
    // Entra comprado
    strategy.entry("Buy", strategy.long)
    
    // STOP: abaixo do menor preço dos últimos 5 candles
    stopPrice = lowestLow5
    // Risco = (preço de entrada) - (stop)
    // Note que strategy.position_avg_price só fica disponível a partir da barra seguinte.
    // Por isso, o exit costuma funcionar corretamente apenas na barra seguinte.
    // Para fins de teste, podemos usar 'close' como proxy do "entry" (ou aceitar essa limitação).
    // A forma "correta" de usar strategy.position_avg_price seria via calc_on_order_fills = true,
    // mas isso pode exigir algumas configurações adicionais.
    risk = strategy.position_avg_price - stopPrice
    
    // Take Profit = entrada + 2,5 * risco
    takeProfitPrice = strategy.position_avg_price + riskMultiplier * risk

    // Registra a saída (stop e alvo) vinculada à posição "Buy"
    strategy.exit("Exit Buy", "Buy", stop=stopPrice, limit=takeProfitPrice)

// >>> Quando há sinal de VENDA <<<
if (sellSignal)
    // Fecha posição comprada, se existir
    strategy.close("Buy")
    // Entra vendido
    strategy.entry("Sell", strategy.short)
    
    // STOP: acima do maior preço dos últimos 5 candles
    stopPrice = highestHigh5
    // Risco = (stop) - (preço de entrada)
    risk = stopPrice - strategy.position_avg_price
    
    // Take Profit = entrada - 2,5 * risco
    takeProfitPrice = strategy.position_avg_price - riskMultiplier * risk

    // Registra a saída (stop e alvo) vinculada à posição "Sell"
    strategy.exit("Exit Sell", "Sell", stop=stopPrice, limit=takeProfitPrice)

// ----- Plotagens visuais -----
plot(ema9, color=color.orange, linewidth=2, title="EMA 9")

plot(macdLine,       color=color.new(color.blue, 0),   title="MACD")
plot(signalLine,     color=color.new(color.red, 0),    title="Signal")
plot(histLine,       color=color.new(color.purple, 0), style=plot.style_histogram, title="Histogram")

// Só para auxiliar na visualização, vamos plotar a linha do lowestLow5 e highestHigh5
plot(lowestLow5,    color=color.new(color.lime, 70),  style=plot.style_line, title="Lowest 5 bars")
plot(highestHigh5,  color=color.new(color.fuchsia,70),style=plot.style_line, title="Highest 5 bars")