UT Bot Indikator Berbasis ATR Trailing Stop Strategi

Penulis:ChaoZhang, Tanggal: 2024-03-11 11:17:33
Tag:

img

Gambaran umum

Strategi ini didasarkan pada indikator UT Bot yang dikembangkan oleh QuantNomad dan menggabungkan gagasan stop loss trailing. Kode aslinya ditulis oleh @Yo_adriiiiaan dan dimodifikasi oleh @HPotter. Strategi ini akan digunakan bersamaan dengan konsep uang pintar LuxAlgo. Saat ini, strategi ini berada dalam tahap pengujian.

Prinsip Strategi

Prinsip utama dari strategi ini adalah sebagai berikut:

  1. Ketika harga penutupan lebih tinggi dari rata-rata bergerak sederhana 50 periode, perdagangan panjang dimasukkan.
  2. Untuk posisi panjang, harga stop loss trailing ditetapkan. Harga stop loss trailing adalah 80% (1-20%) dari harga penutupan saat ini. Harga stop loss trailing bergerak naik dengan harga naik tetapi tidak bergerak turun, sehingga melindungi keuntungan.
  3. Untuk posisi pendek, harga stop loss trailing juga ditetapkan. Harga stop loss trailing adalah 120% (1+20%) dari harga penutupan saat ini. Harga stop loss trailing bergerak ke bawah dengan harga turun tetapi tidak bergerak ke atas.
  4. ATR (Average True Range) digunakan sebagai referensi untuk trailing stop. Metode perhitungan untuk harga trailing stop ATR adalah: ketika bergerak ke atas, ambil yang lebih besar dari harga trailing stop ATR sebelumnya dan (harga penutupan saat ini - ATR * Nilai Kunci); ketika bergerak ke bawah, ambil yang lebih kecil dari harga trailing stop ATR sebelumnya dan (harga penutupan saat ini + ATR * Nilai Kunci). Nilai Kunci adalah parameter yang ditetapkan pengguna yang digunakan untuk menyesuaikan sensitivitas trailing stop.
  5. Berdasarkan terobosan harga trailing stop ATR, arah posisi saat ini ditentukan. Ketika harga melanggar harga trailing stop ATR, posisi panjang dipegang; ketika harga melanggar harga trailing stop ATR, posisi pendek dipegang; dalam kasus lain, status posisi saat ini tetap tidak berubah.

Analisis Keuntungan

  1. Pengaturan trailing stop dapat secara efektif melindungi keuntungan, memungkinkan strategi untuk mendapatkan lebih banyak keuntungan di pasar tren.
  2. Menetapkan stop loss secara terpisah untuk posisi panjang dan pendek dapat disesuaikan dengan kondisi pasar yang berbeda.
  3. Menggunakan ATR sebagai referensi untuk stop loss memungkinkan penyesuaian posisi stop loss secara dinamis, membuatnya lebih fleksibel dan efektif.
  4. Parameter Key Value disediakan untuk pengoptimalan pengguna, yang dapat disesuaikan sesuai dengan varietas dan siklus yang berbeda untuk meningkatkan kemampuan beradaptasi.

Analisis Risiko

  1. Di pasar yang berbelit-belit, stop-out yang sering dapat menyebabkan transaksi yang berlebihan, meningkatkan biaya komisi dan mengurangi pengembalian.
  2. Metode trailing stop persentase tetap relatif sederhana dan mungkin tidak dapat mengatasi fluktuasi harga dalam beberapa kondisi pasar.
  3. Strategi ini hanya mempertimbangkan penghentian trailing dan tidak menetapkan target laba trailing, yang mungkin kehilangan beberapa peluang keuntungan.
  4. Pilihan parameter memiliki dampak yang signifikan pada kinerja strategi, dan parameter yang tidak tepat dapat membawa risiko pengambilan yang lebih besar.

Arah Optimalisasi

  1. Indikator atau kondisi lain, seperti volume perdagangan dan volatilitas, dapat dipertimbangkan untuk mengoptimalkan kondisi masuk dan meningkatkan keandalan sinyal.
  2. Untuk metode perhitungan trailing stop, metode yang lebih kompleks dan efektif dapat dieksplorasi, seperti menggunakan stop loss parabolik atau stop loss persentase dinamis.
  3. Mekanisme target laba belakangan dapat ditambahkan, misalnya, menetapkan target laba dinamis berdasarkan ATR atau persentase untuk lebih mengunci keuntungan.
  4. Optimasi parameter dapat dilakukan untuk varietas dan siklus yang berbeda untuk menemukan kombinasi parameter yang paling cocok.

Ringkasan

Strategi ini didasarkan pada indikator UT Bot, yang menggabungkan logika stop trailing, yang dapat melindungi keuntungan di pasar tren. Pada saat yang sama, strategi menetapkan stop loss secara terpisah untuk posisi panjang dan pendek, menjadikannya sangat fleksibel. Menggunakan ATR sebagai referensi untuk stop trailing memungkinkan penyesuaian dinamis dari posisi stop loss, meningkatkan fleksibilitas. Namun, strategi ini dapat menghadapi risiko biaya transaksi tinggi karena sering stop-out di pasar bergolak, dan tidak memiliki target profit trailing, yang dapat kehilangan peluang keuntungan. Selain itu, pilihan parameter memiliki dampak yang signifikan pada kinerja strategi.

Di masa depan, strategi dapat ditingkatkan dengan mengoptimalkan kondisi masuk, mengeksplorasi metode trailing stop yang lebih kompleks, menambahkan mekanisme target laba trailing, dan mengoptimalkan parameter untuk berbagai varietas dan siklus, untuk mendapatkan pengembalian yang lebih stabil.


/*backtest
start: 2023-03-05 00:00:00
end: 2024-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Trailingstop", overlay=true)

if close > sma(close, 50)
    strategy.entry("long", strategy.long)

// Trailing stop loss for long positions
Trailperc = 0.20
price_stop_long = 0.0

if (strategy.position_size > 0)
    stopValue = close * (1 - Trailperc)
    price_stop_long := max(stopValue, price_stop_long[1])
else
    price_stop_long := 0

if (strategy.position_size > 0)
    strategy.exit(id="stoploss_long", stop=price_stop_long)

// Trailing stop loss for short positions
Trailperc_short = 0.20
price_stop_short = 0.0

if (strategy.position_size < 0)
    stopValue_short = close * (1 + Trailperc_short)
    price_stop_short := min(stopValue_short, price_stop_short[1])
else
    price_stop_short := 0

if (strategy.position_size < 0)
    strategy.exit(id="stoploss_short", stop=price_stop_short)

// ATR Trailing Stop for visualization
keyvalue = input(3, title="Key Value. 'This changes the sensitivity'", step=0.5)
atrperiod = input(10, title="ATR Period")
xATR = atr(atrperiod)
nLoss = keyvalue * xATR

xATRTrailingStop = 0.0
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 = 0  
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)))

xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue

plot(xATRTrailingStop, color = xcolor, title = "Trailing Stop")

Lebih banyak