Strategi henti kerugian pengekoran adaptif berdasarkan penunjuk ATR


Tarikh penciptaan: 2023-10-19 12:42:26 Akhirnya diubah suai: 2023-10-19 12:42:26
Salin: 0 Bilangan klik: 843
1
fokus pada
1617
Pengikut

Strategi henti kerugian pengekoran adaptif berdasarkan penunjuk ATR

Gambaran keseluruhan

Idea teras strategi ini adalah menggunakan purata gelombang sebenar (ATR) indikator untuk menetapkan garis berhenti pengesanan yang menyesuaikan diri, membolehkan kedudukan yang menguntungkan mendapat perlindungan maksimum, dan mengelakkan kerugian terlalu awal. Indeks ATR mampu menangkap kadar turun naik pasaran secara dinamik, menyesuaikan jarak penutupan kerugian mengikut turun naik pasaran, dan mengurangkan kemungkinan tercetus kerugian sementara memastikan kerugian. Strategi ini juga menyertakan Brinband, dapat memvisualisasikan batas atas dan bawah garis berhenti, dan dapat memilih untuk memasukkan perlindungan garis bayangan untuk melawan kesan pasaran yang goyah.

Prinsip Strategi

Strategi ini menggunakan nilai purata N kitaran penunjuk ATR kalikan dengan satu kelipatan sebagai jarak berhenti asas. Semakin besar nilai ATR, bermakna semakin besar turun naik pasaran, semakin lebar jarak berhenti akan ditetapkan; semakin kecil nilai ATR, semakin sempit jarak berhenti akan ditetapkan.

Secara khusus, strategi ini menggunakan logik teras berikut:

  1. Hitung nilai ATR bagi tempoh ATR ((nATRPeriod)).

  2. Berdasarkan nilai ATR kalikan dengan kelipatan ((nATRMultip) untuk mendapatkan jarak hentian asas nLoss。

  3. Kemas kini garisan hentian xATRTrailingStop berdasarkan tahap tertinggi dan terendah semasa dan tempoh terakhir.

  4. Jika titik rendah semasa mencetuskan garis stop loss pada kitaran sebelumnya, garis stop loss akan bergerak ke jarak nLoss di bawah titik rendah.

  5. Jika ketinggian semasa mencetuskan garis hentian kitaran sebelumnya, maka jarak hentian bergerak di bawah garis hentian ke ketinggian di atas nLoss.

  6. Jika tiada penangguhan yang dicetuskan, penangguhan disesuaikan dengan jarak harga penutupan dari garis penangguhan.

  7. Tambah jarak perlindungan garis bayangan pilihan untuk mengoptimumkan lagi garis hentian.

  8. Gambarkan orbit Brin untuk memvisualisasikan had atas dan bawah garis hentian.

  9. Berdasarkan warna garis hentian, arah pegangan ditentukan.

Strategi ini menggunakan indikator ATR secara fleksibel untuk membolehkan garis hentian menyesuaikan diri dengan turun naik pasaran, memastikan jarak hentian adalah wajar dan mengelakkan kehilangan kedudukan yang tidak perlu akibat hentian yang terlalu radikal.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Dengan menggunakan indikator ATR untuk menyesuaikan jarak henti secara dinamik, ia dapat menyesuaikan diri dengan keadaan pasaran yang berbeza.

  2. Parameter perkalian boleh disesuaikan, membolehkan penyesuaian jarak henti yang fleksibel.

  3. Bergabung dengan orbit Brin Belt, membentuk batas atas dan bawah penglihatan garis hentian.

  4. Fungsi pelindung garis bayangan boleh dipilih untuk mengelakkan whipsaw di pasaran yang bergoyang.

  5. Ia boleh digunakan sebagai tracker stop loss untuk memaksimumkan pengeluaran dari kedudukan yang menguntungkan.

  6. Strategi yang jelas dan mudah difahami, parameter yang kurang mudah dioptimumkan.

  7. Ia boleh digunakan dalam pelbagai jenis dan kitaran.

Analisis risiko

Strategi ini juga mempunyai risiko yang perlu diperhatikan:

  1. Indeks ATR terlewat dalam bertindak balas terhadap kejutan pasaran, yang boleh menyebabkan jarak hentian yang terlalu besar.

  2. Penetapan kelipatan yang terlalu besar juga boleh menyebabkan jarak henti yang terlalu luas, meningkatkan risiko kerugian.

  3. Perlindungan garis bayangan akan menyebabkan garis hentian terlalu longgar apabila gegaran meningkat.

  4. Tidak boleh digunakan sebagai strategi Entries/Exits tanpa mempertimbangkan peraturan masuk.

  5. Parameter pengoptimuman perlu diuji berulang kali untuk menyesuaikan diri dengan varieti dan kitaran yang berbeza.

  6. Penembusan Hentian boleh menyebabkan kerugian yang lebih besar dan memerlukan pengurusan wang yang berkesan.

Arah pengoptimuman

Kaedah ini boleh dioptimumkan dalam beberapa aspek:

  1. Uji parameter kitaran ATR yang berbeza untuk mengoptimumkan jarak henti.

  2. Sesuaikan parameter perkalian untuk mencari keseimbangan antara jarak henti dan kebarangkalian henti.

  3. Mengoptimumkan parameter kitaran perlindungan garis bayangan untuk mengelakkan whipsaw.

  4. Cuba untuk menambah syarat-syarat kemasukan pada dasar hentian kerugian, menjadikannya strategi Entries/Exits.

  5. Tambah indikator penilaian trend, sesuaikan jarak hentian mengikut trend.

  6. Menggabungkan teori gelombang, menyesuaikan jarak hentian mengikut kedudukan gelombang.

  7. Menambah kawalan kedudukan untuk mengehadkan kerugian tunggal

ringkaskan

Strategi ini menggunakan ciri-ciri penyesuaian diri penunjuk ATR, merancang mekanisme hentian yang dapat disesuaikan secara dinamik. Dengan memastikan hentian kerugian, anda juga dapat mengurangkan pemicu hentian kerugian yang tidak perlu. Idea strategi mudah dan jelas, dapat dioptimumkan secara fleksibel mengikut keperluan anda.

Kod 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")