Strategi Pembalikan Trailing Stop


Tanggal Pembuatan: 2023-12-01 13:41:41 Akhirnya memodifikasi: 2023-12-01 13:41:41
menyalin: 0 Jumlah klik: 629
1
fokus pada
1619
Pengikut

Strategi Pembalikan Trailing Stop

Ringkasan

Ini adalah strategi yang sangat sederhana. Ini hanya terdiri dari satu tracking stop. Ketika stop dipicu, posisi akan dibalik dan satu tracking stop akan ditetapkan untuk posisi baru.

Prinsip Strategi

Strategi ini dibangun berdasarkan salah satu dari tiga jenis stop loss: stop loss persentase, stop loss ATR, dan stop loss mutlak. Ketika stop loss dipicu, posisi akan dibalikkan dan stop loss tracking akan ditempatkan pada posisi baru.

Secara khusus, strategi pertama-tama menghitung stop loss berdasarkan jenis stop loss yang dipilih. Kemudian ia akan menilai apakah ada sinyal posisi yang dibuat, yaitu ketika titik tinggi lebih besar dari harga stop loss sebelumnya, dan titik rendah lebih kecil dari harga stop loss sebelumnya. Setelah masuk, ia akan memperbarui harga stop loss secara real-time, sehingga melacak perubahan harga.

Analisis Keunggulan

Keuntungan terbesar dari strategi ini adalah sangat sederhana, hanya perlu melacak satu stop loss, dan tidak perlu mempertimbangkan opsi masuk dan keluar. Pengaturan yang fleksibel dari nilai stop loss juga membuatnya lebih luas.

Dibandingkan dengan stop loss tetap, stop loss yang dilacak dapat mengunci keuntungan yang lebih besar, tetapi juga mengurangi probabilitas stop loss terkena dampak. Setiap stop loss yang dipicu dapat membalik posisi dan menangkap peluang untuk membalik harga.

Analisis risiko

Risiko utama yang mungkin ada dalam strategi ini adalah risiko yang disebabkan oleh pengaturan harga stop loss yang tidak tepat. Penetapan stop loss yang terlalu besar dapat menyebabkan kerugian yang meluas. Penetapan stop loss yang terlalu kecil dapat menyebabkan stop loss sering dipicu. Ini perlu dioptimalkan sesuai dengan situasi pasar.

Risiko lain adalah penilaian yang tidak akurat tentang arah posisi reversal setelah stop loss dipicu, sehingga kehilangan kesempatan untuk membalikkan harga atau meningkatkan kerugian. Ini perlu digabungkan dengan penilaian tren dan resistensi dukungan untuk menentukan waktu reversal yang optimal.

Arah optimasi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Meningkatkan penilaian terhadap tren, menghindari posisi terbalik
  2. Mengoptimalkan metode penghitungan stop loss, sehingga lebih dinamis untuk melacak pasar
  3. Peningkatan penilaian terhadap terobosan, memastikan sinyal pembalikan probabilitas yang lebih tinggi
  4. Menentukan waktu reversal yang optimal dengan indikator-indikator seperti volatilitas

Meringkaskan

Strategi ini menghasilkan keuntungan dengan mekanisme stop loss yang mudah dilacak, merupakan strategi kuantitatif yang cocok untuk pemula. Dibandingkan dengan strategi stop loss tradisional, ini menambahkan mekanisme untuk membalikkan posisi setelah pemicu stop loss, sehingga mendapatkan keuntungan tambahan. Dengan terus-menerus menguji dan mengoptimalkan, strategi ini dapat menjadi prosedur kuantitatif yang sangat praktis.

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