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.
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.
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.
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.
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.
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)