Strategi trailing stop loss adaptif berdasarkan indikator ATR


Tanggal Pembuatan: 2023-10-19 12:42:26 Akhirnya memodifikasi: 2023-10-19 12:42:26
menyalin: 0 Jumlah klik: 843
1
fokus pada
1617
Pengikut

Strategi trailing stop loss adaptif berdasarkan indikator ATR

Ringkasan

Gagasan inti dari strategi ini adalah menggunakan indikator rata-rata real wavelength (ATR) untuk mengatur tracking stop loss yang dapat disesuaikan, sehingga posisi yang menguntungkan dapat dilindungi secara maksimal, dan menghindari stop loss yang terlalu dini. Indikator ATR dapat secara dinamis menangkap tingkat fluktuasi pasar, menyesuaikan jarak stop loss sesuai dengan fluktuasi pasar, dan sekaligus mengurangi kemungkinan terjadinya stop loss.

Prinsip Strategi

Strategi ini menggunakan nilai rata-rata N siklus indikator ATR dikalikan dengan satu kali lipat sebagai basis stop loss. Semakin besar nilai ATR, berarti semakin besar fluktuasi pasar, semakin lebar jarak stop loss yang ditetapkan; Semakin kecil nilai ATR, semakin sempit jarak stop loss yang ditetapkan. Dengan demikian, jarak stop loss dapat disesuaikan secara dinamis sesuai dengan tingkat fluktuasi pasar.

Secara khusus, strategi ini menggunakan logika inti sebagai berikut:

  1. Hitung nilai ATR untuk periode ATR ((nATRPeriod)).

  2. Berdasarkan nilai ATR kalikan dengan kelipatan ((nATRMultip) untuk mendapatkan basis Stop Loss distance nLoss。

  3. Pembaruan garis stop xATRTrailingStop berdasarkan titik tinggi, titik rendah, dan periode sebelumnya.

  4. Jika titik terendah saat ini memicu stop loss pada periode sebelumnya, stop loss akan bergerak ke jarak nLoss di bawah titik terendah.

  5. Jika titik tinggi saat ini memicu stop loss pada siklus sebelumnya, stop loss akan bergerak ke titik tinggi di bawah garis stop loss lebih dari jarak nLoss.

  6. Jika stop loss tidak dipicu, maka stop loss akan disesuaikan dengan jarak dari harga penutupan dari stop loss.

  7. Tambahkan jarak perlindungan garis bayangan opsional untuk lebih mengoptimalkan garis stop loss.

  8. Gambarkan orbit Brin untuk memvisualisasikan batas atas dan bawah dari garis stop loss.

  9. Berdasarkan warna garis stop loss menentukan arah posisi.

Strategi ini menggunakan indikator ATR yang fleksibel, memungkinkan stop loss untuk menyesuaikan diri dengan fluktuasi pasar, memastikan jarak stop loss yang masuk akal, dan menghindari stop loss yang terlalu radikal yang menyebabkan kerugian posisi yang tidak perlu.

Analisis Keunggulan

Strategi ini memiliki keuntungan sebagai berikut:

  1. Menggunakan indikator ATR untuk menyesuaikan jarak stop loss secara dinamis, dapat beradaptasi dengan kondisi pasar yang berbeda.

  2. Parameter perkalian dapat disesuaikan, memungkinkan penyesuaian fleksibel jarak penghentian.

  3. Bergabunglah dengan orbit Brin untuk membentuk batas atas dan bawah dari garis stop loss.

  4. Opsi perlindungan dari bayangan, untuk menghindari whipsaw di kota yang bergoyang.

  5. Hal ini dapat digunakan sebagai tracking stop loss untuk memaksimalkan penarikan dari posisi yang menguntungkan.

  6. Strategi yang jelas dan mudah dipahami, parameter yang tidak mudah dioptimalkan.

  7. Dapat digunakan dalam berbagai varietas dan siklus, dan memiliki aplikasi yang luas.

Analisis risiko

Strategi ini juga memiliki beberapa risiko yang perlu diperhatikan:

  1. Indeks ATR terlambat bereaksi terhadap kejadian pasar yang tiba-tiba, yang dapat menyebabkan stop loss yang terlalu besar.

  2. Penetapan kelipatan yang terlalu besar juga dapat menyebabkan jarak stop loss yang terlalu lebar, meningkatkan risiko kerugian.

  3. Fungsi perlindungan garis bayangan membuat garis stop loss terlalu longgar saat getaran meningkat.

  4. Tidak mempertimbangkan aturan masuk, tidak dapat digunakan sebagai strategi Entries/Exits.

  5. Parameter optimasi harus diuji berulang kali untuk menyesuaikan dengan varietas dan siklus yang berbeda.

  6. Penembusan stop loss dapat menyebabkan peningkatan kerugian, yang membutuhkan pengelolaan dana yang efektif.

Arah optimasi

Kebijakan ini dapat dioptimalkan dalam beberapa hal:

  1. Uji parameter siklus ATR yang berbeda untuk mengoptimalkan jarak penghentian.

  2. Sesuaikan parameter perkalian untuk menemukan keseimbangan antara jarak dan probabilitas stop loss.

  3. Optimalkan parameter siklus perlindungan sinar untuk mencegah whipsaw.

  4. Cobalah untuk menambahkan persyaratan masuk berdasarkan stop loss, sehingga menjadi strategi Entries/Exits.

  5. Tambahkan indikator penilaian tren, dan sesuaikan jarak stop loss dengan tren.

  6. Tergabung dengan teori gelombang, penyesuaian jarak stop loss sesuai dengan posisi gelombang.

  7. Menambahkan kontrol posisi untuk membatasi kerugian tunggal.

Meringkaskan

Strategi ini memanfaatkan karakteristik penyesuaian diri dari indikator ATR, merancang mekanisme stop loss yang dapat disesuaikan secara dinamis. Dengan menjamin stop loss, tetapi juga mengurangi pemicu stop loss yang tidak perlu. Strategi ini sederhana dan jelas, dapat dioptimalkan secara fleksibel sesuai dengan kebutuhan Anda.

Kode Sumber Strategi
/*backtest
start: 2022-10-12 00:00:00
end: 2023-10-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v2.0 13/10/2014
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
// Modified by River to add Bands, and change color of Trailing Stop and add Wick Protection. Now turned into a Strategy for Backtesting Purposes.
// After backtesting, it seems clear that it functions well as a Trailing Stop, but not as an Entry/Exit strategy.
////////////////////////////////////////////////////////////
strategy(title="ATR Trailing Stop Bands Strategy[R] ", overlay = true)
nATRPeriod = input(5)
nATRMultip = input(4)
length = input(30, "#Periods of Wick Protection", minval=2)
bType = input(0, "Max [1] or Avg Wick Protection [0]", minval=0, maxval=1)
avgupperwick = sma(close[1] <= open[1] ? high[1] - open[1] : high[1] - close[1], length)
maxupperwick = highest(close[1] <= open[1] ? high[1] - open[1] : high[1] - close[1], length)
avglowerwick = sma(close[1] > open[1] ? open[1] - low[1] : close[1] - low[1], length)
maxlowerwick = highest(close[1] > open[1] ? open[1] - low[1] : close[1] - low[1], length)
upperwick = bType == 0 ? avgupperwick : maxupperwick
lowerwick = bType == 0 ? avglowerwick : maxlowerwick
xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR 
upperband = iff(high < nz(upperband[1], 0) and high[1] < nz(upperband[1], 0), min(nz(upperband[1]), high + nLoss + upperwick), high + nLoss + upperwick)
lowerband = iff(low > nz(lowerband[1], 0) and low[1] > nz(lowerband[1], 0), max(nz(lowerband[1]), low - nLoss - lowerwick), low - nLoss - lowerwick) 
xATRTrailingStop = iff(low > nz(xATRTrailingStop[1], 0) and low[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), low - nLoss - lowerwick),
 iff(high < nz(xATRTrailingStop[1], 0) and high[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), high + nLoss + upperwick), 
//                        iff(low <= nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), high + nLoss + upperwick, iff(high >= nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), low - nLoss - lowerwick,0))))
 iff(low <= nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), upperband[1], iff(high >= nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), lowerband[1],0))))

pos =	iff(close[1] > nz(xATRTrailingStop[1], 0) and low <= nz(xATRTrailingStop[1], 0), 1,
 iff(close[1] < nz(xATRTrailingStop[1], 0) and high >= nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
color = pos == 1 ? red: pos == -1 ? green : blue 
plot(upperband, color=red, title="ATR Upper")
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop", linewidth=2)
plot(lowerband, color=green, title="ATR Lower")

longCondition = (color == green and color[1] == red)
if (longCondition)
    strategy.entry("Long", strategy.long)
longExitCondition = (color == red and color[1] == green)
if (longExitCondition)
    strategy.close("Long")

shortCondition = (color == red and color[1] == green)
if (shortCondition)
    strategy.entry("Short", strategy.short)
shortexitCondition = (color == green and color[1] == red)
if (shortexitCondition)
    strategy.close("Short")