Strategi Mengikuti Trend Palang Berganda: Purata Pergerakan Indeks dan Sistem Perdagangan Kolaboratif MACD

EMA MACD DIF DEA TP SL RR
Tarikh penciptaan: 2025-01-17 16:06:16 Akhirnya diubah suai: 2025-01-17 16:06:16
Salin: 0 Bilangan klik: 123
1
fokus pada
1224
Pengikut

Strategi Mengikuti Trend Palang Berganda: Purata Pergerakan Indeks dan Sistem Perdagangan Kolaboratif MACD

Gambaran keseluruhan

Strategi ini ialah sistem perdagangan penjejakan arah aliran yang menggabungkan purata bergerak dan petunjuk teknikal dwi MACD. Ia terutamanya menangkap arah aliran pasaran melalui persimpangan purata pergerakan EMA9 dan harga, serta persimpangan garis cepat (DIF) dan garis perlahan (DEA) dalam penunjuk MACD. Pada masa yang sama, strategi ini menggunakan kaedah henti rugi adaptif berdasarkan 5 K-line yang lalu dan menggunakan nisbah pulangan risiko 3.5 kali untuk menetapkan sasaran keuntungan, membentuk sistem perdagangan yang lengkap.

Prinsip Strategi

Logik teras strategi dibahagikan kepada dua arah: panjang dan pendek:

  1. Keadaan panjang: Apabila harga penutup menembusi EMA9 dari bawah ke atas, dan garis DIF MACD melintasi garis DEA dari bawah ke atas, sistem menghantar isyarat panjang.
  2. Syarat jualan singkat: Apabila harga penutup jatuh di bawah EMA9 dari atas ke bawah, dan garis DIF MACD melintasi garis DEA dari atas ke bawah, sistem menghantar isyarat jualan pendek.
  3. Pengurusan Risiko:
    • Henti rugi pesanan panjang ditetapkan di bawah titik terendah garisan 5 K sebelumnya
    • Henti rugi untuk pesanan pendek ditetapkan di atas titik tertinggi 5 K-line sebelumnya
    • Sasaran keuntungan ialah 3.5 kali jarak stop loss

Kelebihan Strategik

  1. Mekanisme pengesahan berganda: Melalui kerjasama purata bergerak dan MACD yang diselaraskan, isyarat palsu boleh ditapis dengan berkesan dan ketepatan urus niaga boleh dipertingkatkan.
  2. Stop loss adaptif: Tahap stop loss yang ditetapkan berdasarkan turun naik harga terkini boleh melaraskan kedudukan perlindungan secara automatik mengikut turun naik pasaran.
  3. Nisbah pulangan risiko yang jelas: Tetapan pulangan risiko sebanyak 3.5 kali tetap membantu mencapai keuntungan yang stabil dalam jangka panjang.
  4. Logik strategi adalah jelas: syarat masuk dan keluar adalah jelas, mudah difahami dan dilaksanakan.
  5. Kebolehsuaian yang kuat: parameter boleh dilaraskan mengikut keadaan pasaran yang berbeza.

Risiko Strategik

  1. Risiko pasaran tidak menentu: Penembusan palsu mungkin kerap berlaku dalam pasaran mendatar dan tidak menentu, yang membawa kepada stop loss berterusan.
  2. Risiko gelinciran: Dalam pasaran yang pantas, harga stop loss dan keuntungan sebenar mungkin menyimpang daripada yang dijangkakan.
  3. Kepekaan parameter: Tetapan tempoh EMA dan MACD mempunyai kesan yang besar pada prestasi strategi.
  4. Kebergantungan Trend: Strategi mungkin berprestasi buruk dalam persekitaran pasaran tanpa arah aliran yang jelas.

Arah pengoptimuman strategi

  1. Tambah penapis arah aliran: Anda boleh memperkenalkan penunjuk arah aliran dengan tempoh yang lebih panjang dan kedudukan terbuka hanya ke arah arah aliran utama.
  2. Berbilang risiko dinamik: melaraskan nisbah pulangan risiko secara automatik berdasarkan turun naik pasaran.
  3. Penapis masa: Tambahkan penapis tempoh masa dagangan untuk mengelakkan tempoh kecairan yang rendah.
  4. Pengoptimuman pengurusan kedudukan: nisbah kedudukan boleh dilaraskan secara dinamik mengikut kekuatan isyarat.
  5. Memperkenalkan penunjuk turun naik: digunakan untuk melaraskan jarak henti kerugian secara dinamik.

ringkaskan

Strategi ini membina sistem perdagangan pengesanan arah aliran yang lengkap melalui pengesahan dwi petunjuk teknikal dan pengurusan risiko yang ketat. Walaupun terdapat tahap pergantungan tertentu pada persekitaran pasaran, strategi ini menunjukkan kebolehsuaian dan kestabilan yang baik melalui pengoptimuman parameter yang munasabah dan pengurusan risiko. Arah pengoptimuman seterusnya akan tertumpu terutamanya pada ketepatan pengecaman arah aliran dan dinamik pengurusan risiko untuk meningkatkan prestasi keseluruhan strategi.

Kod 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")