Strategi Pembalikan Trailing Stop


Tarikh penciptaan: 2023-12-01 13:41:41 Akhirnya diubah suai: 2023-12-01 13:41:41
Salin: 0 Bilangan klik: 629
1
fokus pada
1619
Pengikut

Strategi Pembalikan Trailing Stop

Gambaran keseluruhan

Ini adalah strategi yang sangat mudah. Ia hanya terdiri daripada satu tracking stop loss. Apabila stop loss dicetuskan, kedudukan akan dibalikkan dan satu tracking stop loss akan ditetapkan untuk kedudukan baru.

Prinsip Strategi

Strategi ini dibina berdasarkan salah satu daripada tiga jenis stop loss: stop loss peratusan, stop loss ATR, dan stop loss mutlak. Apabila stop loss dicetuskan, kedudukan akan dibalikkan dan stop loss pengesanan akan ditetapkan untuk kedudukan baru.

Khususnya, strategi pertama mengira nilai hentian mengikut jenis hentian yang dipilih. Kemudian ia akan menilai sama ada ada ada isyarat untuk meletakkan, iaitu apabila tinggi lebih besar daripada harga hentian sebelumnya, dan rendah lebih kecil daripada harga hentian sebelumnya. Setelah masuk, ia akan mengemas kini harga hentian secara langsung, sehingga ia mengesan perubahan harga.

Analisis kelebihan

Kelebihan terbesar strategi ini adalah sangat mudah, hanya perlu mengesan satu stop loss, tidak perlu mempertimbangkan pilihan tempat masuk dan pilihan tempat keluar. Tetapan fleksibel nilai stop loss juga menjadikannya lebih luas.

Berbanding dengan halangan tetap, ia menggunakan tracking stop loss yang dapat mengunci keuntungan yang lebih besar, dan juga mengurangkan kebarangkalian halangan untuk diserang. Setiap kali stop loss dicetuskan, kedudukan reversal dapat menangkap peluang untuk membalikkan harga.

Analisis risiko

Risiko utama yang mungkin ada dalam strategi ini adalah risiko yang disebabkan oleh penetapan harga berhenti yang tidak betul. Penetapan nilai berhenti yang terlalu besar boleh menyebabkan kerugian meluas; penetapan nilai berhenti yang terlalu kecil boleh menyebabkan berhenti sering dipicu. Ini memerlukan pengoptimuman yang disasarkan mengikut keadaan pasaran.

Risiko lain ialah penilaian arah kedudukan reversal selepas penangguhan tidak tepat, sehingga kehilangan peluang untuk membalikkan harga atau meningkatkan kerugian. Ini memerlukan penilaian trend dan sokongan untuk menentukan masa pembalikan yang terbaik.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Meningkatkan penilaian terhadap trend, mengelakkan berhadapan dengan rintangan
  2. Mengoptimumkan kaedah pengiraan nilai hentian untuk mengesan pasaran dengan lebih dinamik
  3. Peningkatan penghakiman terhadap penembusan, memastikan isyarat pembalikan yang lebih tinggi
  4. Menentukan masa terbaik untuk berbalik bersama-sama dengan penunjuk seperti kadar turun naik

ringkaskan

Strategi ini menghasilkan keuntungan melalui mekanisme berhenti yang mudah untuk mengesan kerugian, merupakan strategi kuantitatif yang sesuai untuk pemula. Berbanding dengan strategi berhenti tradisional, ia menambah mekanisme untuk memulihkan kedudukan selepas penangguhan yang dicetuskan, dan dengan itu memperoleh keuntungan tambahan. Dengan ujian dan pengoptimuman yang berterusan, strategi ini boleh menjadi prosedur kuantitatif yang sangat praktikal.

Kod 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)