Idea teras strategi ini adalah menggunakan penunjuk Julat Benar Purata (ATR) untuk menetapkan garis stop loss yang dapat disesuaikan untuk memaksimumkan perlindungan kedudukan yang menguntungkan sambil mengelakkan kerugian berhenti awal. Indikator ATR dapat menangkap turun naik pasaran secara dinamik dan menyesuaikan jarak stop loss berdasarkan turun naik pasaran, memastikan kerugian berhenti yang berkesan sambil meminimumkan kebarangkalian kerugian berhenti yang dicetuskan. Strategi ini juga menggabungkan Bollinger Bands untuk memvisualisasikan had atas dan bawah garis stop loss, dengan pilihan menambahkan perlindungan wick untuk melawan kesan whipsaw di pasaran berkisar.
Strategi ini menggunakan purata tempoh N penunjuk ATR dikalikan dengan faktor sebagai jarak stop loss asas. Semakin besar nilai ATR, semakin besar turun naik pasaran, jadi semakin luas jarak stop loss ditetapkan. Semakin kecil nilai ATR, semakin sempit jarak stop loss ditetapkan. Ini membolehkan penyesuaian dinamik jarak stop loss berdasarkan turun naik pasaran.
Secara khusus, strategi menggunakan logik teras berikut:
Mengira nilai ATR bagi tempoh ATR (nATRPeriod).
Dapatkan jarak stop loss asas nLoss dengan mengalikan nilai ATR dengan faktor (nATRMultip).
Mengemas kini barisan stop loss xATRTrailingStop berdasarkan barisan tinggi, rendah dan stop loss semasa tempoh sebelumnya.
Jika paras rendah semasa mencetuskan garis stop loss tempoh sebelumnya, garis stop loss bergerak ke bawah jarak rendah oleh nLoss.
Jika tinggi semasa mencetuskan garis stop loss tempoh sebelumnya, garis stop loss bergerak ke bawah ke atas jarak tinggi oleh nLoss.
Jika stop loss tidak dicetuskan, sesuaikan garis stop loss berdasarkan jarak harga dekat dengannya.
Tambah jarak perlindungan wick pilihan untuk mengoptimumkan lagi garis stop loss.
Menggambar Bollinger Bands untuk memvisualisasikan had atas dan bawah garis stop loss.
Tentukan arah kedudukan berdasarkan warna garis stop loss.
Strategi ini secara fleksibel menggunakan penunjuk ATR untuk membolehkan garis stop loss menyesuaikan diri berdasarkan turun naik pasaran, memastikan jarak stop loss yang munasabah sambil mengelakkan stop loss yang berlebihan yang menyebabkan kehilangan kedudukan yang tidak perlu.
Kelebihan strategi ini:
Menggunakan penunjuk ATR untuk menyesuaikan jarak stop loss dengan dinamik menyesuaikan diri dengan keadaan pasaran yang berbeza.
Pengganda yang boleh disesuaikan membolehkan penyesuaian jarak stop loss yang fleksibel.
Penambahan Bollinger Bands menyediakan visualisasi had atas dan bawah garis stop loss.
Perlindungan wicks pilihan mengelakkan whipsaw di pasaran pelbagai.
Boleh digunakan sebagai stop loss untuk memaksimumkan pengeluaran kedudukan yang menguntungkan.
Logik strategi adalah jelas dan mudah difahami dengan beberapa parameter yang boleh dioptimumkan.
Boleh digunakan untuk pelbagai produk dan jangka masa.
Beberapa risiko strategi ini perlu diperhatikan:
Indikator ATR bertindak balas perlahan terhadap kejutan pasaran, yang membawa kepada jarak stop loss yang besar.
Tetapan pengganda yang berlebihan juga meningkatkan jarak stop loss, meningkatkan risiko kerugian.
Perlindungan wick boleh membuat garis stop loss terlalu longgar apabila whipsaw meningkat.
Peraturan kemasukan tidak dipertimbangkan, tidak boleh digunakan sebagai strategi Masuk/Keluar.
Ujian meluas dan pengoptimuman parameter yang diperlukan untuk produk dan jangka masa yang berbeza.
Penembusan stop loss boleh meningkatkan kerugian, yang memerlukan pengurusan modal yang berkesan.
Strategi ini boleh dioptimumkan dalam aspek berikut:
Uji tempoh ATR yang berbeza untuk mengoptimumkan jarak stop loss.
Sesuaikan pengganda untuk keseimbangan antara jarak stop loss dan kebarangkalian.
Mengoptimumkan tempoh perlindungan wick untuk mengelakkan whipsaw.
Cuba tambah syarat masuk di atas stop loss untuk menjadikannya strategi Entry/Exits.
Tambah penunjuk trend untuk menyesuaikan jarak stop loss berdasarkan trend.
Sesuaikan stop loss berdasarkan teori Elliott Waves.
Tambah saiz kedudukan untuk mengehadkan jumlah kerugian tunggal.
Strategi ini menggunakan ciri adaptif penunjuk ATR untuk merancang mekanisme stop loss dinamik. Sambil memastikan stop loss, ia juga meminimumkan pencetus stop loss yang tidak perlu. Logik strategi adalah mudah dan jelas, membolehkan pengoptimuman fleksibel berdasarkan keperluan. Ia berfungsi dengan baik sebagai perlindungan stop loss untuk memaksimumkan keuntungan. Dengan pengoptimuman parameter yang betul dan kawalan risiko, strategi ini boleh menjadi alat stop loss yang berkesan 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")