ATR Trailing Henti Strategi

Penulis:ChaoZhang, Tarikh: 2023-10-09 16:59:57
Tag:

Ringkasan

Strategi ini menetapkan garis stop loss dinamik berdasarkan indikator Average True Range (ATR) untuk mengikuti perubahan harga saham, untuk melindungi stop loss sambil memaksimumkan keuntungan.

Logika Strategi

Strategi ini dilaksanakan terutamanya melalui langkah-langkah berikut:

  1. Mengira penunjuk ATR, tempoh ATR ditetapkan oleh parameter nATRPeriod, lalai menjadi 5;

  2. Mengira garis stop loss berdasarkan nilai ATR, besar stop loss ditetapkan oleh parameter nATRMultip, lalai kepada 3.5 kali ATR;

  3. Apabila harga naik, jika lebih tinggi daripada garis stop loss sebelumnya, sesuaikan garis stop loss sehingga harga dikurangkan dari besar stop loss; apabila harga jatuh, jika lebih rendah daripada garis stop loss sebelumnya, sesuaikan garis stop loss ke bawah kepada harga ditambah dengan besar stop loss;

  4. Menghakimi jika harga menembusi garis stop loss, jika menembusi, menghantar isyarat beli atau jual;

  5. Masukkan kedudukan panjang atau pendek berdasarkan isyarat penembusan barisan stop loss, dan tutup kedudukan apabila harga menyentuh barisan stop loss lagi.

Apabila harga meningkat, garis stop loss akan terus bergerak ke atas untuk mengunci keuntungan. Apabila harga jatuh, garis stop loss akan terus bergerak ke bawah untuk menghentikan kerugian. Indikator ATR dapat mencerminkan turun naik harga dengan lebih tepat. Mengatur secara dinamik garis stop loss berdasarkan ATR dapat mengelakkan stop loss yang terlalu agresif atau terlalu konservatif.

Analisis Kelebihan

  • Secara dinamik menyesuaikan garis stop loss untuk stop loss tepat pada masanya untuk mengelakkan pengembangan kerugian
  • Penyesuaian garisan stop loss agak lancar untuk mengelakkan stop loss awal
  • Menggunakan penunjuk ATR untuk mengira saiz stop loss yang lebih munasabah berdasarkan turun naik terkini
  • Jalur berhenti kerugian untuk mengunci keuntungan dengan berkesan

Analisis Risiko

  • Tetapan parameter ATR perlu berhati-hati, tempoh ATR yang terlalu pendek boleh menyebabkan turun naik yang berlebihan dalam garis stop loss, terlalu lama mungkin gagal mencerminkan perubahan harga dalam masa
  • Kebesaran stop loss perlu ditetapkan mengikut turun naik saham tertentu, nilai yang terlalu besar atau kecil akan mempengaruhi prestasi strategi
  • Penghentian kerugian boleh mengurangkan margin keuntungan dengan menghentikan keuntungan sebelum kenaikan harga yang lain
  • Penyesuaian kedudukan yang kerap boleh membawa kepada kos dagangan yang lebih tinggi

Parameter boleh dioptimumkan dengan menyesuaikan tempoh ATR dan kebesaran kehilangan berhenti untuk mencari keseimbangan optimum antara kehilangan berhenti dan jejak.

Arahan pengoptimuman

  • Mengoptimumkan parameter tempoh ATR untuk membuat perubahan garis stop loss mengikuti turun naik harga lebih rapat
  • Mengoptimumkan parameter besar stop loss untuk kerugian stop yang lebih munasabah
  • Tambah penunjuk lain untuk menapis masa kemasukan
  • Hanya pergi lama apabila tren menaik jelas muncul
  • Pertimbangkan untuk menambah mekanisme kemasukan semula untuk mengambil bahagian dalam stok dengan stop loss tetapi jangkaan kenaikan berterusan

Ringkasan

Strategi ini merealisasikan stop loss dan mengambil keuntungan semasa memegang melalui garis stop loss trailing ATR dinamik. Berbanding dengan titik stop loss tetap, ia menyesuaikan diri dengan lebih baik dengan turun naik harga, mengelakkan stop loss yang terlalu agresif atau terlalu konservatif. Indikator ATR menjadikan penyesuaian garis stop loss lebih disasarkan. Tetapi parameter dan strategi masuk semula memerlukan pengoptimuman lanjut untuk mengurangkan berhenti yang tidak perlu dan memperluaskan margin keuntungan. Secara keseluruhan ini adalah idea stop loss trailing dinamik yang baik yang bernilai penyelidikan dan penerapan lanjut.


/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//@okadoke
////////////////////////////////////////////////////////////
// Based on Average True Range Trailing Stops Strategy by HPotter
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
////////////////////////////////////////////////////////////
strategy(title="ATR Trailing Stops Strategy", shorttitle="ATRTSS", overlay = true, 
  initial_capital=100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type="percent", commission_value=0.0)
  
nATRPeriod      = input(5, "ATR Period")
nATRMultip      = input(3.5, "ATR Multiplier")
useShorts       = input(false, "Test w/Shorts?")
daysBackMax     = input(defval = 360, title = "Max Days Back to Test", minval = 0)
daysBackMin     = input(defval = 0, title = "Min Days Back to Test", minval = 0)
msBackMax       = 1000 * 60 * 60 * 24 * daysBackMax
msBackMin       = 1000 * 60 * 60 * 24 * daysBackMin

xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop = na
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 = na 
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)))
        
color = pos == -1 ? red: pos == 1 ? green : blue 
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop")

isWithinTimeBounds = (msBackMax == 0 or (time > (timenow - msBackMax))) and (msBackMin == 0 or (time < (timenow - msBackMin)))

buy     = crossover(close, xATRTrailingStop)
sell    = crossunder(close, xATRTrailingStop)

strategy.entry("LONG", long=true, when=buy and isWithinTimeBounds)
strategy.close("LONG", when=sell and isWithinTimeBounds)
strategy.entry("SHORT", long=false, when=useShorts and sell and isWithinTimeBounds)
strategy.close("SHORT", when=useShorts and buy and isWithinTimeBounds)



Lebih lanjut