Die Ressourcen sind geladen. Beförderung...

Dual Crossover-Trend nach Strategie: EMA und MACD synergistisches Handelssystem

Schriftsteller:ChaoZhang, Datum: 2025-01-17 16:06:16
Tags:EMAMACDDIFDEATPSLRR

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

Übersicht

Diese Strategie ist ein Trend folgendes Handelssystem, das EMA und MACD doppelte technische Indikatoren kombiniert. Es erfasst Markttrends durch das Crossover von EMA9 mit Preis und das Crossover von MACD Fast Line (DIF) mit Slow Line (DEA).

Strategieprinzip

Die Kernlogik gliedert sich in lange und kurze Richtungen: 1. Long-Konditionen: Wenn der Schlusskurs von unten über die EMA9 bricht und die DIF-Linie des MACD über die DEA-Linie kreuzt, erzeugt das System ein Long-Signal. 2. Kurzbedingungen: Wenn der Schlusskurs von oben unter die EMA9 bricht und die DIF-Linie des MACD unter die DEA-Linie geht, erzeugt das System ein Kurzsignal. 3. Risikomanagement: - Die Stop-Loss-Position für die Long-Position wird unter dem Tiefpunkt der vorherigen 5 Kerzen gesetzt. - Der Stop-Loss für die Short-Position wird über dem höchsten Punkt der vorherigen 5 Kerzen gesetzt - Gewinnziel wird auf das 3,5fache der Stop-Loss-Distanz festgelegt

Strategische Vorteile

  1. Doppel-Bestätigungsmechanismus: Durch die Synergie von EMA und MACD filtert er falsche Signale effektiv und verbessert die Genauigkeit des Handels.
  2. Adaptiver Stop-Loss: Stop-Loss-Positionen, die auf der jüngsten Kursvolatilität basieren, werden automatisch an die Marktvolatilität angepasst.
  3. Klares Risiko-Rendite-Verhältnis: Eine feste Risiko-Rendite-Einstellung von 3,5:1 trägt dazu bei, langfristig stabile Gewinne zu erzielen.
  4. Klare Strategie-Logik: Die Ein- und Ausstiegsbedingungen sind eindeutig, leicht zu verstehen und umzusetzen.
  5. Hohe Anpassungsfähigkeit: Die Parameter können an unterschiedliche Marktbedingungen angepasst werden.

Strategische Risiken

  1. Schwankende Marktrisiken: Häufige falsche Ausbrüche können in seitlichen Märkten auftreten, die zu aufeinanderfolgenden Stop-Losses führen.
  2. Das Risiko eines Ausrutschens: In schnelllebigen Märkten können die tatsächlichen Stop-Loss- und Gewinnpreise von den Erwartungen abweichen.
  3. Parameterempfindlichkeit: Die EMA- und MACD-Periodeneinstellungen haben erhebliche Auswirkungen auf die Strategieergebnisse.
  4. Trendabhängigkeit: Die Strategie kann in Märkten ohne klare Trends nicht gut funktionieren.

Strategieoptimierungsrichtlinien

  1. Hinzufügen eines Trendfilters: Einführen von Trendindikatoren für längere Zeiträume, um nur in der Haupttrendrichtung zu handeln.
  2. Dynamischer Risikomultiplizier: Die Risiko-Rendite-Ratio wird automatisch anhand der Marktvolatilität angepasst.
  3. Zeitfilterung: Hinzufügen von Handelszeitfiltern, um Perioden mit geringer Liquidität zu vermeiden.
  4. Positionsmanagementoptimierung: Dynamische Anpassung der Positionsgröße anhand der Signalstärke.
  5. Einführung von Volatilitätsindikatoren: Für die dynamische Anpassung von Stop-Loss-Distanzen.

Zusammenfassung

Diese Strategie konstruiert ein komplettes Trend-Folge-Handelssystem durch technische Indikator-Doppelbestätigung und strenges Risikomanagement. Obwohl es eine gewisse Abhängigkeit vom Marktumfeld gibt, zeigt die Strategie eine gute Anpassungsfähigkeit und Stabilität durch angemessene Parameteroptimierung und Risikomanagement. Zukünftige Optimierungsrichtungen konzentrieren sich hauptsächlich auf die Verbesserung der Trendidentifikationsgenauigkeit und der Risikomanagementdynamik, um die Gesamtstrategieleistung zu verbessern.


/*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")

Verwandt

Mehr