Strategi kuantitatif trailing stop loss berasaskan jarak


Tarikh penciptaan: 2023-11-15 11:24:16 Akhirnya diubah suai: 2023-11-15 11:24:16
Salin: 0 Bilangan klik: 682
1
fokus pada
1617
Pengikut

Strategi kuantitatif trailing stop loss berasaskan jarak

Gambaran keseluruhan

Strategi ini adalah berdasarkan kepada idea berhenti bergerak, menggunakan jarak dekat Bars ((DCB) petunjuk untuk menentukan pergerakan harga, digabungkan dengan RSI cepat untuk penapisan, untuk mencapai berhenti bergerak dan berhenti berhenti. Strategi ini juga menggunakan prinsip kenaikan kedudukan Martingale, sesuai untuk perdagangan trend garis tengah panjang.

Prinsip

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

  2. Hitung dist sebagai perbezaan harga antara lastg dan lastr.

  3. Hitung adist sebagai purata bergerak sederhana 30 kitaran dist.

  4. Menjana isyarat transaksi apabila dist dua kali lebih besar daripada adist.

  5. Gabungan dengan isyarat penapis RSI yang cepat, mengelakkan penembusan palsu.

  6. Jika ada isyarat dan tidak memegang kedudukan, masukkan kedudukan dengan peratusan tetap.

  7. Menggunakan prinsip Martingale, menambah kedudukan selepas kerugian.

  8. Harga mencetuskan stop loss atau penutupan selepas penutupan.

Kelebihan

  1. Menggunakan DCB untuk menentukan arah trend, dapat menangkap trend garis tengah dan panjang dengan berkesan.

  2. Penapisan RSI yang pantas dapat mengelakkan kerugian akibat penembusan palsu.

  3. Mekanisme Henti Kerosakan Bergerak boleh mengunci keuntungan dan mengawal risiko dengan berkesan.

  4. Prinsip Martingale boleh meningkatkan kedudukan selepas kerugian, mengejar keuntungan yang lebih tinggi.

  5. Tetapan parameter strategi adalah munasabah dan sesuai untuk keadaan pasaran yang berbeza.

Risiko

  1. Indikator DCB mungkin mengeluarkan isyarat yang salah dan perlu disaring dengan gabungan indikator lain.

  2. “MartinGil akan meningkatkan kerugian dan memerlukan pengurusan wang yang ketat.

  3. Tetapan titik henti yang tidak munasabah boleh menyebabkan kerugian lebih daripada yang dijangkakan.

  4. Perlu mengawal jumlah kedudukan dengan ketat untuk mengelakkan melebihi kemampuan kewangan.

  5. Kontrak perdagangan yang tidak betul boleh menyebabkan kerugian besar dalam keadaan yang melampau.

Optimum idea

  1. Mengoptimumkan parameter DCB untuk mencari kombinasi parameter terbaik.

  2. Cuba penapisan RSI Rapid dengan penunjuk lain.

  3. Mengoptimumkan parameter Stop Loss Stop Stop dan meningkatkan peluang kemenangan strategi.

  4. Mengoptimumkan parameter Martingale untuk mengurangkan risiko kenaikan.

  5. Uji varieti dagangan yang berbeza dan pilih varieti terbaik untuk penarikan.

  6. Parameter strategi pengoptimuman dinamik teknologi seperti pembelajaran mesin.

ringkaskan

Strategi Overall adalah strategi trend-following yang lebih matang. Menggunakan DCB untuk menentukan arah trend, isyarat penapisan RSI cepat dapat mengelakkan kesalahan membuka kedudukan. Pada masa yang sama, mekanisme hentian kerugian dapat mengawal kerugian tunggal dengan berkesan. Tetapi strategi ini juga mempunyai risiko tertentu, perlu mengoptimumkan parameter lebih lanjut untuk mengurangkan risiko dan meningkatkan kestabilan.

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