Trend Mengikut Strategi Berdasarkan Jarak dengan Stop Loss Trailing

Penulis:ChaoZhang, Tarikh: 2023-11-15 11:24:16
Tag:

img

Ringkasan

Strategi ini menggunakan penunjuk Jarak Dekat Bar (DCB) untuk menentukan trend harga dan penunjuk RSI pantas sebagai penapis, melaksanakan stop loss untuk trend selepas perdagangan.

Prinsip-prinsip

  1. Mengira lastg dan lastr yang mewakili bar hijau terakhir ditutup dan bar merah terakhir ditutup.

  2. Mengira dist sebagai perbezaan antara lastg dan lastr.

  3. Hitung adist sebagai SMA 30 tempoh dist.

  4. Menghasilkan isyarat perdagangan apabila dist lebih besar daripada 2 kali adist.

  5. Gunakan penunjuk RSI pantas untuk menapis isyarat, mengelakkan pecah palsu.

  6. Memasuki perdagangan pada peratusan tetap ekuiti jika isyarat hadir tanpa kedudukan.

  7. Martingale untuk skala dalam selepas kerugian.

  8. Posisi ditutup apabila stop loss atau mengambil keuntungan dicetuskan.

Kelebihan

  1. Indikator DCB secara berkesan menangkap trend jangka menengah dan panjang.

  2. Penapis RSI pantas mengelakkan kerugian daripada pelarian palsu.

  3. Penghentian penghantaran mengunci keuntungan dan mengawal risiko.

  4. Martingale meningkatkan kedudukan selepas kerugian untuk keuntungan yang lebih tinggi.

  5. Tetapan parameter yang munasabah sesuai dengan persekitaran pasaran yang berbeza.

Risiko

  1. DCB mungkin menghasilkan isyarat yang salah, memerlukan penapis lain.

  2. Martingale boleh meningkatkan kerugian, memerlukan pengurusan risiko yang ketat.

  3. Tetapan stop loss yang tidak betul boleh menyebabkan kerugian yang berlebihan.

  4. Ukuran kedudukan harus terhad untuk mengelakkan leverage yang berlebihan.

  5. Tetapan kontrak yang tidak betul boleh membawa kepada kerugian besar di pasaran yang melampau.

Pengoptimuman

  1. Mengoptimumkan parameter DCB untuk kombinasi terbaik.

  2. Cuba penunjuk lain untuk menggantikan penapis RSI pantas.

  3. Mengoptimumkan stop loss dan mengambil keuntungan untuk kadar kemenangan yang lebih tinggi.

  4. Mengoptimumkan parameter Martingale untuk mengurangkan risiko.

  5. Ujian pada produk yang berbeza untuk peruntukan aset yang terbaik.

  6. Gunakan pembelajaran mesin untuk mengoptimumkan parameter secara dinamik.

Ringkasan

Ini adalah keseluruhan trend yang matang mengikuti strategi. DCB menentukan arah trend dan cepat RSI menyaring isyarat untuk mengelakkan entri yang salah. Stop loss dan mengambil keuntungan berkesan mengawal kerugian perdagangan tunggal. Tetapi masih ada risiko, parameter memerlukan pengoptimuman lanjut untuk mengurangkan risiko dan meningkatkan kestabilan. Logiknya jelas dan mudah difahami, sesuai untuk peniaga trend jangka menengah dan panjang.


/*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()

Lebih lanjut