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

Tendance croisée double Suivant la stratégie: EMA et MACD Système de négociation synergique

Auteur:ChaoZhang est là., Date: 2025-01-17 16h06 et 16h
Les étiquettes:Le taux d'intérêtLe MACDLe DIFDEATPSLRR

 Dual Crossover Trend Following Strategy: EMA and MACD Synergistic Trading System

Résumé

Cette stratégie est un système de trading qui combine les deux indicateurs techniques EMA et MACD. Elle capture les tendances du marché par le croisement de l'EMA9 avec le prix et le croisement de la ligne rapide MACD (DIF) avec la ligne lente (DEA).

Principe de stratégie

La logique de base est divisée en directions longues et courtes: 1. Conditions longues: lorsque le prix de clôture dépasse l'EMA9 depuis le bas et que la ligne DIF du MACD traverse la ligne DEA, le système génère un signal long. 2. Conditions courtes: lorsque le prix de clôture dépasse l'EMA9 par le haut et que la ligne DIF du MACD traverse la ligne DEA, le système génère un signal court. 3. Gestion des risques: - Le stop-loss de la position longue est placé sous le point le plus bas des 5 bougies précédentes - Le stop-loss de la position courte est placé au-dessus du point le plus élevé des 5 bougies précédentes - L'objectif de profit est fixé à 3,5 fois la distance stop-loss

Les avantages de la stratégie

  1. Mécanisme de confirmation double: grâce à la synergie de l'EMA et du MACD, il filtre efficacement les faux signaux et améliore la précision des transactions.
  2. L'établissement doit être en mesure d'assurer la liquidité de ses positions en fonction de l'évolution des prix.
  3. Un rapport risque/rendement clair: un rapport risque/rendement fixe de 3,5:1 permet d'obtenir des bénéfices stables à long terme.
  4. Logique stratégique claire: les conditions d'entrée et de sortie sont explicites, faciles à comprendre et à exécuter.
  5. Haute adaptabilité: les paramètres peuvent être ajustés en fonction des différentes conditions du marché.

Risques stratégiques

  1. Risque de rupture de marché: des fausses ruptures fréquentes peuvent survenir sur les marchés latéraux, entraînant des stop-loss consécutifs.
  2. Risque de glissement: sur les marchés en évolution rapide, les prix réels des stop-loss et des bénéfices peuvent dévier des attentes.
  3. Sensibilité des paramètres: les réglages de la période EMA et MACD ont une incidence significative sur la performance de la stratégie.
  4. Dépendance des tendances: la stratégie peut ne pas bien fonctionner sur les marchés sans tendances claires.

Directions d'optimisation de la stratégie

  1. Ajouter un filtre de tendance: introduire des indicateurs de tendance à plus longue période pour ne négocier que dans la direction principale de la tendance.
  2. Multiplicateur de risque dynamique: ajustement automatique du ratio risque/rendement en fonction de la volatilité du marché.
  3. Filtrage du temps: ajouter des filtres de temps de négociation pour éviter les périodes de faible liquidité.
  4. Optimisation de la gestion de la position: ajustez dynamiquement la taille de la position en fonction de la force du signal.
  5. L'indicateur de volatilité doit être présenté: pour l'ajustement dynamique des distances de stop-loss.

Résumé

Cette stratégie construit une tendance complète suivant le système de négociation grâce à la confirmation double de l'indicateur technique et à une gestion stricte des risques. Bien qu'il existe une certaine dépendance de l'environnement du marché, la stratégie montre une bonne adaptabilité et stabilité grâce à une optimisation raisonnable des paramètres et à une gestion des risques. Les directions d'optimisation futures se concentrent principalement sur l'amélioration de l'exactitude de l'identification des tendances et de la dynamique de la gestion des risques pour améliorer les performances globales 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")

Relationnée

Plus de