Strategi Trailing Stop adalah strategi perdagangan kuantitatif yang menggabungkan indikator penilaian tren dan mekanisme trailing stop. Strategi ini menggunakan indikator Supertrend untuk menentukan arah tren saat ini, dan menggunakan garis trailing stop untuk melacak perubahan harga secara real time, mencapai pelacakan tren dan pengendalian risiko.
Strategi pertama menghitung indikator Supertrend untuk menilai apakah tren saat ini naik atau turun. Indikator Supertrend menggabungkan indikator ATR dan titik pivot untuk lebih akurat menentukan arah tren. Jika indikator Supertrend menilai tren naik, sinyal beli dihasilkan. Jika menilai tren turun, sinyal jual dihasilkan.
Ketika sinyal beli dihasilkan, strategi akan membuka posisi long. Pada saat yang sama, ia menghitung garis stop yang tertinggal secara real time. Metode perhitungan garis stop ini adalah titik pivot dikurangi nilai indikator ATR. Selama harga penutupan saat ini lebih tinggi dari garis stop ini, garis stop akan bergerak naik secara real time dan mempertahankan posisi stop loss yang wajar. Jika harga menerobos garis stop, posisi akan ditutup dengan stop loss.
Strategi ini juga menggabungkan indikator ADX dan RSI untuk menyaring sinyal perdagangan yang tidak sesuai. Hanya ketika ADX lebih besar dari ambang batas yang ditetapkan dan RSI berada pada tingkat yang wajar, sinyal dari indikator Supertrend akan dipercaya untuk membuka posisi.
Keuntungan terbesar dari strategi ini adalah bahwa ia dapat memahami arah tren dengan baik dan mencapai pelacakan tren. Indikator Supertrend lebih akurat daripada rata-rata bergerak sederhana dan dapat dengan cepat menentukan titik balik. Pada saat yang sama, mekanisme trailing stop dapat secara otomatis menyesuaikan tingkat stop untuk memaksimalkan penguncian keuntungan dan secara efektif mengendalikan risiko.
Selain itu, indikator ADX dan RSI ditambahkan ke strategi untuk penyaringan, menghindari kesalahan selama periode volatilitas pasar yang tinggi. indikator ADX memastikan tren yang cukup, dan indikator RSI menghindari skenario overbought dan oversold, sehingga meningkatkan profitabilitas.
Risiko terbesar dari strategi ini adalah bahwa penilaian tren salah dan indikator Supertrend mengeluarkan sinyal yang salah. Meskipun indikator Supertrend lebih unggul dari rata-rata bergerak sederhana, tidak dapat dihindari bahwa penilaian yang salah akan terjadi dalam kondisi pasar yang kompleks. Pada titik ini, perlu mengandalkan mekanisme stop loss untuk mengendalikan kerugian.
Selain itu, pengaturan parameter strategi yang tidak benar juga dapat menimbulkan risiko. Misalnya, parameter ATR yang terlalu besar akan menyebabkan penyesuaian garis stop-loss yang terlalu agresif. Pengaturan yang tidak benar dari parameter ADX dan RSI juga dapat kehilangan peluang perdagangan atau meningkatkan probabilitas perdagangan yang salah. Ini membutuhkan backtesting historis yang ekstensif untuk menemukan parameter yang optimal.
Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:
Cobalah indikator penilaian tren lainnya seperti DMI dan KDJ dalam kombinasi dengan indikator Supertrend untuk membentuk sistem penilaian
Meningkatkan modul optimasi parameter adaptif berbasis pembelajaran mesin sehingga parameter ATR, parameter ADX, parameter RSI dan sebagainya dapat disesuaikan sesuai dengan pasar real-time bukan nilai tetap.
Memperkenalkan indikator sentimen untuk menggantikan indikator RSI untuk penyaringan sinyal. indikator RSI tidak berkinerja baik dalam kondisi pasar yang kompleks, sementara indikator sentimen sosial dapat lebih baik menentukan antusiasme pasar.
Meningkatkan modul manajemen ukuran posisi. Menurut jarak antara garis stop dan harga saat ini, menyesuaikan ukuran posisi secara dinamis. Semakin jauh dari garis stop, semakin besar ukuran posisi dapat ditingkatkan dengan tepat untuk meningkatkan potensi keuntungan.
Strategi Trailing Stop Trailing Tracking menggunakan metode seperti analisis tren, trailing stop, dan penyaringan multi-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")