
Strategi berhenti bergerak trend adalah strategi perdagangan kuantitatif yang menggabungkan indikator penghakiman trend dan mekanisme berhenti bergerak. Strategi ini menggunakan indikator super trend untuk menentukan arah trend semasa, dan menggunakan garis berhenti bergerak untuk mengesan perubahan harga dalam masa nyata, untuk mencapai trend dan kawalan risiko.
Strategi ini mula-mula mengira indikator supertrend untuk menentukan sama ada ia sedang dalam trend naik atau turun. Indikator supertrend menggabungkan indikator ATR dan titik pusat untuk menentukan arah trend dengan lebih tepat. Jika indikator supertrend dinilai sebagai trend naik, ia menghasilkan isyarat beli; jika ia dinilai sebagai trend menurun, ia menghasilkan isyarat jual.
Apabila menghasilkan isyarat beli, strategi ini akan membuka lebih banyak kedudukan; pada masa yang sama, ia akan mengira garis berhenti bergerak dalam masa nyata, yang dikira dengan cara titik pusat tolak nilai indikator ATR. Selagi harga penutupan semasa lebih tinggi daripada garis berhenti, garis berhenti akan bergerak dalam masa nyata, sentiasa berada di kedudukan berhenti yang wajar.
Strategi ini menggabungkan indikator ADX dan RSI untuk menyaring isyarat perdagangan yang tidak sesuai. Hanya apabila ADX lebih besar daripada nilai set, dan RSI berada pada tahap yang wajar, isyarat indikator super trend akan diterima untuk membuka posisi.
Kelebihan terbesar strategi ini adalah kemampuan untuk memahami arah trend dengan baik, untuk menjejaki trend. Penunjuk Super Trend lebih tepat daripada purata bergerak sederhana, dan dapat menentukan titik perubahan dengan cepat. Pada masa yang sama, mekanisme Stop Loss Mobile dapat menyesuaikan Stop Loss secara automatik, mengunci keuntungan maksimum, dan mengawal risiko dengan berkesan.
Selain itu, strategi ini menggabungkan ADX dan RSI untuk penyaringan, untuk mengelakkan perdagangan yang salah pada masa turun naik pasaran. ADX memastikan kecenderungan yang cukup, dan RSI mengelakkan overbought dan oversold, untuk meningkatkan peluang keuntungan.
Risiko terbesar dalam strategi ini adalah kebarangkalian salah menilai trend, dan indikator super trend akan menghantar isyarat yang salah. Walaupun indikator super trend lebih baik daripada purata bergerak sederhana, ia tidak dapat dielakkan untuk membuat kesalahan dalam keadaan yang rumit.
Di samping itu, parameter strategi yang tidak betul juga membawa risiko tertentu. Sebagai contoh, parameter ATR di atas persidangan menyebabkan penyesuaian garis henti terlalu radikal; parameter yang tidak betul untuk ADX dan RSI juga boleh kehilangan peluang perdagangan atau meningkatkan kemungkinan perdagangan yang salah. Ini memerlukan banyak kajian semula sejarah untuk mencari parameter yang optimum.
Strategi ini boleh dioptimumkan dengan cara berikut:
Mencuba indikator lain untuk menilai trend, seperti DMI, KDJ, dan lain-lain, dengan kombinasi indikator super trend, membentuk sistem penilaian pelbagai faktor, mungkin dapat meningkatkan ketepatan penilaian.
Menambah modul pengoptimuman parameter penyesuaian berdasarkan pembelajaran mesin, supaya parameter ATR, parameter ADX, parameter RSI dan sebagainya dapat disesuaikan dengan pasaran masa nyata, dan bukan nilai tetap yang mudah.
Memperkenalkan penunjuk RSI alternatif seperti penunjuk emosi, untuk menapis isyarat. Penunjuk RSI tidak sesuai untuk menilai keadaan yang kompleks, dan penunjuk emosi sosial dapat menilai kehangatan pasaran dengan lebih baik.
Tambah modul pengurusan kedudukan, menyesuaikan saiz kedudukan secara dinamik mengikut jarak garis berhenti dari harga semasa. Semakin jauh dari garis berhenti, anda boleh meningkatkan kedudukan dengan tepat, meningkatkan ruang keuntungan.
Trend Tracking Mobile Stop Strategy menggunakan analisis trend, stop loss bergerak dan penapisan pelbagai faktor, dan mengawal risiko dengan ketat sambil menangkap trend, merupakan strategi kuantitatif yang lebih matang. Strategi ini masih banyak ruang untuk dioptimumkan dan patut dikaji lebih lanjut untuk menjadikannya sesuai dengan persekitaran pasaran 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")