Strategi Mengambil Volatiliti Dua Arah

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

img

Ringkasan

Strategi ini adalah strategi perdagangan dua arah yang mengesan turun naik. Ia menggunakan penunjuk Julat Benar Purata (ATR) untuk menetapkan kerugian berhenti dan menentukan arah trend berdasarkan harga yang memecahkan tahap kerugian berhenti. Ia membuka kedudukan terbalik apabila arah trend berubah.

Logika Strategi

Strategi ini menggunakan ATR 3 hari untuk mengira turun naik. Nilai ATR yang dikalikan dengan pekali digunakan sebagai tahap stop loss. Apabila harga di atas tahap stop loss, ia menilai ia sebagai trend menaik dan menutup kedudukan panjang apabila harga jatuh di bawah tahap stop loss. Apabila harga di bawah tahap stop loss, ia menilai ia sebagai downtrend dan menutup kedudukan pendek apabila harga naik di atas tahap stop loss. Ia membuka kedudukan terbalik apabila trend berubah. Tahap stop loss dioptimumkan semasa trend dan disetel semula apabila trend berubah.

Analisis Kelebihan

  • Menggunakan ATR untuk menjejaki turun naik pasaran secara dinamik dan mengurangkan kemungkinan stop loss dipukul
  • Keuntungan perdagangan dua arah daripada turun naik pasaran
  • Membuka kedudukan terbalik awal dalam perubahan trend untuk kadar kemenangan yang lebih tinggi

Analisis Risiko

  • Volatiliti yang melampau boleh menyebabkan kegagalan stop loss apabila ATR tertinggal
  • Risiko GAP wujud untuk kedudukan panjang
  • Boleh berdagang keuntungan kecil dengan kerap

Untuk mengurangkan risiko: meningkatkan pekali ATR untuk tahap berhenti yang lebih luas, mengehadkan kekerapan perdagangan, menetapkan tahap mengambil keuntungan minimum, dll.

Arahan pengoptimuman

  • Menggabungkan penunjuk lain untuk isyarat perubahan trend
  • Mengoptimumkan parameter ATR
  • Tambah kawalan saiz perdagangan

Ringkasan

Ini adalah strategi hentian dua arah yang stabil secara keseluruhan. ATR menetapkan tahap hentian dinamik untuk mengawal penarikan. Dagangan dua arah juga meningkatkan peluang keuntungan. Pengoptimuman lanjut boleh menjadikan strategi lebih mantap, meningkatkan keupayaan mengikuti trend.


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