Strategi trend tracking trailing stop adalah strategi perdagangan kuantitatif yang menggabungkan indikator penilaian trend dan mekanisme trailing stop. Strategi ini menggunakan penunjuk Supertrend untuk menentukan arah trend semasa, dan menggunakan garis trailing stop untuk mengesan perubahan harga dalam masa nyata, mencapai pengesanan trend dan kawalan risiko.
Strategi ini mula-mula mengira penunjuk Supertrend untuk menilai sama ada trend semasa naik atau turun. Penunjuk Supertrend menggabungkan penunjuk ATR dan titik pusingan untuk menentukan arah trend dengan lebih tepat. Jika penunjuk Supertrend menilai aliran naik, isyarat beli dihasilkan. Jika ia menilai aliran turun, isyarat jual dihasilkan.
Apabila isyarat beli dihasilkan, strategi ini akan membuka kedudukan panjang. Pada masa yang sama, ia mengira garis berhenti yang tertinggal dalam masa nyata. Kaedah pengiraan garis berhenti ini adalah titik pusingan dikurangkan nilai penunjuk ATR. Selagi harga penutupan semasa lebih tinggi daripada garis berhenti ini, garis berhenti akan bergerak naik dalam masa nyata dan mengekalkan kedudukan stop loss yang munasabah. Jika harga memecahkan garis berhenti, kedudukan akan ditutup dengan stop loss.
Strategi ini juga menggabungkan penunjuk ADX dan RSI untuk menapis isyarat perdagangan yang tidak sesuai. Hanya apabila ADX lebih besar daripada ambang yang ditetapkan dan RSI berada pada tahap yang munasabah isyarat dari penunjuk Supertrend akan dipercayai untuk membuka kedudukan.
Kelebihan terbesar strategi ini adalah bahawa ia dapat memahami arah trend dengan baik dan mencapai penjejakan trend. Indikator Supertrend lebih tepat daripada purata bergerak mudah dan dapat dengan cepat menentukan titik perubahan. Pada masa yang sama, mekanisme berhenti yang menyusul dapat menyesuaikan tahap berhenti secara automatik untuk memaksimumkan kunci keuntungan dan mengawal risiko dengan berkesan.
Di samping itu, penunjuk ADX dan RSI ditambah kepada strategi penapisan, mengelakkan kesilapan semasa tempoh turun naik pasaran yang tinggi.
Risiko terbesar strategi ini adalah bahawa pertimbangan trend salah dan penunjuk Supertrend mengeluarkan isyarat yang salah. Walaupun penunjuk Supertrend lebih unggul daripada purata bergerak mudah, tidak dapat dielakkan bahawa pertimbangan yang salah akan berlaku dalam keadaan pasaran yang kompleks. Pada ketika ini, perlu bergantung pada mekanisme stop loss untuk mengawal kerugian.
Di samping itu, tetapan parameter strategi yang tidak betul juga boleh menimbulkan risiko. Sebagai contoh, parameter ATR yang terlalu besar akan menyebabkan penyesuaian garis stop-loss yang terlalu agresif. Tetapan ADX dan RSI yang tidak betul juga boleh kehilangan peluang perdagangan atau meningkatkan kebarangkalian perdagangan yang salah. Ini memerlukan ujian belakang sejarah yang luas untuk mencari parameter yang optimum.
Strategi ini boleh dioptimumkan lagi dalam aspek berikut:
Cuba penunjuk penilaian trend lain seperti DMI dan KDJ dalam kombinasi dengan penunjuk Supertrend untuk membentuk sistem penilaian
Meningkatkan modul pengoptimuman parameter adaptif berasaskan pembelajaran mesin supaya parameter ATR, parameter ADX, parameter RSI dan sebagainya dapat disesuaikan mengikut pasaran masa nyata dan bukannya nilai tetap.
Memperkenalkan penunjuk sentimen untuk menggantikan penunjuk RSI untuk penapisan isyarat.
Meningkatkan modul pengurusan saiz kedudukan. Menurut jarak antara garis berhenti dan harga semasa, menyesuaikan saiz kedudukan secara dinamik. Semakin jauh dari garis berhenti, semakin besar saiz kedudukan dapat ditingkatkan dengan sewajarnya untuk meningkatkan potensi keuntungan.
Strategi trend tracking trailing stop secara komprehensif menggunakan kaedah seperti analisis trend, trailing stop, dan penapisan pelbagai faktor.
/*backtest start: 2023-01-16 00:00:00 end: 2024-01-16 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bendre ADX Sup Trend", overlay = true) /////////////////////////// // SuperTrend + Pivot Point ////////////////////////// src = input(close, title="EMA Source") PPprd = input(defval = 2, title="Pivot Point Period") AtrFactor=input(defval = 2, title = "ATR Factor") AtrPd=input(defval = 18, title = "ATR Period") StartDate = input(timestamp("1 Dec 2022"), title="Start Date") EndDate = input(timestamp("12 Jan 2023"), title="End Date") var float ph = na var float pl = na ph := ta.pivothigh(PPprd, PPprd) pl :=ta.pivotlow(PPprd, PPprd) float center = na center := center[1] // float lastpp = ph ? ph : pl ? pl : 0.0 float lastpp = na(ph) ? na(pl) ? na : pl : ph if lastpp > 0 if na(center) center := lastpp else center := (center * 2 + lastpp) / 3 Up = center - (AtrFactor * ta.atr(AtrPd)) Dn = center + (AtrFactor * ta.atr(AtrPd)) var float TUp = na var float TDown = na Trend = 0 TUp := close[1] > TUp[1] ? math.max(Up, TUp[1]) : Up TDown := close[1] < TDown[1] ? math.min(Dn, TDown[1]) : Dn Trend := close > TDown[1] ? 1: close < TUp[1]? -1: nz(Trend[1], 1) Trailingsl = Trend == 1 ? TUp : TDown // Lines linecolor = Trend == 1 and nz(Trend[1]) == 1 ? color.lime : Trend == -1 and nz(Trend[1]) == -1 ? color.red : na plot(Trailingsl, color = linecolor , linewidth = 2, title = "PP SuperTrend") bsignalSSPP = close > Trailingsl ssignalSSPP = close < Trailingsl /////// // ADX ////// lenADX = 14 th = 14 TrueRange = math.max(math.max(high-low, math.abs(high-nz(close[1]))), math.abs(low-nz(close[1]))) DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? math.max(high-nz(high[1]), 0): 0 DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? math.max(nz(low[1])-low, 0): 0 SmoothedTrueRange = 0.0 SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/lenADX) + TrueRange SmoothedDirectionalMovementPlus = 0.0 SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/lenADX) + DirectionalMovementPlus SmoothedDirectionalMovementMinus = 0.0 SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/lenADX) + DirectionalMovementMinus DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100 DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100 DX = math.abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100 ADX = ta.sma(DX, lenADX) ////// // MA ///// lenMA = 21 srcMA = input(close, title="Source") // offsetMA = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500) offsetMA = input(0, title="Offset") outMA = ta.sma(srcMA, lenMA) // // RSI // length = input( 14 ) overSold = input( 30 ) overBought = input( 65 ) price = close vrsi = ta.rsi(price, length) // Buy - Sell Entries buy = bsignalSSPP and outMA < close and ADX > th sell = ssignalSSPP if (buy and vrsi > overBought) // .order // Tuned version strategy.entry("Buy", strategy.long) // strategy.close("Sell", "close Sell") if (sell) and (strategy.position_size > 0) // strategy.entry("Sell", strategy.short) strategy.close("Buy", "Close Buy") // if(sell and vrsi < overSold ) // strategy.entry("Sell", strategy.short) // if(buy) and (strategy.position_size > 0) // strategy.close("Sell", "close Sell")