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.
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.
Untuk mengurangi risiko: meningkatkan koefisien ATR untuk tingkat stop yang lebih luas, membatasi frekuensi perdagangan, menetapkan tingkat minimum mengambil keuntungan, dll.
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