
Strategi ini dinamakan “ATR Trend Tracking Strategy” dan merupakan satu strategi perdagangan untuk mengesan trend mengikut masa masuk ke pasaran. Strategi ini digunakan untuk produk kewangan yang mempunyai trend yang jelas seperti indeks saham, mata wang asing, komoditi dan sebagainya.
Strategi ini menggunakan ATR untuk menetapkan harga hentian. ATR mencerminkan turun naik pasaran, dan jarak hentian boleh ditetapkan secara dinamik. Strategi ini mengira nilai ATR dengan memasukkan kitaran dan kelipatan ATR, kemudian kalikan kelipatan sebagai jarak hentian.
ATR线 = 前一日ATR线 ± nLoss(nLoss = nATRMultip * ATR值)
若收盘价 > ATR线,ATR线上调至收盘价 - nLoss
若收盘价 < ATR线,ATR线下调至收盘价 + nLoss
Garis ATR ini dapat menyesuaikan secara dinamik mengikut turun naik harga, dan dengan itu dapat mencapai trend tracking stop loss.
Selain daripada menghentikan ATR, strategi ini juga menggunakan saluran standard deviasi untuk menentukan masa masuk ke pasaran. Rumus pengiraan saluran standard deviasi adalah:
中线 = ATR止损线
上轨 = 中线 + n倍标准差
下轨 = 中线 - n倍标准差
Apabila harga menembusi garisan tengah dari bawah ke atas, buat lebih; apabila harga menembusi garisan tengah dari atas ke bawah, buat kosong.
Kelebihan utama strategi ini adalah bahawa menggunakan indikator ATR sebagai alat stop loss, anda boleh menyesuaikan jarak stop loss secara dinamik mengikut tahap turun naik pasaran, dan anda boleh mengesan trend stop loss, dan mengawal risiko dengan berkesan.
Selain itu, dengan menggunakan saluran standard deviasi untuk menentukan masa masuk ke pasaran, anda dapat mengelakkan pembukaan saham yang kerap disebabkan oleh perubahan harga yang kecil.
Risiko utama strategi ini adalah bahawa jarak berhenti terlalu lama tidak dapat mengawal risiko dengan berkesan; jarak berhenti terlalu lama mudah terganggu oleh bunyi pasaran. Untuk risiko ini, anda boleh menyesuaikan kitaran ATR dan kelipatan ATR untuk mencari kombinasi parameter terbaik.
Risiko lain adalah bahawa parameter saluran standard deviasi yang tidak betul dapat menyebabkan frekuensi pembukaan terlalu tinggi atau terlalu rendah. Parameter optimum dapat dijumpai dengan mengoptimumkan parameter.
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Pengoptimuman kitaran ATR dan perkalian. Menyesuaikan kedua-dua parameter ini boleh memberikan kesan hentikan kerugian yang lebih baik.
Optimumkan parameter saluran standard deviasi. Optimumkan parameter saluran untuk mendapatkan kesan kemasukan yang lebih baik.
Menambah penapis indikator lain. Anda boleh menambah indikator seperti purata bergerak, bentuk K-line, membantu menentukan arah trend, meningkatkan kadar keuntungan.
Mengoptimumkan logik pembukaan dan penempatan. Anda boleh menetapkan harga untuk menyentuh saluran selisih piawai, dan hanya membuka kedudukan setelah mengesahkan semula bentuk K.
Strategi ini berdasarkan indikator ATR untuk mencapai trend tracking stop loss, dan menggunakan saluran standard deviasi untuk membantu menentukan masa masuk ke pasaran. Kelebihan strategi adalah pengendalian risiko stop loss yang baik, sesuai untuk perdagangan trend. Risiko dan arah pengoptimuman juga dianalisis dengan jelas.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version = 2
strategy(title="Average True Range Strategy", overlay = true)
nATRPeriod = input(11) //Hur många perioder ATR är på
nATRMultip = input(0.5) //Hur många gånger nuvarande ATR multipliceras med
xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop = iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss),
iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos = iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), -1,
iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), 1, nz(pos[1], 0)))
stdev3 = 14*stdev(xATR, nATRPeriod)
band1 = xATRTrailingStop+stdev3 //Översta stdev bandet
band2 = xATRTrailingStop-stdev3 //Nedersta stdev bandet
// Datum och tid
FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 18, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2013, title = "From Year", minval = 2013)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 2020, title = "To Year", minval = 2017)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest slut
startTimeOk() => true
initial_capital = 100000
take = close > xATRTrailingStop
if( startTimeOk() ) and (pos == 1)
//if (pos == 1)
strategy.entry("Long", strategy.long, comment = "KOP")
strategy.exit("Long", when = take)
if( startTimeOk() ) and (pos == -1)
//if (pos == -1)
strategy.entry("Short", strategy.short, comment = "SALJ")
barcolor(pos == -1 ? red: pos == 1 ? green : blue )
plot(xATRTrailingStop, color=red, title="ATR Trailing Stop") //Mittersta linjen som är triggerlinjen för köp/sälj
plot(band1, color=red)
plot(band2, color=blue)