Sumber dimuat naik... memuat...

Trend silang berganda Mengikut Strategi: EMA dan Sistem Dagangan Sinergik MACD

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

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

Ringkasan

Strategi ini adalah sistem perdagangan mengikut trend yang menggabungkan penunjuk teknikal dual EMA dan MACD. Ia menangkap trend pasaran melalui persilangan EMA9 dengan harga dan persilangan garis cepat MACD (DIF) dengan garis perlahan (DEA). Strategi ini menggunakan stop-loss adaptif berdasarkan 5 lilin yang lalu dan menggunakan nisbah ganjaran risiko 3.5:1 untuk sasaran keuntungan, membentuk sistem perdagangan yang lengkap.

Prinsip Strategi

Logik teras dibahagikan kepada arah panjang dan pendek: 1. Syarat panjang: Apabila harga penutupan memecahkan di atas EMA9 dari bawah, dan garis DIF MACD melintasi di atas garis DEA, sistem menghasilkan isyarat panjang. 2. Keadaan pendek: Apabila harga penutupan memecahkan di bawah EMA9 dari atas, dan garis DIF MACD melintasi di bawah garis DEA, sistem menghasilkan isyarat pendek. 3. Pengurusan Risiko: - Stop-loss kedudukan panjang ditetapkan di bawah titik terendah 5 lilin sebelumnya - Stop-loss kedudukan pendek ditetapkan di atas titik tertinggi 5 lilin sebelumnya - Sasaran keuntungan ditetapkan pada 3.5 kali jarak stop-loss

Kelebihan Strategi

  1. Mekanisme pengesahan berganda: Melalui sinergi EMA dan MACD, berkesan menapis isyarat palsu dan meningkatkan ketepatan perdagangan.
  2. Stop-loss adaptif: Posisi stop-loss berdasarkan turun naik harga baru-baru ini menyesuaikan secara automatik mengikut turun naik pasaran.
  3. Nisbah risiko-balasan yang jelas: Tetapan risiko-balasan tetap 3.5:1 membantu mencapai keuntungan yang stabil dalam jangka panjang.
  4. Logik strategi yang jelas: Syarat masuk dan keluar jelas, mudah difahami dan dilaksanakan.
  5. Kemudahan penyesuaian yang tinggi: Parameter boleh diselaraskan mengikut keadaan pasaran yang berbeza.

Risiko Strategi

  1. Risiko pasaran bergolak: Pelanggaran palsu yang kerap boleh berlaku di pasaran sampingan, yang membawa kepada stop-loss berturut-turut.
  2. Risiko tergelincir: Di pasaran yang bergerak cepat, harga stop loss dan keuntungan sebenar mungkin menyimpang dari jangkaan.
  3. Sensitiviti parameter: Tetapan tempoh EMA dan MACD mempunyai kesan yang signifikan terhadap prestasi strategi.
  4. Kebergantungan trend: Strategi mungkin tidak berjaya di pasaran tanpa trend yang jelas.

Arahan Pengoptimuman Strategi

  1. Tambah penapis trend: Masukkan penunjuk trend jangka panjang untuk hanya berdagang dalam arah trend utama.
  2. Pengganda risiko dinamik: Sesuaikan nisbah risiko-balasan secara automatik berdasarkan turun naik pasaran.
  3. Penapis masa: Tambah penapis masa dagangan untuk mengelakkan tempoh kecairan yang rendah.
  4. Pengoptimuman pengurusan kedudukan: Sesuaikan saiz kedudukan secara dinamik berdasarkan kekuatan isyarat.
  5. Memperkenalkan penunjuk turun naik: Untuk pelarasan dinamik jarak stop-loss.

Ringkasan

Strategi ini membina sistem perdagangan trend yang lengkap melalui pengesahan dua indikator teknikal dan pengurusan risiko yang ketat. Walaupun terdapat beberapa pergantungan persekitaran pasaran, strategi ini menunjukkan kemampuan beradaptasi dan kestabilan yang baik melalui pengoptimuman parameter yang munasabah dan pengurusan risiko. Arah pengoptimuman masa depan terutamanya memberi tumpuan kepada meningkatkan ketepatan pengenalan trend dan dinamik pengurusan risiko untuk meningkatkan prestasi keseluruhan strategi.


/*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 lanjut