Strategi Menelan Volatilitas Dua Arah

Penulis:ChaoZhang, Tanggal: 2023-11-21 12:04:19
Tag:

img

Gambaran umum

Strategi ini adalah strategi perdagangan dua arah yang melacak volatilitas. Ini menggunakan indikator Average True Range (ATR) untuk mengatur stop loss dan menentukan arah tren berdasarkan harga yang menembus level stop loss.

Logika Strategi

Strategi ini menggunakan ATR 3 hari untuk menghitung volatilitas. Nilai ATR dikalikan dengan koefisien digunakan sebagai level stop loss. Ketika harga berada di atas level stop loss, ia menilai sebagai uptrend dan menutup posisi panjang ketika harga jatuh di bawah level stop loss. Ketika harga berada di bawah level stop loss, ia menilai sebagai downtrend dan menutup posisi pendek ketika harga naik di atas level stop loss. Ia membuka posisi terbalik ketika tren berubah.

Analisis Keuntungan

  • Menggunakan ATR untuk melacak volatilitas pasar secara dinamis dan mengurangi kemungkinan stop loss dipukul
  • Keuntungan perdagangan dua arah dari fluktuasi pasar
  • Membuka posisi terbalik di awal perubahan tren untuk tingkat kemenangan yang lebih tinggi

Analisis Risiko

  • Volatilitas ekstrim dapat menyebabkan kegagalan stop loss karena ATR tertinggal
  • Risiko GAP ada untuk posisi panjang
  • Dapat memperdagangkan keuntungan kecil sering

Untuk mengurangi risiko: meningkatkan koefisien ATR untuk tingkat stop yang lebih luas, membatasi frekuensi perdagangan, menetapkan tingkat minimum mengambil keuntungan, dll.

Arahan Optimasi

  • Menggabungkan indikator lain untuk sinyal perubahan tren
  • Mengoptimalkan parameter ATR
  • Tambahkan kontrol ukuran perdagangan

Ringkasan

Ini adalah strategi trailing stop dua arah yang stabil secara keseluruhan. ATR menetapkan tingkat stop dinamis untuk mengendalikan penarikan. Perdagangan dua arah juga meningkatkan peluang keuntungan. Optimasi lebih lanjut dapat membuat strategi lebih kuat, meningkatkan kemampuan mengikuti tren.


/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("BCH Swinger v1", 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 = 2017, title = "From Year")
ToMonth   = input(defval = 10, title = "To Month", minval = 1)
ToDay     = input(defval = 01, 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