Momentum Swing Trading Strategy

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

img

Gambaran umum

Ini adalah strategi perdagangan swing interval harian berdasarkan teknik momentum menggunakan ATR Stops.

Strategi ini mengidentifikasi arah tren menggunakan indikator momentum dan menetapkan garis stop loss berdasarkan ATR untuk menerapkan perdagangan swing low buy-high sell.

Logika Strategi

Kode pertama menetapkan rentang waktu backtesting.

Kemudian di bagian indikator, indikator berikut dihitung:

  • atr(): menghitung ATR untuk stop loss;
  • max_/min_: harga tertinggi/terendah dari bar sebelumnya;
  • is_uptrend: menilai apakah itu dalam tren naik;
  • vstop: garis stop loss;

Logika utama untuk menilai tren adalah:

Jika penutupan lebih tinggi dari garis stop loss ke bawah sebelumnya, itu dinilai sebagai tren naik; jika penutupan lebih rendah dari garis stop loss ke atas sebelumnya, itu dinilai sebagai tren turun.

Ketika tren berubah, sesuaikan posisi stop loss line.

Secara khusus, dalam tren naik, garis stop loss ditetapkan pada harga tertinggi dari bar sebelumnya dikurangi nilai ATR; dalam tren turun, garis stop loss ditetapkan pada harga terendah dari bar sebelumnya ditambah nilai ATR.

Ini mewujudkan tren setelah stop loss.

Dalam bagian aturan perdagangan, buka posisi panjang/pendek ketika harga melanggar garis stop loss.

Analisis Keuntungan

Keuntungan dari strategi ini:

  1. Menghakimi arah tren menggunakan teknik momentum, tepat waktu menangkap titik balik dan menghindari pecah palsu.
  2. ATR stop loss melacak harga tertinggi / terendah, dapat mengendalikan risiko dengan baik.
  3. Logika strategi yang sederhana dan jelas, mudah dipahami dan diimplementasikan.
  4. Dapat membuat perdagangan jual-beli rendah antara ayunan.

Analisis Risiko

Ada juga beberapa risiko:

  1. Parameter ATR yang tidak tepat dapat menyebabkan stop loss terlalu longgar atau terlalu ketat.
  2. Whipsaws yang ganas dapat terjadi dalam tren yang berkisar, menyebabkan stop loss berturut-turut.
  3. Frekuensi perdagangan yang tinggi, komisi yang lebih tinggi.

Beberapa optimasi:

  1. Uji parameter ATR yang berbeda untuk menemukan yang optimal.
  2. Mengoptimalkan stop loss dengan menggabungkan metrik volatilitas di atas ATR.
  3. Tambahkan filter tren untuk menghindari perdagangan yang tidak perlu selama pasar bergolak.

Arahan Optimasi

Beberapa arah untuk mengoptimalkan strategi ini:

  1. Uji parameter ATR yang berbeda untuk menemukan yang optimal. Uji ulang beberapa set parameter dan evaluasi rasio pengembalian / risiko.

  2. Optimalkan stop loss dengan menggabungkan metrik volatilitas di atas ATR. Tambahkan metrik volatilitas, santai stop loss dengan benar selama periode meningkatnya volatilitas.

  3. Tambahkan filter tren untuk menghindari perdagangan selama pasar bergolak Tambahkan indikator penilaian tren, hanya perdagangan ketika tren jelas.

  4. Tambahkan mekanisme ukuran posisi. Sesuaikan ukuran posisi berdasarkan rasio pemanfaatan akun, waktu stop loss berturut-turut dll.

  5. Tambahkan pengendalian risiko gap overnight.

Kesimpulan

Sebagai strategi dasar perdagangan swing harian, logika keseluruhan jelas. Ini menilai tren dengan teknik momentum dan menggunakan ATR untuk trailing stop loss, secara efektif mengendalikan risiko.

Masih banyak ruang untuk optimasi, dapat ditingkatkan dari aspek seperti penilaian tren, metode stop loss, ukuran posisi dll untuk membuat strategi lebih praktis.


/*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 banyak