Strategi Pembalikan Kerugian Stop Trailing

Penulis:ChaoZhang, Tanggal: 2023-12-01 13:41:41
Tag:

img

Gambaran umum

Ini adalah strategi yang sangat sederhana. Ini hanya terdiri dari satu stop loss trailing. Ketika stop loss dipicu, posisi terbalik dan stop loss trailing ditetapkan untuk posisi baru.

Logika Strategi

Strategi ini dibangun berdasarkan salah satu dari tiga jenis stop loss: stop loss persentase, ATR stop loss, stop loss absolut.

Secara khusus, strategi pertama kali menghitung nilai stop loss berdasarkan jenis stop loss yang dipilih. Kemudian memeriksa sinyal masuk, pergi panjang ketika tinggi di atas harga stop loss sebelumnya dan pergi pendek ketika rendah di bawah harga stop loss sebelumnya. Setelah masuk, terus memperbarui harga stop loss untuk mengikuti perubahan harga. Harga stop loss panjang rendah dikurangi nilai stop loss, harga stop loss pendek tinggi ditambah nilai stop loss.

Analisis Keuntungan

Keuntungan terbesar dari strategi ini adalah kesederhanaannya, membutuhkan pelacakan hanya satu stop loss tanpa perlu mempertimbangkan pilihan titik masuk dan keluar.

Dibandingkan dengan stop loss tetap, trailing stop loss yang digunakan dapat mengunci keuntungan yang lebih besar sementara juga mengurangi probabilitas stop loss terkena.

Analisis Risiko

Risiko utama dari strategi ini mungkin berasal dari pengaturan nilai stop loss yang tidak tepat. Nilai stop loss yang terlalu besar dapat menyebabkan kerugian yang diperbesar, sementara nilai yang terlalu kecil dapat menyebabkan pemicu stop loss yang sering terjadi. Ini membutuhkan optimasi adaptif berdasarkan kondisi pasar.

Risiko lain adalah penilaian arah yang tidak akurat setelah pemicu stop loss saat membalikkan posisi, sehingga kehilangan peluang pembalikan harga atau meningkatkan kerugian.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Tambahkan penilaian tren untuk menghindari perdagangan melawan tren
  2. Mengoptimalkan perhitungan nilai stop loss untuk membuatnya lebih dinamis melacak pasar
  3. Meningkatkan validasi breakout untuk sinyal pembalikan kemungkinan yang lebih tinggi
  4. Menggabungkan ukuran volatilitas untuk menemukan waktu pembalikan terbaik

Kesimpulan

Strategi ini mewujudkan keuntungan melalui mekanisme stop loss trailing yang sederhana dan mudah dipahami oleh pemula. Dibandingkan dengan strategi stop loss tradisional, strategi ini menambahkan posisi pembalikan trigger post stop loss untuk memperoleh keuntungan tambahan. Dengan pengujian dan optimalisasi terus-menerus, ini dapat menjadi program kuantitatif yang sangat praktis.


/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Trailing SL Strategy [QuantNomad]", shorttitle = "TrailingSL [QN]", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 50)

////////////
// Inputs //

sl_type    = input("%", options = ["%", "ATR", "Absolute"])

sl_perc    = input(4,     title = "% SL",        type = input.float)
atr_length = input(10,    title = "ATR Length")
atr_mult   = input(2,     title = "ATR Mult",    type = input.float)
sl_absol   = input(10,    title = "Absolute SL", type = input.float)

// 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 = 2016, 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 = time >= startDate and time <= finishDate

//////////////////
// CALCULATIONS //

// SL values
sl_val = sl_type == "ATR"      ? atr_mult * atr(atr_length) : 
         sl_type == "Absolute" ? sl_absol : 
         close * sl_perc / 100
         
// Init Variables
pos         = 0
trailing_sl = 0.0

// Signals
long_signal  = nz(pos[1]) !=  1 and high > nz(trailing_sl[1])
short_signal = nz(pos[1]) != -1 and low  < nz(trailing_sl[1]) 

// Calculate SL
trailing_sl := short_signal     ? high + sl_val : 
               long_signal      ? low  - sl_val : 
               nz(pos[1]) ==  1 ? max(low  - sl_val, nz(trailing_sl[1])) :  
               nz(pos[1]) == -1 ? min(high + sl_val, nz(trailing_sl[1])) : 
               nz(trailing_sl[1])
               
// Position var               
pos := long_signal  ? 1 : short_signal ? -1 : nz(pos[1]) 

//////////////
// PLOTINGS //

plot(trailing_sl, linewidth = 2, color = pos == 1 ? color.green : color.red)

//////////////
// STRATEGY //

if (time_cond and pos != 1)
    strategy.entry("long",  true, stop = trailing_sl)
  
if (time_cond and pos != -1) 
    strategy.entry("short", false, stop = trailing_sl)

Lebih banyak