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.
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.
Untuk mengurangkan risiko: meningkatkan pekali ATR untuk tahap berhenti yang lebih luas, mengehadkan kekerapan perdagangan, menetapkan tahap mengambil keuntungan minimum, dll.
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