Strategi pengambilan untung multi-level EMA-ADX untuk pelacakan tren dinamis

EMA ADX ATR
Tanggal Pembuatan: 2025-02-18 14:08:02 Akhirnya memodifikasi: 2025-02-18 14:08:02
menyalin: 0 Jumlah klik: 405
1
fokus pada
1617
Pengikut

Strategi pengambilan untung multi-level EMA-ADX untuk pelacakan tren dinamis

Ringkasan

Strategi ini adalah sistem perdagangan pelacakan tren yang menggabungkan indikator EMA dan ADX untuk mengoptimalkan manajemen dana melalui multi-level stop loss dan stop loss bergerak. Strategi ini menggunakan garis rata EMA untuk menentukan arah tren, indikator ADX untuk memfilter kekuatan tren, dan merancang mekanisme stop loss tiga tingkat untuk membagi keuntungan, sambil menggunakan ATR untuk menyesuaikan posisi stop loss secara dinamis untuk mengendalikan risiko.

Prinsip Strategi

Logika inti dari strategi ini mencakup bagian-bagian utama berikut:

  1. Menggunakan 50 siklus EMA rata-rata untuk menentukan arah tren, harga menembus EMA di atas terbuka lebih, menembus di bawah terbuka
  2. Menyaring tren lemah melalui indikator ADX 14 periode, dan mengkonfirmasi tren efektif ketika ADX> 20
  3. Berdasarkan 14 siklus ATR menghitung posisi stop loss dinamis, plus satu ATR dikurangi pada harga terendah, dan satu ATR ditambah pada harga tertinggi
  4. Ada tiga lapisan penutup:
    • Lapisan pertama: 30% posisi di 1 kali lipat ATR
    • Lapisan kedua: 50% posisi di 2 kali lipat ATR.
    • Lapisan ketiga: 20% posisi menggunakan 3x ATR mobile stop
  5. Ketika harga mencapai posisi stop-loss tingkat dua, semua posisi yang tersisa akan dihapus secara otomatis

Keunggulan Strategis

  1. Desain multi-lapisan stopgap dapat mengunci keuntungan tepat waktu tanpa melewatkan acara besar
  2. Stop loss yang bergerak dapat beradaptasi dengan volatilitas pasar dan memberikan kontrol risiko yang dinamis
  3. Filter ADX efektif mencegah sinyal palsu dari pasar yang bergoyang
  4. EMA dan harga silang memberikan sinyal masuk yang jelas
  5. Penghentian batch mengurangi fluktuasi emosi dan mendukung pelaksanaan strategi jangka panjang

Risiko Strategis

  1. Keterlambatan dalam berdagang di pasar yang bergejolak dapat meningkatkan biaya.
  2. EMA sebagai indikator yang tertinggal mungkin tidak bereaksi tepat waktu saat berbalik dengan cepat
  3. Tanda ADX yang tetap mungkin perlu disesuaikan dengan kondisi pasar yang berbeda
  4. Multi-Layer Stoppers Mungkin Berposisi Lebih Awal dalam Tren Unilateral Tindakan mitigasi:
  • Nilai ADX terendah dapat disesuaikan dengan berbagai dinamika siklus pasar
  • Pertimbangkan untuk meningkatkan indikator konfirmasi tren
  • Optimasi parameter yang lebih halus untuk stop-loss ratio

Arah optimasi strategi

  1. Menggunakan indikator volume transaksi untuk meningkatkan konfirmasi tren
  2. Adaptasi ADX Thresholds Berdasarkan Tren Volatilitas Pasar
  3. Optimalkan rasio alokasi posisi di tingkat stop-loss
  4. Peningkatan intensitas tren untuk strategi stop-loss yang berbeda
  5. Pertimbangkan untuk menambahkan faktor musiman dan penilaian siklus pasar

Meringkaskan

Ini adalah strategi pelacakan tren yang terstruktur, logis, dan jelas, yang menyeimbangkan keuntungan dan risiko dengan beberapa tingkat stop loss dan stop loss dinamis. Strategi ini dirancang secara keseluruhan sesuai dengan prinsip-prinsip dasar perdagangan kuantitatif, dengan skalabilitas yang baik dan ruang untuk pengoptimalan.

Kode Sumber Strategi
/*backtest
start: 2024-03-06 18:40:00
end: 2025-02-17 00:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("BTC Optimized Strategy v6", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=250)

// === 參數設定 ===
lengthEMA = input(50, title="EMA 週期")
adxLength = input(14, title="ADX 週期")
atrLength = input(14, title="ATR 週期")
riskReward = input(2.0, title="風險報酬比")
tp1_ratio = input(1.0, title="TP1 (ATR 倍數)")
tp2_ratio = input(2.0, title="TP2 (ATR 倍數)")
trailATR = input(3.0, title="移動止盈 ATR 倍數")

// === 計算技術指標 ===
ema = ta.ema(close, lengthEMA)
atr = ta.atr(atrLength)

// === 計算 ADX ===
upMove = math.max(high - nz(high[1], high), 0)
downMove = math.max(nz(low[1], low) - low, 0)
tr = math.max(math.max(high - low, math.abs(high - nz(close[1], close))), math.abs(low - nz(close[1], close)))
plusDM = upMove > downMove and upMove > 0 ? upMove : 0
minusDM = downMove > upMove and downMove > 0 ? downMove : 0
plusDI = 100 * ta.rma(plusDM, adxLength) / ta.rma(tr, adxLength)
minusDI = 100 * ta.rma(minusDM, adxLength) / ta.rma(tr, adxLength)
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
adx = ta.rma(dx, adxLength)

// === 趨勢過濾條件 ===
isTrending = adx > 20

// === 進場條件 ===
longCondition = ta.crossover(close, ema) and isTrending
shortCondition = ta.crossunder(close, ema) and isTrending

// === 計算止損、止盈價格 ===
longStopLoss = low - atr
shortStopLoss = high + atr
longTP1 = close + tp1_ratio * atr
longTP2 = close + tp2_ratio * atr
shortTP1 = close - tp1_ratio * atr
shortTP2 = close - tp2_ratio * atr

// === 設定進場和出場 ===
if longCondition
    strategy.entry("Long", strategy.long)
    strategy.exit("Long_Exit1", from_entry="Long", qty_percent=30, limit=longTP1, stop=longStopLoss)
    strategy.exit("Long_Exit2", from_entry="Long", qty_percent=50, limit=longTP2, stop=longStopLoss)
    strategy.exit("Long_Trail", from_entry="Long", qty_percent=20, 
                 trail_points=atr * trailATR, 
                 trail_offset=atr * trailATR)

if shortCondition
    strategy.entry("Short", strategy.short)
    strategy.exit("Short_Exit1", from_entry="Short", qty_percent=30, limit=shortTP1, stop=shortStopLoss)
    strategy.exit("Short_Exit2", from_entry="Short", qty_percent=50, limit=shortTP2, stop=shortStopLoss)
    strategy.exit("Short_Trail", from_entry="Short", qty_percent=20, 
                 trail_points=atr * trailATR, 
                 trail_offset=atr * trailATR)

// === 當價格超過 TP2 後,自動平倉 ===
if close >= longTP2
    strategy.close("Long")

if close <= shortTP2
    strategy.close("Short")

// === 畫圖標示 ===
plotshape(series=longCondition, location=location.belowbar, color=color.blue, style=shape.labelup, title="買入")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, title="賣出")
plot(ema, color=color.orange, title="EMA")