Ide inti dari strategi ini adalah menggunakan indikator Average True Range (ATR) untuk mengatur garis stop loss trailing adaptif untuk memaksimalkan perlindungan posisi menguntungkan sambil menghindari stop loss prematur. Indikator ATR dapat secara dinamis menangkap volatilitas pasar dan menyesuaikan jarak stop loss berdasarkan volatilitas pasar, memastikan stop loss yang efektif sambil meminimalkan kemungkinan stop loss dipicu. Strategi ini juga menggabungkan Bollinger Bands untuk memvisualisasikan batas atas dan bawah garis stop loss, dengan opsi menambahkan perlindungan wick untuk melawan efek whipsaw di pasar berkisar.
Strategi ini menggunakan rata-rata periode N dari indikator ATR dikalikan dengan faktor sebagai jarak stop loss dasar. Semakin besar nilai ATR, semakin besar volatilitas pasar, sehingga semakin luas jarak stop loss ditetapkan. Semakin kecil nilai ATR, semakin sempit jarak stop loss ditetapkan. Hal ini memungkinkan penyesuaian dinamis jarak stop loss berdasarkan volatilitas pasar.
Secara khusus, strategi ini menggunakan logika inti berikut:
Menghitung nilai ATR dari periode ATR (nATRPeriod).
Dapatkan jarak stop loss dasar nLoss dengan mengalikan nilai ATR dengan faktor (nATRMultip).
Perbarui garis stop loss xATRTrailingStop berdasarkan garis tertinggi, terendah dan stop loss periode sebelumnya.
Jika low saat ini memicu garis stop loss periode sebelumnya, garis stop loss bergerak ke bawah jarak low by nLoss.
Jika high saat ini memicu garis stop loss periode sebelumnya, garis stop loss bergerak ke bawah ke atas jarak tinggi dengan nLoss.
Jika stop loss tidak dipicu, sesuaikan garis stop loss berdasarkan jarak harga dekat dengan itu.
Tambahkan jarak perlindungan wick opsional untuk optimalisasi lebih lanjut dari garis stop loss.
Gambar Bollinger Bands untuk memvisualisasikan batas atas dan bawah garis stop loss.
Tentukan arah posisi berdasarkan warna garis stop loss.
Strategi ini secara fleksibel menggunakan indikator ATR untuk memungkinkan garis stop loss untuk menyesuaikan diri berdasarkan volatilitas pasar, memastikan jarak stop loss yang wajar sambil menghindari stop loss yang berlebihan yang menyebabkan kerugian posisi yang tidak perlu.
Keuntungan dari strategi ini:
Menggunakan indikator ATR untuk menyesuaikan jarak stop loss secara dinamis menyesuaikan dengan kondisi pasar yang berbeda.
Multiplikator yang dapat disesuaikan memungkinkan penyesuaian jarak stop loss yang fleksibel.
Penambahan Bollinger Bands memberikan visualisasi batas atas dan bawah garis stop loss.
Perlindungan wick opsional menghindari whipsaw di berbagai pasar.
Dapat digunakan sebagai stop loss untuk memaksimalkan penarikan posisi yang menguntungkan.
Logika strategi jelas dan mudah dipahami dengan beberapa parameter yang dapat dioptimalkan.
Terapkan pada beberapa produk dan jangka waktu.
Beberapa risiko dari strategi ini untuk dicatat:
Indikator ATR bereaksi lambat terhadap kejutan pasar, menyebabkan jarak stop loss yang besar.
Pengaturan perkalian yang berlebihan juga memperbesar jarak stop loss, meningkatkan risiko kerugian.
Perlindungan wick dapat membuat garis stop loss terlalu longgar ketika whipsaw meningkat.
Aturan masuk tidak dipertimbangkan, tidak dapat digunakan sebagai strategi entri/keluar.
Pengujian ekstensif dan pengoptimalan parameter yang diperlukan untuk produk dan kerangka waktu yang berbeda.
Stop loss breakout dapat memperbesar kerugian, yang membutuhkan manajemen modal yang efektif.
Strategi dapat dioptimalkan dalam aspek berikut:
Uji periode ATR yang berbeda untuk mengoptimalkan jarak stop loss.
Sesuaikan pengganda untuk menyeimbangkan antara jarak stop loss dan probabilitas.
Mengoptimalkan periode perlindungan wick untuk mencegah whipsaw.
Coba tambahkan kondisi masuk di atas stop loss untuk menjadikannya strategi Entries/Exits.
Tambahkan indikator tren untuk menyesuaikan jarak stop loss berdasarkan tren.
Sesuaikan stop loss berdasarkan teori Elliott Waves.
Tambahkan ukuran posisi untuk membatasi jumlah kerugian tunggal.
Strategi ini memanfaatkan karakteristik adaptif dari indikator ATR untuk merancang mekanisme stop loss yang dinamis. Sementara memastikan stop loss, juga meminimalkan pemicu stop loss yang tidak perlu. Logika strategi sederhana dan jelas, memungkinkan optimasi fleksibel berdasarkan kebutuhan. Ini bekerja terbaik sebagai trailing stop loss untuk memaksimalkan perlindungan keuntungan. Dengan optimasi parameter yang tepat dan pengendalian risiko, strategi ini dapat menjadi alat stop loss yang efektif dalam perdagangan kuantitatif.
/*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")