Dwi MACD Price Action Breakout Strategi Mengikuti

MACD ATR
Tarikh penciptaan: 2024-11-25 11:15:50 Akhirnya diubah suai: 2024-11-25 11:15:50
Salin: 1 Bilangan klik: 532
1
fokus pada
1617
Pengikut

Dwi MACD Price Action Breakout Strategi Mengikuti

Gambaran keseluruhan

Ini adalah strategi perdagangan yang menggabungkan indikator MACD berganda dan analisis tingkah laku harga. Strategi ini menentukan trend pasaran dengan mengamati perubahan warna carta lurus MACD berganda pada kitaran 15 minit, sambil mencari bentuk ketegangan yang kuat pada kitaran 5 minit, dan mengesahkan isyarat penembusan pada kitaran 1 minit. Strategi ini menggunakan mekanisme stop loss dan penjejakan ketegangan dinamik berasaskan ATR untuk memaksimumkan ruang keuntungan sambil menguruskan risiko dengan berkesan.

Prinsip Strategi

Strategi menggunakan dua set penunjuk MACD dengan parameter yang berbeza ((34/144/9 dan 100/200/50) untuk mengesahkan trend pasaran. Apabila kedua-dua carta lurus MACD menunjukkan trend warna yang sama, sistem akan mencari bentuk gelung kuat pada carta 5 minit, yang dicirikan oleh entiti yang lebih besar daripada 1.5 kali garis bayangan. Setelah mencari gelung kuat, sistem akan memantau pada carta 1 minit untuk melihat apakah terdapat penembusan.

Kelebihan Strategik

  1. Analisis pelbagai kitaran: menggabungkan tiga kitaran masa 15 minit, 5 minit dan 1 minit untuk meningkatkan kebolehpercayaan isyarat
  2. Pengesahan Trend: Menggunakan Double MACD Cross Verification untuk mengurangkan isyarat palsu
  3. Analisis tingkah laku harga: mengenal pasti tahap harga kritikal melalui corak kejatuhan kuat
  4. Pengurusan Risiko Dinamis: Mekanisme Stop Loss dan Tracking Stop yang Berasaskan ATR
  5. Penapisan isyarat: Syarat kemasukan yang ketat mengurangkan kesilapan
  6. Tingkat automasi yang tinggi: Automasi keseluruhan transaksi, mengurangkan campur tangan manusia

Risiko Strategik

  1. Risiko trend reversal: kemungkinan terobosan palsu dalam pasaran yang bergolak
  2. Risiko slippage: Perdagangan frekuensi tinggi dalam kitaran 1 minit mungkin menghadapi kesan slippage
  3. Risiko Overtrading: Isyarat yang kerap boleh menyebabkan overtrading
  4. Kepercayaan kepada keadaan pasaran: Mungkin kurang baik dalam keadaan pasaran yang bergolak Langkah-langkah mitigasi:
  • Tambah penapis trend
  • Tetapkan had turun naik minimum
  • Tambah had transaksi
  • Memperkenalkan mekanisme pengenalan persekitaran pasaran

Arah pengoptimuman strategi

  1. Optimumkan parameter MACD: Parameter MACD boleh disesuaikan mengikut ciri-ciri pasaran yang berbeza
  2. Pengoptimuman Hentikan Kerosakan: Pertimbangkan untuk menambah Hentikan Bergerak Berasaskan Kadar Fluktuasi
  3. Penapisan masa dagangan: Tambah sekatan tetingkap masa dagangan
  4. Pengurusan lokasi: mewujudkan mekanisme pembinaan dan pengeluaran
  5. Penapisan keadaan pasaran: penambahan penunjuk kekuatan trend
  6. Kawalan penarikan balik: memperkenalkan mekanisme kawalan risiko berdasarkan kurva hak dan kepentingan

ringkaskan

Ini adalah sistem strategi yang menggunakan analisis teknikal dan pengurusan risiko secara komprehensif. Ia memastikan kualiti perdagangan melalui analisis pelbagai kitaran dan penapisan isyarat yang ketat, sambil menggunakan risiko pengurusan yang berkesan dengan menghentikan kerugian dinamik dan mengesan mekanisme hentian.

Kod sumber strategi
/*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