Strategi kuantitatif trailing stop loss berbasis jarak


Tanggal Pembuatan: 2023-11-15 11:24:16 Akhirnya memodifikasi: 2023-11-15 11:24:16
menyalin: 0 Jumlah klik: 682
1
fokus pada
1617
Pengikut

Strategi kuantitatif trailing stop loss berbasis jarak

Ringkasan

Strategi ini didasarkan pada pemikiran stop loss bergerak, menggunakan indikator jarak dekat Bars ((DCB) untuk menentukan pergerakan harga, digabungkan dengan indikator RSI cepat untuk memfilter, untuk mencapai stop loss bergerak dan stop loss tracking. Strategi ini juga menggunakan prinsip kenaikan posisi Martingale, cocok untuk perdagangan tren garis tengah panjang.

Prinsip

  1. Perhitungan lastg dan lastr mewakili harga penutupan pada garis K yang terakhir naik dan harga penutupan pada garis K yang terakhir turun.

  2. Dist adalah perbedaan harga antara lastg dan lastr.

  3. Hitung adist sebagai dist dengan rata-rata bergerak sederhana 30 periode.

  4. Generasi sinyal transaksi ketika dist lebih besar dari adist dua kali lipat.

  5. Kombinasi dengan sinyal filter RSI yang cepat, untuk menghindari false breakout.

  6. Jika ada sinyal dan tidak memegang posisi, buka posisi dengan persentase tetap.

  7. Menggunakan prinsip Martingale, menambah posisi setelah kerugian.

  8. Harga memicu Stop Loss atau Stop Loss Posisi.

Keunggulan

  1. Menggunakan indikator DCB untuk menentukan arah tren, dapat secara efektif menangkap tren garis tengah dan panjang.

  2. Filter indikator RSI cepat dapat mencegah terjadinya terobosan palsu yang mengakibatkan kerugian.

  3. Sistem stop loss mobile dapat mengunci keuntungan dan mengontrol risiko secara efektif.

  4. Prinsip Martingale dapat meningkatkan posisi setelah kerugian, mengejar keuntungan yang lebih tinggi.

  5. Pengaturan parameter strategi yang masuk akal, sesuai dengan lingkungan pasar yang berbeda.

Risiko

  1. Indikator DCB dapat memberikan sinyal yang salah dan perlu digabungkan dengan filter indikator lainnya.

  2. Martin Gill, seorang investor di New York City, mengatakan bahwa investasi dalam saham akan meningkatkan kerugian dan memerlukan manajemen dana yang ketat.

  3. Penetapan stop loss yang tidak masuk akal dapat menyebabkan kerugian lebih dari yang diharapkan.

  4. Perlu kontrol ketat terhadap jumlah posisi untuk menghindari kelebihan kemampuan keuangan.

  5. Konfigurasi kontrak yang tidak tepat dapat menyebabkan kerugian besar dalam situasi ekstrem.

Optimalkan Pikiran

  1. Optimalkan parameter DCB untuk mencari kombinasi parameter yang optimal.

  2. Cobalah untuk menyaring RSI yang cepat dengan indikator lain.

  3. Optimalkan parameter stop loss dan stop loss untuk meningkatkan strategi kemenangan.

  4. Optimalkan parameter Martingale untuk mengurangi risiko kenaikan.

  5. Uji varietas yang diperdagangkan, pilih varietas terbaik untuk melakukan arbitrage.

  6. Parameter strategi pengoptimalan dinamika teknologi, seperti pembelajaran mesin.

Meringkaskan

Strategi Overall adalah strategi pelacakan tren yang lebih matang. Menggunakan DCB untuk menentukan arah tren, sinyal penyaringan RSI cepat dapat menghindari kesalahan membuka posisi. Pada saat yang sama, mekanisme stop loss dapat secara efektif mengendalikan kerugian tunggal.

Kode Sumber Strategi
/*backtest
start: 2023-11-07 00:00:00
end: 2023-11-14 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Distance Strategy v1.0", shorttitle = "Distance str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings 
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(true, defval = true, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usersi = input(true, defval = true, title = "Use RSI-Filter")
periodrsi = input(7, defval = 7, minval = 2, maxval = 50, title = "RSI Period")
limitrsi = input(30, defval = 30, minval = 1, maxval = 50, title = "RSI Limit")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Fast RSI
fastup = rma(max(change(close), 0), periodrsi)
fastdown = rma(-min(change(close), 0), periodrsi)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Distance
bar = close > open ? 1 : close < open ? -1 : 0
lastg = bar == 1 ? close : lastg[1]
lastr = bar == -1 ? close : lastr[1]
dist = lastg - lastr
adist = sma(dist, 30)
plot(lastg, linewidth = 3, color = lime)
plot(lastr, linewidth = 3, color = red)
up = bar == -1 and dist > adist * 2
dn = bar == 1 and dist > adist * 2

//RSI Filter
rsidn = fastrsi < limitrsi or usersi == false
rsiup = fastrsi > 100 - limitrsi or usersi == false

//Signals
up1 = up and rsidn
dn1 = dn and rsiup
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open))

//Arrows
plotarrow(up1 ? 1 : na, colorup = blue, colordown = blue)
plotarrow(dn1 ? -1 : na, colorup = blue, colordown = blue)

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

signalup = up1
if signalup
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

signaldn = dn1
if signaldn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()