Strategi Pulling adalah strategi mengikuti tren berdasarkan saluran Donchian. Ini menggunakan saluran Donchian cepat dan lambat untuk mengidentifikasi arah tren dan masuk pada pullbacks. Keuntungan dari strategi ini adalah bahwa ia dapat melacak tren secara otomatis dan memotong kerugian dalam waktu ketika tren berubah.
Strategi ini pertama-tama mendefinisikan periode saluran cepat sebagai 20 bar, dan periode saluran lambat sebagai 50 bar.
Pertama, tertinggi tertinggi dan terendah terendah saluran cepat dihitung, dan titik tengah diambil sebagai garis stop loss. Pada saat yang sama, tertinggi tertinggi dan terendah terendah saluran lambat dihitung, dan saluran atas dan bawah digunakan sebagai garis masuk.
Ketika harga menembus bagian atas saluran lambat, pergi panjang. Ketika harga menembus bagian bawah saluran lambat, pergi pendek. Setelah memasuki posisi, atur stop loss di titik tengah saluran cepat.
Jadi saluran lambat menentukan arah tren utama, sementara saluran cepat melacak pecah kecil dalam kisaran kecil untuk menentukan titik stop loss.
Struktur saluran ganda dapat secara otomatis melacak tren dan dengan cepat memotong kerugian ketika tren berbalik.
Hanya dengan mengambil entri ketika harga menembus batas saluran dapat menyaring beberapa pecah palsu tanpa tren nyata.
Risiko terkontrol. Jarak stop loss dekat dapat mengontrol kerugian tunggal.
Strategi mengikuti tren dapat memiliki drawdown yang relatif besar yang membutuhkan persiapan psikologis.
Stop loss terlalu dekat. periode fast channel pendek sehingga stop loss dekat, rentan untuk dihentikan. kita dapat dengan tepat meringankan periode fast channel.
Struktur saluran ganda dapat menghasilkan entri yang berlebihan, yang membutuhkan ukuran posisi yang wajar.
Kita bisa menambahkan volatilitas dll dalam kondisi masuk untuk menyaring breakout tanpa kekuatan tren yang cukup.
Kami dapat menemukan kombinasi parameter saluran yang optimal secara sistematis.
Menggabungkan beberapa kerangka waktu. Menentukan tren utama pada kerangka waktu yang lebih tinggi dan perdagangan pada kerangka waktu yang lebih rendah.
Jarak stop loss yang dinamis, menyesuaikan jarak stop secara dinamis berdasarkan volatilitas pasar.
Strategi Puling adalah strategi trend berikut standar secara keseluruhan. Ini menggunakan saluran harga untuk menentukan arah tren dan menetapkan stop loss untuk mengendalikan risiko. Strategi ini memiliki beberapa keuntungan tetapi juga masalah penarikan dan stop loss yang terlalu dekat. Kita dapat mengoptimalkannya melalui penyesuaian parameter saluran, menambahkan filter 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)