Strategi penyerapan volatilitas dua arah


Tanggal Pembuatan: 2023-11-21 12:04:19 Akhirnya memodifikasi: 2023-11-21 12:04:19
menyalin: 0 Jumlah klik: 608
1
fokus pada
1621
Pengikut

Strategi penyerapan volatilitas dua arah

Ringkasan

Strategi ini adalah strategi perdagangan dua arah yang melacak fluktuasi. Ini menggunakan indikator ATR rata-rata fluktuasi riil untuk mengatur stop loss dan menentukan arah tren berdasarkan arah di mana harga menembus stop loss.

Prinsip Strategi

Strategi ini menggunakan 3 hari ATR untuk menghitung volatilitas. Nilai ATR dikalikan dengan faktor sebagai stop loss. Dianggap sebagai uptrend saat harga di atas stop loss, dan ditutup saat harga turun dan melewati stop loss. Dianggap sebagai uptrend saat harga di bawah stop loss, dan ditutup saat harga naik dan melewati stop loss.

Analisis Keunggulan

  • Menggunakan ATR untuk melacak volatilitas pasar secara dinamis, mengurangi kemungkinan terobosan stop loss
  • Perdagangan dua arah, untuk mendapatkan keuntungan dari pergerakan dua arah pasar
  • Pilih posisi terbalik di awal perubahan tren untuk meningkatkan probabilitas keuntungan

Analisis risiko

  • ATR tidak dapat mencerminkan fluktuasi yang sebenarnya, sehingga stop loss dapat ditembus.
  • Risiko GAP pada posisi multi-head
  • Mungkin sering melakukan transaksi kecil-kecilan

Untuk risiko, Anda dapat meningkatkan ATR dengan tepat, meningkatkan zona penangguhan, mengontrol frekuensi perdagangan, mengatur stop loss minimum, dll.

Arah optimasi

  • Sinyal perubahan tren dikombinasikan dengan indikator lain
  • Optimalisasi parameter ATR
  • Menambahkan kontrol volume transaksi

Meringkaskan

Strategi ini secara keseluruhan adalah strategi stop loss tracking bidirectional yang stabil. Dengan indikator ATR, posisi stop loss diatur secara dinamis, dan risiko penarikan dikendalikan. Sementara perdagangan bidirectional meningkatkan peluang keuntungan. Dengan pengoptimalan lebih lanjut, strategi ini dapat dibuat lebih stabil, dapat diandalkan, dan mampu mengikuti tren.

Kode Sumber Strategi
/*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