Strategi Perdagangan Swing Momentum

Penulis:ChaoZhang, Tarikh: 2024-02-05 10:44:19
Tag:

img

Ringkasan

Ini adalah strategi perdagangan swing selang hari berdasarkan teknik momentum menggunakan ATR Stops.

Strategi itu mengenal pasti arah trend menggunakan penunjuk momentum dan menetapkan garis stop loss berdasarkan ATR untuk melaksanakan perdagangan swing low-buy-high-sell.

Logika Strategi

Kod pertama menetapkan julat masa backtesting.

Kemudian dalam bahagian penunjuk, penunjuk berikut dikira:

  • atr(): mengira ATR untuk stop loss;
  • max_/min_: harga tertinggi/terendah bar sebelumnya;
  • is_uptrend: menilai sama ada ia dalam trend menaik;
  • vstop: garis stop loss;

Logik utama untuk menilai trend adalah:

Jika penutupan lebih tinggi daripada barisan stop loss ke bawah sebelumnya, ia dinilai sebagai trend menaik; jika penutupan lebih rendah daripada barisan stop loss ke atas sebelumnya, ia dinilai sebagai trend menurun.

Apabila trend berubah, sesuaikan kedudukan garis stop loss.

Khususnya, dalam trend menaik, garis stop loss ditetapkan pada harga tertinggi bar sebelumnya dikurangkan nilai ATR; dalam trend menurun, garis stop loss ditetapkan pada harga terendah bar sebelumnya ditambah nilai ATR.

Ini merealisasikan trend selepas stop loss.

Dalam seksyen peraturan perdagangan, buka kedudukan panjang/pendek apabila harga melanggar garis stop loss.

Analisis Kelebihan

Kelebihan strategi ini:

  1. Menghakimi arah trend menggunakan teknik momentum, tepat pada masanya menangkap titik perubahan dan mengelakkan pecah palsu.
  2. ATR stop loss mengesan harga tertinggi / terendah, boleh mengawal risiko dengan baik.
  3. Logik strategi yang mudah dan jelas, mudah difahami dan dilaksanakan.
  4. Boleh membuat perdagangan jual-beli rendah antara swing.

Analisis Risiko

Terdapat juga beberapa risiko:

  1. Parameter ATR yang tidak betul boleh menyebabkan stop loss terlalu longgar atau terlalu ketat.
  2. Whipsaws yang ganas mungkin berlaku dalam trend yang berbeza, menyebabkan stop loss berturut-turut.
  3. Frekuensi perdagangan yang tinggi, komisen yang lebih tinggi.

Beberapa pengoptimuman:

  1. Uji parameter ATR yang berbeza untuk mencari yang optimum.
  2. Mengoptimumkan stop loss menggabungkan metrik turun naik di atas ATR.
  3. Tambah penapis trend untuk mengelakkan dagangan yang tidak perlu semasa pasaran bergolak.

Arahan pengoptimuman

Beberapa arah untuk mengoptimumkan strategi ini:

  1. Uji parameter ATR yang berbeza untuk mencari yang optimum. Uji semula pelbagai set parameter dan menilai nisbah pulangan / risiko.

  2. Mengoptimumkan stop loss menggabungkan metrik turun naik di atas ATR. Tambah metrik turun naik, santai stop loss dengan betul semasa tempoh peningkatan turun naik.

  3. Tambah penapis trend untuk mengelakkan dagangan semasa pasaran yang bergolak. Tambah penunjuk penilaian trend, hanya berdagang apabila trend jelas.

  4. Tambah mekanisme saiz kedudukan. Sesuaikan saiz kedudukan berdasarkan nisbah penggunaan akaun, masa henti rugi berturut-turut dan lain-lain.

  5. Tambah kawalan risiko selang semalam.

Kesimpulan

Sebagai strategi perdagangan swing harian asas, logik keseluruhan jelas. Ia menilai trend dengan teknik momentum dan menggunakan ATR untuk menghentikan kerugian, mengawal risiko dengan berkesan.

Masih banyak ruang untuk pengoptimuman, boleh diperbaiki dari aspek seperti penghakiman trend, kaedah stop loss, saiz kedudukan dan lain-lain untuk menjadikan strategi lebih praktikal. Secara keseluruhan strategi ini menyediakan rangka kerja yang kukuh untuk perdagangan kuantitatif.


/*backtest
start: 2023-01-29 00:00:00
end: 2024-02-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("BTC Swinger", overlay=true, commission_value = 0.25, default_qty_type=strategy.percent_of_equity, default_qty_value = 100)

/////////////////////////////////////////////////////////////
//START - SET DATE RANGE

// === BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1)
FromDay   = input(defval = 1, title = "From Day", minval = 1)
FromYear  = input(defval = 2010, title = "From Year")
ToMonth   = input(defval = 12, title = "To Month", minval = 1)
ToDay     = input(defval = 31, title = "To Day", minval = 1)
ToYear    = input(defval = 2020, title = "To Year")

startDate = time > timestamp(FromYear, FromMonth, FromDay, 1, 1)
endDate = time < timestamp(ToYear, ToMonth, ToDay, 23, 59)
withinTimeRange = true

/////////////////////////////////////////////////////////////
//END - SET DATE RANGE



/////////////////////////////////////////////////////////////
//START - INDICATORS

length = input(3)
mult = input(1, minval = 0.01)
atr_ = atr(length)
max1 = max(nz(max_[1]), close)
min1 = min(nz(min_[1]), close)
is_uptrend_prev = nz(is_uptrend[1], true)
stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev = nz(vstop[1])
vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend = close - vstop1 >= 0
is_trend_changed = is_uptrend != is_uptrend_prev
max_ = is_trend_changed ? close : max1
min_ = is_trend_changed ? close : min1
vstop = is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? yellow : red, style=circles, linewidth=2)

/////////////////////////////////////////////////////////////
//END - INDICATORS



/////////////////////////////////////////////////////////////
//START - TRADING RULES
direction = input(defval=1, title = "Strategy Direction", minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

condition1 = close > vstop and withinTimeRange
condition2 = close < vstop and withinTimeRange

strategy.entry("BUY", strategy.long, when = condition1)
strategy.entry("SELL", strategy.short, when = condition2)

/////////////////////////////////////////////////////////////
//END - TRADING RULES

Lebih lanjut