Ini adalah strategi perdagangan swing interval harian berdasarkan teknik momentum menggunakan ATR Stops.
Strategi ini mengidentifikasi arah tren menggunakan indikator momentum dan menetapkan garis stop loss berdasarkan ATR untuk menerapkan perdagangan swing low buy-high sell.
Kode pertama menetapkan rentang waktu backtesting.
Kemudian di bagian indikator, indikator berikut dihitung:
Logika utama untuk menilai tren adalah:
Jika penutupan lebih tinggi dari garis stop loss ke bawah sebelumnya, itu dinilai sebagai tren naik; jika penutupan lebih rendah dari garis stop loss ke atas sebelumnya, itu dinilai sebagai tren turun.
Ketika tren berubah, sesuaikan posisi stop loss line.
Secara khusus, dalam tren naik, garis stop loss ditetapkan pada harga tertinggi dari bar sebelumnya dikurangi nilai ATR; dalam tren turun, garis stop loss ditetapkan pada harga terendah dari bar sebelumnya ditambah nilai ATR.
Ini mewujudkan tren setelah stop loss.
Dalam bagian aturan perdagangan, buka posisi panjang/pendek ketika harga melanggar garis stop loss.
Keuntungan dari strategi ini:
Ada juga beberapa risiko:
Beberapa optimasi:
Beberapa arah untuk mengoptimalkan strategi ini:
Uji parameter ATR yang berbeda untuk menemukan yang optimal. Uji ulang beberapa set parameter dan evaluasi rasio pengembalian / risiko.
Optimalkan stop loss dengan menggabungkan metrik volatilitas di atas ATR. Tambahkan metrik volatilitas, santai stop loss dengan benar selama periode meningkatnya volatilitas.
Tambahkan filter tren untuk menghindari perdagangan selama pasar bergolak Tambahkan indikator penilaian tren, hanya perdagangan ketika tren jelas.
Tambahkan mekanisme ukuran posisi. Sesuaikan ukuran posisi berdasarkan rasio pemanfaatan akun, waktu stop loss berturut-turut dll.
Tambahkan pengendalian risiko gap overnight.
Sebagai strategi dasar perdagangan swing harian, logika keseluruhan jelas. Ini menilai tren dengan teknik momentum dan menggunakan ATR untuk trailing stop loss, secara efektif mengendalikan risiko.
Masih banyak ruang untuk optimasi, dapat ditingkatkan dari aspek seperti penilaian tren, metode stop loss, ukuran posisi dll untuk membuat strategi lebih praktis.
/*backtest start: 2023-01-29 00:00:00 end: 2024-02-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("BTC Swinger", 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 = 2010, title = "From Year") ToMonth = input(defval = 12, title = "To Month", minval = 1) ToDay = input(defval = 31, 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