Tren Mengikuti Strategi Berdasarkan Jarak dengan Stop Loss Trailing

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

img

Gambaran umum

Strategi ini menggunakan indikator Distance Close Bars (DCB) untuk menentukan tren harga dan indikator RSI cepat sebagai filter, menerapkan trailing stop loss untuk tren setelah perdagangan.

Prinsip-prinsip

  1. Hitung lastg dan lastr yang mewakili garis hijau terakhir yang ditutup dan garis merah terakhir yang ditutup.

  2. Hitung dist sebagai perbedaan antara lastg dan lastr.

  3. Perhitungkan adist sebagai SMA 30 periode dist.

  4. Menghasilkan sinyal perdagangan ketika dist lebih besar dari 2 kali dari adist.

  5. Gunakan indikator RSI cepat untuk menyaring sinyal, menghindari kebocoran palsu.

  6. Masukkan perdagangan dengan persentase tetap dari ekuitas jika sinyal tidak memiliki posisi.

  7. Martingale untuk skala dalam setelah kerugian.

  8. Penutupan posisi ketika stop loss atau take profit dipicu.

Keuntungan

  1. Indikator DCB secara efektif menangkap tren jangka menengah dan panjang.

  2. Filter RSI cepat menghindari kerugian dari kebocoran palsu.

  3. Trailing stop mengunci keuntungan dan mengontrol risiko.

  4. Martingale meningkatkan posisi setelah kerugian untuk keuntungan yang lebih tinggi.

  5. Pengaturan parameter yang wajar sesuai dengan lingkungan pasar yang berbeda.

Risiko

  1. DCB mungkin menghasilkan sinyal yang salah, membutuhkan filter lain.

  2. Martingale dapat memperkuat kerugian, membutuhkan manajemen risiko yang ketat.

  3. Pengaturan stop loss yang tidak benar dapat menyebabkan kerugian yang berlebihan.

  4. Ukuran posisi harus terbatas untuk mencegah leverage yang berlebihan.

  5. Pengaturan kontrak yang tidak tepat dapat menyebabkan kerugian besar di pasar ekstrim.

Optimalisasi

  1. Optimalkan parameter DCB untuk kombinasi terbaik.

  2. Cobalah indikator lain untuk mengganti filter RSI cepat.

  3. Optimalkan stop loss dan ambil keuntungan untuk tingkat kemenangan yang lebih tinggi.

  4. Mengoptimalkan parameter Martingale untuk mengurangi risiko.

  5. Uji pada produk yang berbeda untuk alokasi aset terbaik.

  6. Gunakan pembelajaran mesin untuk mengoptimalkan parameter secara dinamis.

Ringkasan

Ini adalah strategi tren yang matang secara keseluruhan. DCB menentukan arah tren dan cepat RSI menyaring sinyal untuk menghindari entri yang salah. Stop loss dan take profit secara efektif mengendalikan kerugian perdagangan tunggal. Tapi masih ada risiko, parameter perlu dioptimalkan lebih lanjut untuk mengurangi risiko dan meningkatkan stabilitas. Logika jelas dan mudah dipahami, cocok untuk pedagang tren 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 banyak