
Trend Tracking Mobile Stop Strategy adalah strategi perdagangan kuantitatif yang menggabungkan indikator penilaian tren dan mekanisme penghentian bergerak. Strategi ini menggunakan indikator tren super untuk menilai arah tren saat ini dan menggunakan garis penghentian bergerak untuk melacak perubahan harga secara real-time, untuk memungkinkan pelacakan tren dan pengendalian risiko.
Strategi ini pertama-tama menghitung indikator supertrend untuk menentukan apakah saat ini sedang dalam tren naik atau tren turun. Indikator supertrend menggabungkan indikator ATR dan titik pusat untuk menentukan arah tren dengan lebih akurat. Jika indikator supertrend dinilai sebagai tren naik, maka akan menghasilkan sinyal beli; Jika dinilai sebagai tren turun, maka akan menghasilkan sinyal jual.
Strategi ini akan membuka lebih banyak posisi saat menghasilkan sinyal beli; pada saat yang sama, ia akan menghitung garis stop loss yang bergerak secara real-time, yang dihitung dengan cara titik pusat dikurangi nilai indikator ATR. Selama harga penutupan saat ini lebih tinggi dari garis stop loss, garis stop loss akan bergerak secara real-time dan selalu tetap berada di posisi stop loss yang masuk akal. Jika harga turun dari garis stop loss, maka stop loss akan diatasi.
Strategi ini menggabungkan indikator ADX dan RSI untuk memfilter sinyal perdagangan yang tidak sesuai. Hanya jika ADX lebih besar dari batas yang ditetapkan dan RSI berada pada tingkat yang wajar, sinyal indikator supertrend akan digunakan untuk membuka posisi.
Keuntungan terbesar dari strategi ini adalah kemampuan untuk memahami arah tren dengan baik, untuk melacak tren. Indikator tren super lebih akurat daripada rata-rata bergerak sederhana, dan dapat dengan cepat menentukan titik balik.
Selain itu, strategi ini menggabungkan indikator ADX dan RSI untuk memfilter, untuk menghindari kesalahan perdagangan pada saat pasar bergejolak. Indikator ADX dijamin memiliki kecenderungan yang cukup, dan indikator RSI menghindari overbought dan oversold, sehingga meningkatkan probabilitas keuntungan.
Risiko terbesar dari strategi ini adalah kemungkinan salah menilai tren, dan indikator supertrend mengirimkan sinyal yang salah. Meskipun indikator supertrend lebih baik daripada rata-rata bergerak sederhana, kesalahan penilaian tidak dapat dihindari dalam situasi yang kompleks.
Selain itu, pengaturan parameter strategi yang tidak tepat juga membawa risiko tertentu. Misalnya, parameter ATR di atas konvensi menyebabkan penyesuaian stop loss yang terlalu radikal; parameter yang tidak tepat untuk ADX dan RSI juga dapat melewatkan peluang perdagangan atau meningkatkan probabilitas perdagangan yang salah. Ini memerlukan banyak pengulangan sejarah untuk menemukan parameter optimal.
Strategi ini dapat dioptimalkan lebih lanjut dalam beberapa hal:
Mencoba indikator lain untuk menilai tren, seperti DMI, KDJ, dan lain-lain, dengan kombinasi indikator tren super, membentuk sistem penilaian multi-faktor, mungkin dapat meningkatkan akurasi penilaian.
Menambahkan modul optimasi parameter adaptif berbasis pembelajaran mesin, sehingga parameter ATR, parameter ADX, parameter RSI, dan lain-lain dapat disesuaikan dengan pasar real-time, bukan hanya nilai tetap.
Menggunakan indikator RSI alternatif seperti indikator sentimen, untuk memfilter sinyal. Indikator RSI tidak ideal untuk menilai situasi yang kompleks, sementara indikator sentimen sosial lebih baik untuk menilai panas pasar.
Tambahkan modul manajemen posisi, menyesuaikan ukuran posisi secara dinamis sesuai dengan jarak stop loss dari harga saat ini. Semakin jauh dari garis stop loss, posisi dapat ditingkatkan secara tepat untuk meningkatkan ruang keuntungan.
Trend tracking mobile stop loss strategy yang menggunakan analisis tren, mobile stop loss, dan multi-faktor filtering sebagai strategi kuantitatif yang lebih matang. Strategi ini masih memiliki banyak ruang untuk dioptimalkan dan layak untuk diteliti lebih lanjut agar dapat beradaptasi dengan lingkungan pasar yang lebih kompleks.
/*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")