trend mengikut strategi berdasarkan Saluran Donchian

Penulis:ChaoZhang, Tarikh: 2023-10-31 17:44:19
Tag:

img

Ringkasan

Strategi Puling adalah strategi trend berikut berdasarkan Saluran Donchian. Ia menggunakan Saluran Donchian yang cepat dan perlahan untuk mengenal pasti arah trend dan masuk pada pullbacks. Kelebihan strategi ini adalah bahawa ia boleh mengesan trend secara automatik dan memotong kerugian dalam masa apabila trend berubah. Tetapi ia juga mempunyai risiko penarikan dan stop loss yang terlalu dekat.

Logika Strategi

Strategi pertama menentukan tempoh saluran pantas sebagai 20 bar, dan tempoh saluran perlahan sebagai 50 bar. Saluran pantas digunakan untuk menetapkan harga stop loss, sementara saluran perlahan digunakan untuk menentukan arah trend dan masa masuk.

Pertama, tertinggi tertinggi dan terendah terendah saluran cepat dikira, dan titik tengah diambil sebagai garis stop loss. Pada masa yang sama, tertinggi tertinggi dan terendah terendah saluran perlahan dikira, dan saluran atas dan bawah digunakan sebagai garis masuk.

Apabila harga menembusi bahagian atas saluran perlahan, pergi panjang. Apabila harga menembusi bahagian bawah saluran perlahan, pergi pendek. Selepas memasuki kedudukan, tetapkan stop loss di titik tengah saluran pantas.

Jadi saluran perlahan menentukan arah trend utama, manakala saluran pantas menjejaki pecah kecil dalam julat kecil untuk menentukan titik stop loss.

Kelebihan

  • Mengesan trend secara automatik dan memotong kerugian dalam masa. Struktur saluran berganda boleh mengesan trend secara automatik dan dengan cepat memotong kerugian apabila trend berbalik.

  • Hanya mengambil entri apabila harga memecahkan sempadan saluran boleh menapis beberapa pecah palsu tanpa trend sebenar.

  • Jarak stop loss yang dekat boleh mengawal kerugian tunggal.

Risiko

  • Pengeluaran yang lebih besar. Strategi mengikut trend boleh mempunyai pengeluaran yang agak besar yang memerlukan persediaan psikologi.

  • Stop loss terlalu dekat. tempoh saluran cepat adalah pendek jadi stop loss adalah dekat, cenderung untuk dihentikan. kita boleh dengan sewajarnya melonggarkan tempoh saluran cepat.

  • Perdagangan yang terlalu banyak. Struktur saluran berganda boleh menghasilkan entri yang berlebihan, yang memerlukan saiz kedudukan yang munasabah.

Arahan pengoptimuman

  • Tambah penapis kemasukan. Kita boleh menambah turun naik dan sebagainya dalam keadaan kemasukan untuk menapis pecah tanpa kekuatan trend yang mencukupi.

  • Kami boleh mencari kombinasi parameter saluran yang optimum secara sistematik.

  • Menggabungkan pelbagai jangka masa. Tentukan trend utama pada jangka masa yang lebih tinggi dan perdagangan pada jangka masa yang lebih rendah.

  • Jarak stop loss dinamik. Sesuaikan jarak stop secara dinamik berdasarkan turun naik pasaran.

Ringkasan

Strategi Puling adalah strategi trend berikut secara keseluruhan. Ia menggunakan saluran harga untuk menentukan arah trend dan menetapkan stop loss untuk mengawal risiko. Strategi ini mempunyai beberapa kelebihan tetapi juga masalah penarikan dan stop loss yang terlalu dekat. Kita boleh mengoptimumkannya dengan menyesuaikan parameter saluran, menambah penapis dll.


/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy("Noro's RiskTurtle Strategy", shorttitle = "RiskTurtle str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong  = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
risk      = input(2, minval = 0.1, maxval = 99, title = "Risk size, %")
fast      = input(20, minval = 1, title = "Fast channel (for stop-loss)")
slow      = input(50, minval = 1, title = "Slow channel (for entries)")
showof    = input(true, defval = true, title = "Show offset")
showll    = input(true, defval = true, title = "Show lines")
showdd    = input(true, defval = true, title = "Show label (drawdown)")
showbg    = input(true, defval = true, title = "Show background")
fromyear  = input(1900, defval = 1900, 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")

//Donchian price channel fast
hf = highest(high, fast)
lf = lowest(low, fast)
center = (hf + lf) / 2

//Donchian price chennal slow
hs = highest(high, slow)
ls = lowest(low, slow)

//Lines
colorpc = showll ? color.blue : na
colorsl = showll ? color.red : na
offset = showof ? 1 : 0
plot(hs, offset = offset, color = colorpc, title = "Slow channel high")
plot(ls, offset = offset, color = colorpc, title = "Slow channel low")
plot(center, offset = offset, color = colorsl, title = "Fast channel stop-loss")

//Background
size = strategy.position_size
colorbg = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(colorbg, transp = 70)

//Var
loss = 0.0
maxloss = 0.0
equity = 0.0
truetime = true

//Lot size
risksize = -1 * risk
risklong = ((center / hs) - 1) * 100
coeflong = abs(risksize / risklong)
lotlong = (strategy.equity / close) * coeflong
riskshort = ((center / ls) - 1) * 100
coefshort = abs(risksize / riskshort)
lotshort = (strategy.equity / close) * coefshort

//Orders
strategy.entry("Long", strategy.long, lotlong, stop = hs, when = needlong and strategy.position_size == 0 and hs > 0 and truetime)
strategy.entry("Short", strategy.short, lotshort, stop = ls, when = needshort and strategy.position_size == 0 and ls > 0 and truetime)
strategy.exit("LongExit", "Long", stop = center, when = needlong and strategy.position_size > 0)
strategy.exit("Short", stop = center, when = needshort and strategy.position_size < 0)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")
    
if showdd

    //Drawdown
    max = 0.0
    max := max(strategy.equity, nz(max[1]))
    dd = (strategy.equity / max - 1) * 100
    min = 100.0
    min := min(dd, nz(min[1]))
    
    //Max loss size
    equity := strategy.position_size == 0 ? strategy.equity : equity[1]
    loss := equity < equity[1] ? ((equity / equity[1]) - 1) * 100 : 0
    maxloss := min(nz(maxloss[1]), loss)
    
    //Label
    min := round(min * 100) / 100
    maxloss := round(maxloss * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%" + "\nMax.loss " + tostring(maxloss) + "%"
    var label la = na
    label.delete(la)
    tc = min > -100 ? color.white : color.red
    osx = timenow + round(change(time)*10)
    osy = highest(100)
    // la := label.new(x = osx, y = osy, text = labeltext, xloc = xloc.bar_time, yloc = yloc.price, color = color.black, style = label.style_labelup, textcolor = tc)

Lebih lanjut