Ini adalah strategi perdagangan swing selang hari berdasarkan teknik momentum menggunakan ATR Stops.
Strategi itu mengenal pasti arah trend menggunakan penunjuk momentum dan menetapkan garis stop loss berdasarkan ATR untuk melaksanakan perdagangan swing low-buy-high-sell.
Kod pertama menetapkan julat masa backtesting.
Kemudian dalam bahagian penunjuk, penunjuk berikut dikira:
Logik utama untuk menilai trend adalah:
Jika penutupan lebih tinggi daripada barisan stop loss ke bawah sebelumnya, ia dinilai sebagai trend menaik; jika penutupan lebih rendah daripada barisan stop loss ke atas sebelumnya, ia dinilai sebagai trend menurun.
Apabila trend berubah, sesuaikan kedudukan garis stop loss.
Khususnya, dalam trend menaik, garis stop loss ditetapkan pada harga tertinggi bar sebelumnya dikurangkan nilai ATR; dalam trend menurun, garis stop loss ditetapkan pada harga terendah bar sebelumnya ditambah nilai ATR.
Ini merealisasikan trend selepas stop loss.
Dalam seksyen peraturan perdagangan, buka kedudukan panjang/pendek apabila harga melanggar garis stop loss.
Kelebihan strategi ini:
Terdapat juga beberapa risiko:
Beberapa pengoptimuman:
Beberapa arah untuk mengoptimumkan strategi ini:
Uji parameter ATR yang berbeza untuk mencari yang optimum. Uji semula pelbagai set parameter dan menilai nisbah pulangan / risiko.
Mengoptimumkan stop loss menggabungkan metrik turun naik di atas ATR. Tambah metrik turun naik, santai stop loss dengan betul semasa tempoh peningkatan turun naik.
Tambah penapis trend untuk mengelakkan dagangan semasa pasaran yang bergolak. Tambah penunjuk penilaian trend, hanya berdagang apabila trend jelas.
Tambah mekanisme saiz kedudukan. Sesuaikan saiz kedudukan berdasarkan nisbah penggunaan akaun, masa henti rugi berturut-turut dan lain-lain.
Tambah kawalan risiko selang semalam.
Sebagai strategi perdagangan swing harian asas, logik keseluruhan jelas. Ia menilai trend dengan teknik momentum dan menggunakan ATR untuk menghentikan kerugian, mengawal risiko dengan berkesan.
Masih banyak ruang untuk pengoptimuman, boleh diperbaiki dari aspek seperti penghakiman trend, kaedah stop loss, saiz kedudukan dan lain-lain untuk menjadikan strategi lebih praktikal. Secara keseluruhan strategi ini menyediakan rangka kerja yang kukuh untuk perdagangan kuantitatif.
/*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