Strategi perdagangan trailing stop loss dinamis


Tanggal Pembuatan: 2023-10-09 16:59:57 Akhirnya memodifikasi: 2023-10-09 16:59:57
menyalin: 0 Jumlah klik: 728
1
fokus pada
1234
Pengikut

Ringkasan

Strategi ini didasarkan pada indikator rata-rata true range (ATR) untuk menetapkan garis stop loss dinamis, melacak perubahan harga saham, dan mencapai perlindungan stop loss sekaligus mengunci keuntungan maksimum.

Prinsip Strategi

Strategi ini dilakukan melalui langkah-langkah berikut:

  1. Untuk menghitung indikator ATR, siklus ATR diatur oleh parameter nATRPeriod, dengan default 5;

  2. Berdasarkan nilai ATR yang dihitung dari stop loss line, stop loss amplitudo ditetapkan oleh parameter nATRMultip, dengan default 3.5 kali ATR;

  3. Ketika harga saham naik, jika lebih tinggi dari batas stop loss sebelumnya, batas stop loss akan ditingkatkan menjadi harga saham dikurangi margin stop loss; ketika harga saham turun, jika lebih rendah dari batas stop loss sebelumnya, batas stop loss akan diturunkan menjadi harga saham ditambah margin stop loss;

  4. menilai apakah harga saham telah menembus batas stop loss, dan jika sudah menembus batas stop loss, maka akan ada sinyal beli atau jual;

  5. Sesuai dengan sinyal untuk menembus garis Stop Loss, masuk ke posisi over atau kosong, dan tutup posisi saat menyentuh garis Stop Loss lagi.

Ketika harga saham naik, stop loss line akan terus naik, sehingga mengunci keuntungan; ketika harga saham turun, stop loss line akan terus turun, sehingga stop loss. Indikator ATR dapat lebih akurat mencerminkan tingkat fluktuasi harga saham, menyesuaikan stop loss line sesuai dengan dinamika ATR, dapat menghindari stop loss terlalu radikal atau konservatif.

Analisis Keunggulan

  • Dinamiskan Stop Loss Line, Hentikan Kerugian, Hindari Kekalahan
  • Stop loss line disesuaikan lebih halus, menghindari stop loss prematur
  • Menggunakan indikator ATR untuk mencerminkan fluktuasi terbaru dan menghitung stop loss yang lebih masuk akal
  • Pelacakan Stop Loss Line, yang sangat baik untuk mengunci keuntungan

Analisis risiko

  • Pengaturan parameter indikator ATR perlu berhati-hati, terlalu pendeknya siklus ATR dapat menyebabkan pergerakan stop loss yang terlalu besar, dan terlalu lama tidak dapat mencerminkan pergerakan harga secara tepat waktu
  • Parameter stop loss margin perlu disesuaikan dengan fluktuasi saham tertentu, terlalu besar atau terlalu kecil akan mempengaruhi efektivitas strategi
  • Pelacakan stop loss dapat mengurangi ruang untuk keuntungan, dan stop loss sebelum harga saham naik lagi
  • Perubahan posisi yang sering menyebabkan biaya transaksi yang lebih tinggi

Hal ini dapat dilakukan dengan mengoptimalkan parameter, menyesuaikan parameter siklus ATR dan amplitudo stop loss, dan menemukan kombinasi parameter terbaik untuk menyeimbangkan stop loss dan tracking. Hal ini juga dapat dikombinasikan dengan indikator teknis lainnya untuk memfilter waktu masuk ke pasar, mengurangi stop loss yang tidak perlu.

Arah optimasi

  • Optimalkan parameter siklus ATR untuk membuat perubahan garis stop loss lebih dekat dengan fluktuasi harga
  • Optimalkan parameter stop loss amplitudo untuk membuat stop loss lebih masuk akal
  • Menambahkan indikator lain untuk menentukan kapan filter masuk
  • Hanya masuk ke posisi tambahan jika ada tren kenaikan harga saham yang jelas
  • Pertimbangan untuk bergabung dengan mekanisme masuk kembali untuk menghindari ketidakmampuan untuk berpartisipasi setelah penurunan saham yang diperkirakan akan terus meningkat

Meringkaskan

Strategi ini mencapai stop loss dan profit locking dalam proses penempatan dengan cara menyesuaikan stop loss ATR secara dinamis. Dibandingkan dengan posisi stop loss yang tetap, strategi ini dapat beradaptasi dengan baik terhadap fluktuasi harga saham, menghindari stop loss yang terlalu radikal atau konservatif. Indeks ATR membuat penyesuaian stop loss lebih tertarget.

Kode Sumber Strategi
/*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)