
Strategi ini adalah strategi perdagangan dua hala yang menjejaki kadar turun naik. Ia menggunakan indikator ATR rata-rata turun naik untuk menetapkan titik hentian dan menentukan arah trend berdasarkan arah di mana harga menembusi titik hentian.
Strategi ini menggunakan 3 hari ATR untuk mengira kadar turun naik. Nilai ATR didarabkan dengan satu faktor sebagai titik berhenti. Apabila harga lebih tinggi daripada titik berhenti, ia dianggap sebagai tren naik, dan ia ditutup apabila harga turun dan menembusi titik berhenti; apabila harga lebih rendah daripada titik berhenti, ia dianggap sebagai tren kosong, dan ia ditutup apabila harga naik dan menembusi titik berhenti.
Untuk risiko, anda boleh meningkatkan ATR dengan tepat, meningkatkan kawasan perlindungan, mengawal kekerapan perdagangan, menetapkan titik berhenti minimum, dan sebagainya.
Strategi ini secara keseluruhannya adalah strategi berhenti kehilangan dua arah yang stabil. Dengan menunjuk ATR, anda dapat mengatur kedudukan berhenti secara dinamik dan mengawal risiko penarikan balik. Pada masa yang sama, perdagangan dua arah meningkatkan peluang keuntungan. Dengan pengoptimuman lanjut, anda dapat menjadikan strategi ini lebih stabil, lebih dipercayai, dan lebih mampu 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