Sumber daya yang dimuat... Pemuatan...

Dual MACD Price Action Breakout Trailing Strategi

Penulis:ChaoZhang, Tanggal: 2024-11-25 11:15:50
Tag:MACDATR

img

Gambaran umum

Ini adalah strategi perdagangan yang menggabungkan indikator MACD ganda dengan analisis aksi harga. Strategi ini mengidentifikasi tren pasar melalui perubahan warna dalam histogram MACD pada jangka waktu 15 menit, mencari pola lilin yang kuat pada jangka waktu 5 menit, dan mengkonfirmasi sinyal breakout pada jangka waktu 1 menit.

Prinsip Strategi

Strategi ini menggunakan dua indikator MACD dengan parameter yang berbeda (34/144/9 dan 100/200/50) untuk mengkonfirmasi tren pasar. Ketika kedua histogram MACD menunjukkan tren warna yang sama, sistem mencari pola lilin yang kuat pada grafik 5 menit, yang ditandai dengan badan 1,5 kali lebih besar dari bayangan mereka. Setelah lilin yang kuat diidentifikasi, sistem memantau untuk pecah pada grafik 1 menit. Posisi dibuka ketika harga pecah di atas puncak dalam tren naik atau di bawah terendah dalam tren turun. Stops ditetapkan berdasarkan ATR, sementara kelipatan 1.5x ATR digunakan untuk mengambil keuntungan dinamis.

Keuntungan Strategi

  1. Analisis multi-frame waktu: Menggabungkan jangka waktu 15 menit, 5 menit, dan 1 menit untuk meningkatkan keandalan sinyal
  2. Konfirmasi tren: Menggunakan validasi silang MACD ganda untuk mengurangi sinyal palsu
  3. Analisis aksi harga: Mengidentifikasi tingkat harga utama melalui pola lilin yang kuat
  4. Manajemen risiko dinamis: mekanisme stop-loss dan trailing take-profit adaptif berdasarkan ATR
  5. Penyaringan sinyal: Kondisi masuk yang ketat mengurangi perdagangan palsu
  6. Otomatisasi tinggi: Perdagangan otomatis sepenuhnya mengurangi intervensi manusia

Risiko Strategi

  1. Risiko pembalikan tren: Pencegahan palsu mungkin terjadi di pasar yang sangat volatile
  2. Risiko slippage: Perdagangan frekuensi tinggi pada jangka waktu 1 menit mungkin mengalami slippage
  3. Risiko overtrading: Sinyal yang sering dapat menyebabkan perdagangan yang berlebihan
  4. Ketergantungan pada lingkungan pasar: Mungkin berkinerja buruk di berbagai pasar Langkah-langkah mitigasi:
  • Tambahkan filter tren
  • Menetapkan ambang batas volatilitas minimum
  • Menerapkan batas frekuensi perdagangan
  • Memperkenalkan pengakuan lingkungan pasar

Arahan Optimasi

  1. Optimasi parameter MACD: Sesuaikan parameter MACD berdasarkan karakteristik pasar
  2. Optimasi stop-loss: Pertimbangkan untuk menambahkan stop dinamis berbasis volatilitas
  3. Filter waktu perdagangan: Tambahkan pembatasan jendela perdagangan
  4. Manajemen Posisi: Menerapkan mekanisme masuk dan keluar skala
  5. Penyaringan lingkungan pasar: Tambahkan indikator kekuatan tren
  6. Pengendalian penggunaan: Memperkenalkan pengendalian risiko berdasarkan kurva ekuitas

Ringkasan

Ini adalah sistem strategi yang komprehensif yang menggabungkan analisis teknis dan manajemen risiko. Ini memastikan kualitas perdagangan melalui analisis multi-frame waktu dan penyaringan sinyal yang ketat sambil secara efektif mengelola risiko melalui berhenti dinamis dan keuntungan yang tertinggal. Strategi ini menunjukkan kemampuan beradaptasi yang kuat tetapi membutuhkan optimasi terus-menerus berdasarkan kondisi pasar. Untuk perdagangan langsung, backtesting menyeluruh dan optimasi parameter dianjurkan, bersama dengan penyesuaian berdasarkan karakteristik pasar tertentu.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-11-24 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=5
strategy("Price Action + Double MACD Strategy with ATR Trailing", overlay=true)

// Inputs for MACD
fastLength1 = input.int(34, title="First MACD Fast Length")
slowLength1 = input.int(144, title="First MACD Slow Length")
signalLength1 = input.int(9, title="First MACD Signal Length")

fastLength2 = input.int(100, title="Second MACD Fast Length")
slowLength2 = input.int(200, title="Second MACD Slow Length")
signalLength2 = input.int(50, title="Second MACD Signal Length")

// Input for ATR Trailing
atrMultiplier = input.float(1.5, title="ATR Multiplier for Trailing")

// Inputs for Stop Loss
atrStopMultiplier = input.float(1.0, title="ATR Multiplier for Stop Loss")

// MACD Calculations
[macdLine1, signalLine1, macdHist1] = ta.macd(close, fastLength1, slowLength1, signalLength1)
[macdLine2, signalLine2, macdHist2] = ta.macd(close, fastLength2, slowLength2, signalLength2)

// Get 15M MACD histogram colors
macdHist1Color = request.security(syminfo.tickerid, "15", (macdHist1 >= 0 ? (macdHist1[1] < macdHist1 ? #26A69A : #B2DFDB) : (macdHist1[1] < macdHist1 ? #FFCDD2 : #FF5252)))
macdHist2Color = request.security(syminfo.tickerid, "15", (macdHist2 >= 0 ? (macdHist2[1] < macdHist2 ? #26A69A : #B2DFDB) : (macdHist2[1] < macdHist2 ? #FFCDD2 : #FF5252)))

// Check MACD color conditions
isMacdUptrend = macdHist1Color == #26A69A and macdHist2Color == #26A69A
isMacdDowntrend = macdHist1Color == #FF5252 and macdHist2Color == #FF5252

// Function to detect strong 5M candles
isStrongCandle(open, close, high, low) =>
    body = math.abs(close - open)
    tail = math.abs(high - low) - body
    body > tail * 1.5  // Ensure body is larger than the tail

// Variables to track state
var float fiveMinuteHigh = na
var float fiveMinuteLow = na
var bool tradeExecuted = false
var bool breakoutDetected = false
var float entryPrice = na
var float stopLossPrice = na
var float longTakeProfit = na
var float shortTakeProfit = na

// Check for new 15M candle and reset flags
if ta.change(time("15"))
    tradeExecuted := false      // Reset trade execution flag
    breakoutDetected := false  // Reset breakout detection
    if isStrongCandle(open[1], close[1], high[1], low[1])
        fiveMinuteHigh := high[1]
        fiveMinuteLow := low[1]
    else
        fiveMinuteHigh := na
        fiveMinuteLow := na

// Get 1-minute close prices
close1m = request.security(syminfo.tickerid, "5", close)

// Ensure valid breakout direction and avoid double breakouts
if not na(fiveMinuteHigh) and not breakoutDetected
    for i = 1 to 3
        if close1m[i] > fiveMinuteHigh and not tradeExecuted  // 1M breakout check with close
            breakoutDetected := true
            if isMacdUptrend 
                // Open Long trade
                entryPrice := close
                stopLossPrice := close - (atrStopMultiplier * ta.atr(14))  // ATR-based stop loss
                longTakeProfit := close + (atrMultiplier * ta.atr(14)) // Initialize take profit

                strategy.entry("Long", strategy.long)
                tradeExecuted := true
            break // Exit the loop after detecting a breakout

        else if close1m[i] < fiveMinuteLow and not tradeExecuted  // 1M breakout check with close
            breakoutDetected := true
            if isMacdDowntrend
                // Open Short trade
                entryPrice := close
                stopLossPrice := close + (atrStopMultiplier * ta.atr(14))  // ATR-based stop loss
                shortTakeProfit := close - (atrMultiplier * ta.atr(14)) // Initialize take profit

                strategy.entry("Short", strategy.short)
                tradeExecuted := true
            break // Exit the loop after detecting a breakout

// Update trailing take-profit dynamically
if tradeExecuted and strategy.position_size > 0  // Long trade
    longTakeProfit := math.max(longTakeProfit, close + (atrMultiplier * ta.atr(14)))
    strategy.exit("Long TP/SL", "Long", stop=stopLossPrice, limit=longTakeProfit)

else if tradeExecuted and strategy.position_size < 0  // Short trade
    shortTakeProfit := math.min(shortTakeProfit, close - (atrMultiplier * ta.atr(14)))
    strategy.exit("Short TP/SL", "Short", stop=stopLossPrice, limit=shortTakeProfit)

// Reset trade state when position is closed
if strategy.position_size == 0
    tradeExecuted := false
    entryPrice := na
    longTakeProfit := na
    shortTakeProfit := na

Berkaitan

Lebih banyak