
Strategi ini menggabungkan indikator super trend, titik pivot, dan garis stop loss dinamis yang dibentuk oleh rata-rata amplitudo riil rata-rata, serta indikator arah rata-rata, untuk menilai dan melacak tren. Strategi ini cocok untuk perdagangan garis pendek, dapat menangkap bagian lanjutan tren setelah pengumpulan disk tengah, dan kontrol mundur juga bagus.
Indikator supertrend menggabungkan titik pivot dan stop loss ATR untuk menentukan arah harga menembus garis stop loss dinamis untuk menentukan arah posisi. Sementara itu, indikator ADX menentukan kekuatan tren dan hanya mengirimkan sinyal perdagangan jika tren cukup kuat.
Secara khusus, titik pivot pertama kali menerima resistensi dukungan terbaru, kemudian membentuk harga rata-rata dinamis dengan rata-rata aritmatika dua hari sebelumnya. Kemudian menghitung ATR dan kalikan dengan faktor ATR, kemudian ditambah dengan harga rata-rata dinamis, untuk mendapatkan naik dan turun. Ketika harga menembus naik, harga naik, dan turun ketika harga menembus turun. Indikator ADX menilai kekuatan tren, dan hanya terlibat dalam perdagangan ketika tren cukup kuat.
Stop loss line akan menyesuaikan secara dinamis dengan harga terbaru dan nilai ATR, sehingga sangat baik untuk melacak tren.
Strategi ini memiliki keuntungan sebagai berikut:
Menggunakan indikator supertrend untuk melacak arah tren, menghindari terkunci keuntungan di pasar yang bergoyang.
Menggunakan indikator ADX untuk menilai kekuatan tren, untuk menghindari kesalahan perdagangan pada saat pencatatan.
Stop Loss Line Dinamis untuk Mengunci Keuntungan Maksimal.
Dengan adanya RSI, kita bisa menghindar dari transaksi jual beli.
Secara keseluruhan, pengaturan parameter kebijakan masuk akal, kontinuitas diperhitungkan dalam pemilihan dframe, dan pengaturan stop loss juga bagus.
Strategi ini juga memiliki beberapa risiko:
Indikator supertrend dan indikator MA dapat mengirimkan sinyal konflik.
Indikator ADX ditetapkan pada 14 siklus, kurang sensitif terhadap kejadian mendadak.
Parameter RSI ditetapkan sebagai default, dan mungkin tidak dapat sepenuhnya dihindari.
Tidak mempertimbangkan dampak dari peristiwa yang tidak terduga, seperti kekosongan laba besar/berita positif.
Solusi yang sesuai:
Menyesuaikan siklus MA agar sesuai dengan indikator supertrend
Cobalah untuk mempersingkat siklus ADX dan meningkatkan sensitivitas terhadap insiden.
Optimalkan parameter RSI untuk mencari nilai optimal.
Bergabunglah dengan filter berita untuk menghindari berita besar.
Strategi ini juga dapat dioptimalkan dalam beberapa hal:
Menambahkan model pembelajaran mesin untuk menilai tren dan membuat keputusan perdagangan lebih cerdas.
Cobalah untuk memperkenalkan indikator ADX alternatif seperti indikator emosi untuk menilai kekuatan tren.
Tambahkan modul stop loss adaptif untuk stop loss yang lebih dinamis dan tepat.
Dengan menggunakan teknologi pembelajaran mendalam, lebih banyak fitur dapat diekstrak untuk mengoptimalkan strategi keseluruhan.
Menggunakan bahasa tingkat tinggi seperti Python untuk pengembangan kebijakan, meningkatkan kemampuan untuk memperluas kebijakan.
Strategi ini sangat praktis secara keseluruhan, intinya adalah untuk melacak arah pergerakan tren, dan berpartisipasi ketika tren cukup kuat. Pengaturan stop loss dan stop loss juga dibuat dengan baik, untuk mengunci keuntungan sebanyak mungkin dan menghindari perluasan kerugian. Tentu saja, masih ada banyak ruang untuk pengoptimalan, jika menambahkan pembelajaran mesin dan teknologi pembelajaran mendalam, ini akan membuat efek strategi lebih baik, dan juga lebih ekspansif dan universal.
/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Bendre ADX STrend", 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 = 21, title = "ATR Period")
StartDate = input(timestamp("1 Dec 2023"), title="Start Date")
EndDate = input(timestamp("12 Jan 2024"), title="End Date")
window() => true
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)
//
// DMI - Direction Movement Index
//
[diplus1, diminus1, adx] = ta.dmi(14, 14)
// Buy - Sell Entries
buy = bsignalSSPP and outMA < close and ADX > th
sell = ssignalSSPP
if (buy and vrsi > overBought and adx > 19)
// .order // Tuned version
strategy.entry("Buy", strategy.long, when = window())
// 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 and adx > 25)
strategy.entry("Sell", strategy.short, when = window())
if ( ta.crossover( diminus1, diplus1) or ((buy) and (strategy.position_size > 0)) )
strategy.close("Sell", "close Sell")
// if(sell) and (diminus1 > diplus1) and adx > 23 and adx > adx[1] and (vrsi < overSold)
// strategy.entry("Sell", strategy.short, when = window())
// if (strategy.position_size > 0 and ta.crossunder(diminus1, adx)) or (strategy.position_size > 0 and (buy))
// strategy.close("Sell", "close Sell")