Sumber daya yang dimuat... Pemuatan...

Tren Crossover Dual Mengikuti Strategi: EMA dan Sistem Perdagangan Sinergis MACD

Penulis:ChaoZhang, Tanggal: 2025-01-17 16:06:16
Tag:EMAMACDDIFDEATPSLRR

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

Gambaran umum

Strategi ini adalah sistem perdagangan yang menggabungkan indikator teknis ganda EMA dan MACD. Strategi ini menangkap tren pasar melalui persilangan EMA9 dengan harga dan persilangan garis cepat MACD (DIF) dengan garis lambat (DEA). Strategi ini menggunakan stop-loss adaptif berdasarkan 5 lilin terakhir dan menggunakan rasio reward-risk 3,5:1 untuk target keuntungan, membentuk sistem perdagangan yang lengkap.

Prinsip Strategi

Logika inti dibagi menjadi arah panjang dan pendek: 1. Kondisi panjang: Ketika harga penutupan melanggar EMA9 dari bawah, dan garis DIF MACD melintasi di atas garis DEA, sistem menghasilkan sinyal panjang. 2. Kondisi pendek: Ketika harga penutupan melanggar di bawah EMA9 dari atas, dan garis DIF MACD melintasi di bawah garis DEA, sistem menghasilkan sinyal pendek. Manajemen Risiko: - Stop-loss posisi panjang ditetapkan di bawah titik terendah dari 5 lilin sebelumnya - Posisi pendek stop-loss diatur di atas titik tertinggi dari 5 lilin sebelumnya - target keuntungan ditetapkan pada 3,5 kali jarak stop-loss

Keuntungan Strategi

  1. Mekanisme konfirmasi ganda: Melalui sinergi EMA dan MACD, secara efektif menyaring sinyal palsu dan meningkatkan akurasi perdagangan.
  2. Adaptive stop loss: Posisi stop loss berdasarkan volatilitas harga baru-baru ini secara otomatis disesuaikan dengan volatilitas pasar.
  3. Rasio risiko-balasan yang jelas: Pengaturan risiko-balasan yang tetap 3,5:1 membantu mencapai keuntungan stabil jangka panjang.
  4. Logika strategi yang jelas: Kondisi masuk dan keluar eksplisit, mudah dimengerti dan dilaksanakan.
  5. Kemampuan beradaptasi yang tinggi: Parameter dapat disesuaikan sesuai dengan kondisi pasar yang berbeda.

Risiko Strategi

  1. Risiko pasar bergolak: Pelanggaran palsu yang sering dapat terjadi di pasar sampingan, yang mengarah pada stop-loss berturut-turut.
  2. Risiko tergelincir: Di pasar yang bergerak cepat, harga stop loss dan profit yang sebenarnya dapat menyimpang dari harapan.
  3. Sensitivitas parameter: pengaturan periode EMA dan MACD memiliki dampak yang signifikan pada kinerja strategi.
  4. Trend Dependency: Strategi mungkin tidak bekerja dengan baik di pasar tanpa tren yang jelas.

Arah Optimasi Strategi

  1. Tambahkan filter tren: Masukkan indikator tren jangka panjang untuk hanya berdagang dalam arah tren utama.
  2. Multiplikator risiko dinamis: Mengatur rasio risiko-manfaat secara otomatis berdasarkan volatilitas pasar.
  3. Filter waktu: Tambahkan filter waktu perdagangan untuk menghindari periode likuiditas rendah.
  4. Optimasi manajemen posisi: Sesuaikan ukuran posisi secara dinamis berdasarkan kekuatan sinyal.
  5. Memperkenalkan indikator volatilitas: Untuk penyesuaian jarak stop-loss secara dinamis.

Ringkasan

Strategi ini membangun sistem perdagangan tren lengkap melalui konfirmasi dua indikator teknis dan manajemen risiko yang ketat. Meskipun ada beberapa ketergantungan lingkungan pasar, strategi menunjukkan kemampuan beradaptasi dan stabilitas yang baik melalui optimasi parameter yang wajar dan manajemen risiko. Arah optimasi masa depan terutama berfokus pada peningkatan akurasi identifikasi tren dan dinamika manajemen risiko untuk meningkatkan kinerja strategi secara keseluruhan.


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

Berkaitan

Lebih banyak