Adaptive Trailing Stop Strategi

Penulis:ChaoZhang, Tanggal: 2023-10-08 15:06:28
Tag:

Gambaran umum

Strategi ini terutama mengimplementasikan mekanisme stop loss adaptif yang secara otomatis menyesuaikan posisi stop loss berdasarkan fluktuasi harga untuk mencapai efek stop loss yang lebih baik. Strategi ini menggunakan indikator ATR untuk menghitung rentang stop loss yang wajar, dan menghasilkan sinyal perdagangan dalam kombinasi dengan garis EMA. Ini membuka posisi panjang atau pendek ketika harga melanggar garis EMA, dan menggunakan algoritma stop loss adaptif untuk melacak stop loss.

Logika Strategi

  1. Menghitung indikator ATR dan menetapkan nilai ATR dikalikan dengan parameter a sebagai stop loss range nLoss.
  2. Hitung garis EMA.
  3. Pergi panjang ketika harga melanggar di atas garis EMA, dan pergi pendek ketika harga melanggar di bawah garis EMA.
  4. Menggunakan algoritma stop loss adaptif untuk menyesuaikan posisi stop loss xATRTrailingStop secara otomatis, dengan aturan sebagai berikut:
    • Ketika harga pecah di atas posisi stop loss, sesuaikan stop loss dengan harga dikurangi stop loss range nLoss.
    • Ketika harga pecah di bawah posisi stop loss, sesuaikan stop loss dengan harga ditambah range stop loss nLoss.
    • Jika tidak, tetaplah stop loss tidak berubah.
  5. Tutup posisi untuk stop loss ketika harga mencapai level stop loss.

Analisis Keuntungan

  1. Mengimplementasikan mekanisme stop loss adaptif yang secara otomatis menyesuaikan rentang stop loss berdasarkan volatilitas pasar, secara efektif mengendalikan risiko.
  2. Menghitung rentang stop loss yang wajar dengan indikator ATR, menghindari stop loss yang terlalu besar atau terlalu kecil.
  3. Menggunakan EMA untuk menghasilkan sinyal perdagangan, mengurangi perdagangan yang tidak perlu dan menyaring kebisingan pasar.
  4. Logika strategi yang sederhana dan jelas, mudah dipahami dan dioptimalkan.
  5. Memungkinkan penyesuaian parameter input untuk beradaptasi dengan lingkungan pasar yang berbeda.

Risiko dan Peningkatan

  1. Sinyal EMA mungkin terlambat, yang mengarah pada keterlambatan masuk.
  2. Periode pemegang yang tidak pasti, tidak dapat mengontrol ukuran stop loss tunggal.
  3. Stop loss dapat diaktifkan terlalu sering di pasar dengan tren yang kuat Pertimbangkan untuk menyesuaikan parameter atau menambahkan filter berdasarkan kondisi tren.
  4. Parameter seperti periode ATR, stop loss multiplier harus disetel berdasarkan karakteristik simbol, nilai default tidak harus digunakan secara membabi buta.

Arahan Optimasi

  1. Pertimbangkan untuk menambahkan indikator tren, mengambil perdagangan ke arah tren untuk menghindari perdagangan kontra-tren.
  2. Sesuaikan pengganda stop loss berdasarkan volatilitas, memungkinkan stop yang lebih luas dalam kondisi volatilitas tinggi.
  3. Setel periode pemegang maksimal, stop loss aktif setelah melebihi waktu tertentu.
  4. Tambahkan strategi stop loss bergerak, secara bertahap menaikkan stop saat harga bergerak.
  5. Sesuaikan parameter periode ATR berdasarkan karakteristik simbol.

Kesimpulan

Strategi ini memiliki logika yang jelas dan sederhana, mengelola risiko dengan stop loss berbasis ATR adaptif dan EMA untuk sinyal perdagangan. Tetapi relatif pasif dengan banyak ruang untuk optimasi. Pertimbangkan untuk menambahkan penilaian tren, penyesuaian parameter dinamis berdasarkan kondisi pasar untuk membuatnya lebih proaktif. Secara keseluruhan, strategi ini berfungsi sebagai ide dan templat yang baik untuk strategi stop loss pembalikan, tetapi parameter harus disesuaikan untuk simbol yang berbeda daripada secara membabi buta menerapkan nilai default.


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

//@version=4
strategy(title="UT Bot Strategy", overlay = true)
//CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. 

// Inputs
a = input(1,     title = "Key Vaule. 'This changes the sensitivity'")
c = input(10,    title = "ATR Period")
h = input(false, title = "Signals from Heikin Ashi Candles")

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2019, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2100, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////


xATR  = atr(c)
nLoss = a * xATR

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = false) : close

xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
 
pos = 0   
pos :=	iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
   
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

ema   = ema(src,1)
above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)

buy  = src > xATRTrailingStop and above 
sell = src < xATRTrailingStop and below

barbuy  = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

plotshape(buy,  title = "Buy",  text = 'Buy',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)

barcolor(barbuy  ? color.green : na)
barcolor(barsell ? color.red   : na)

strategy.entry("long",   true, when = buy  and time_cond)
strategy.entry("short", false, when = sell and time_cond)

Lebih banyak