Sumber dimuat naik... memuat...

Dual MACD Price Action Breakout Trailing Strategi

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

img

Ringkasan

Ini adalah strategi dagangan yang menggabungkan penunjuk MACD berganda dengan analisis tindakan harga. Strategi ini mengenal pasti trend pasaran melalui perubahan warna dalam histogram MACD pada jangka masa 15 minit, mencari corak lilin yang kuat pada jangka masa 5 minit, dan mengesahkan isyarat pecah pada jangka masa 1 minit. Ia menggunakan mekanisme stop-loss dinamik berasaskan ATR dan mengambil keuntungan untuk menguruskan risiko dengan berkesan sambil memaksimumkan potensi keuntungan.

Prinsip Strategi

Strategi ini menggunakan dua penunjuk MACD dengan parameter yang berbeza (34/144/9 dan 100/200/50) untuk mengesahkan trend pasaran. Apabila kedua-dua histogram MACD menunjukkan trend warna yang sama, sistem mencari corak lilin yang kuat pada carta 5 minit, yang dicirikan oleh badan 1.5 kali lebih besar daripada bayang-bayang mereka. Setelah lilin yang kuat dikenal pasti, sistem memantau pecah pada carta 1 minit. Posisi dibuka apabila harga melanggar di atas paras tertinggi dalam trend menaik atau di bawah paras rendah dalam trend menurun. Hentian ditetapkan berdasarkan ATR, sementara kelipatan 1.5x ATR digunakan untuk mengambil keuntungan dinamik.

Kelebihan Strategi

  1. Analisis pelbagai jangka masa: Menggabungkan jangka masa 15 minit, 5 minit, dan 1 minit untuk meningkatkan kebolehpercayaan isyarat
  2. Pengesahan trend: Menggunakan pengesahan silang MACD berganda untuk mengurangkan isyarat palsu
  3. Analisis tindakan harga: Mengenal pasti tahap harga utama melalui corak lilin yang kuat
  4. Pengurusan risiko dinamik: Mekanisme stop-loss dan trailing take-profit adaptif berdasarkan ATR
  5. Penapisan isyarat: Syarat kemasukan yang ketat mengurangkan perdagangan palsu
  6. Automasi tinggi: Perdagangan automatik sepenuhnya mengurangkan campur tangan manusia

Risiko Strategi

  1. Risiko pembalikan trend: Peluang pecah palsu di pasaran yang sangat tidak menentu
  2. Risiko tergelincir: Perdagangan frekuensi tinggi pada jangka masa 1 minit mungkin menghadapi tergelincir
  3. Risiko perdagangan berlebihan: Isyarat yang kerap boleh membawa kepada perdagangan berlebihan
  4. Kebergantungan persekitaran pasaran: Mungkin kurang berprestasi di pasaran yang berbeza Langkah-langkah pengurangan:
  • Tambah penapis trend
  • Menetapkan ambang turun naik minimum
  • Melaksanakan had kekerapan perdagangan
  • Memperkenalkan pengiktirafan persekitaran pasaran

Arahan pengoptimuman

  1. Pengoptimuman parameter MACD: Sesuaikan parameter MACD berdasarkan ciri pasaran
  2. Pengoptimuman Stop-Loss: Pertimbangkan untuk menambah berhenti dinamik berdasarkan turun naik
  3. Penapis masa perdagangan: Tambah sekatan tetingkap perdagangan
  4. Pengurusan kedudukan: Melaksanakan mekanisme kemasukan dan keluar berskala
  5. Penapisan persekitaran pasaran: Tambah penunjuk kekuatan trend
  6. Kawalan pengambilan: Memperkenalkan kawalan risiko berasaskan kurva ekuiti

Ringkasan

Ini adalah sistem strategi yang komprehensif yang menggabungkan analisis teknikal dan pengurusan risiko. Ia memastikan kualiti perdagangan melalui analisis jangka masa berbilang dan penapisan isyarat yang ketat sambil menguruskan risiko dengan berkesan melalui hentian dinamik dan keuntungan yang tertinggal. Strategi ini menunjukkan kemampuan beradaptasi yang kuat tetapi memerlukan pengoptimuman berterusan berdasarkan keadaan pasaran. Untuk perdagangan langsung, pengujian balik dan pengoptimuman parameter yang menyeluruh disyorkan, bersama dengan penyesuaian berdasarkan ciri pasaran 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 lanjut