Strategi Mengikuti Tren Lintas Ganda: Sistem Perdagangan Kolaboratif Rata-rata Pergerakan Indeks dan MACD

EMA MACD DIF DEA TP SL RR
Tanggal Pembuatan: 2025-01-17 16:06:16 Akhirnya memodifikasi: 2025-01-17 16:06:16
menyalin: 0 Jumlah klik: 374
1
fokus pada
1617
Pengikut

Strategi Mengikuti Tren Lintas Ganda: Sistem Perdagangan Kolaboratif Rata-rata Pergerakan Indeks dan MACD

Ringkasan

Strategi ini adalah sistem perdagangan pelacakan tren yang menggabungkan indikator teknis ganda rata-rata pergerakan dan MACD. Ia terutama menangkap tren pasar melalui perpotongan rata-rata pergerakan EMA9 dan harga, serta perpotongan garis cepat (DIF) dan garis lambat (DEA) dalam indikator MACD. Pada saat yang sama, strategi ini mengadopsi metode stop-loss adaptif berdasarkan 5 garis K terakhir dan menggunakan rasio risiko-pengembalian 3,5 kali untuk menetapkan target laba, membentuk sistem perdagangan yang lengkap.

Prinsip Strategi

Logika inti dari strategi ini dibagi menjadi dua arah: panjang dan pendek:

  1. Kondisi panjang: Ketika harga penutupan menembus EMA9 dari bawah ke atas, dan garis DIF MACD melintasi garis DEA dari bawah ke atas, sistem mengirimkan sinyal panjang.
  2. Kondisi penjualan pendek: Ketika harga penutupan turun di bawah EMA9 dari atas ke bawah, dan garis DIF MACD melintasi garis DEA dari atas ke bawah, sistem mengirimkan sinyal penjualan pendek.
  3. Manajemen Risiko:
    • Stop loss order long ditetapkan di bawah titik terendah dari 5 garis K sebelumnya
    • Stop loss untuk order short ditetapkan di atas titik tertinggi dari 5 garis K sebelumnya
    • Target keuntungan adalah 3,5 kali jarak stop loss

Keunggulan Strategis

  1. Mekanisme konfirmasi ganda: Melalui kerja sama terkoordinasi antara rata-rata pergerakan dan MACD, sinyal palsu dapat disaring secara efektif dan akurasi transaksi dapat ditingkatkan.
  2. Stop loss adaptif: Level stop loss yang ditetapkan berdasarkan fluktuasi harga terkini dapat secara otomatis menyesuaikan posisi perlindungan menurut volatilitas pasar.
  3. Rasio risiko-pengembalian yang jelas: Pengaturan risiko-pengembalian tetap sebesar 3,5 kali membantu mencapai laba yang stabil dalam jangka panjang.
  4. Logika strateginya jelas: kondisi masuk dan keluar jelas, mudah dipahami dan dijalankan.
  5. Kemampuan beradaptasi yang kuat: parameter dapat disesuaikan menurut berbagai kondisi pasar.

Risiko Strategis

  1. Risiko pasar yang fluktuatif: Penembusan palsu dapat sering terjadi di pasar yang menyamping dan fluktuatif, yang menyebabkan stop loss terus-menerus.
  2. Risiko tergelincir: Dalam pasar yang cepat, harga stop loss dan laba aktual mungkin menyimpang dari yang diharapkan.
  3. Sensitivitas parameter: Pengaturan periode EMA dan MACD memiliki dampak besar pada kinerja strategi.
  4. Ketergantungan Tren: Strategi mungkin berkinerja buruk di lingkungan pasar tanpa tren yang jelas.

Arah optimasi strategi

  1. Tambahkan filter tren: Anda dapat memperkenalkan indikator tren dengan periode yang lebih panjang dan membuka posisi hanya dalam arah tren utama.
  2. Dynamic Risk Multiple: Secara otomatis menyesuaikan rasio risiko-imbal hasil berdasarkan volatilitas pasar.
  3. Filter waktu: Tambahkan filter periode waktu perdagangan untuk menghindari periode likuiditas rendah.
  4. Optimalisasi manajemen posisi: rasio posisi dapat disesuaikan secara dinamis berdasarkan kekuatan sinyal.
  5. Memperkenalkan indikator volatilitas: digunakan untuk menyesuaikan jarak stop loss secara dinamis.

Meringkaskan

Strategi ini membangun sistem perdagangan pelacakan tren yang lengkap melalui konfirmasi ganda indikator teknis dan manajemen risiko yang ketat. Meskipun ada tingkat ketergantungan tertentu pada lingkungan pasar, strategi tersebut menunjukkan kemampuan beradaptasi dan stabilitas yang baik melalui optimalisasi parameter dan manajemen risiko yang wajar. Arah pengoptimalan selanjutnya terutama akan berfokus pada akurasi identifikasi tren dan dinamika manajemen risiko untuk meningkatkan kinerja strategi secara keseluruhan.

Kode Sumber 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")