Strategi ini menggabungkan Super Trend, Pivot Points dan Average True Range (ATR) untuk membentuk garis stop loss yang dinamis, dan indikator Average Directional Movement Index (ADX) untuk menilai dan melacak tren.
Super Trend dikombinasikan dengan Pivot Points dan ATR stop loss menilai arah harga menembus garis stop loss dinamis untuk menentukan arah pembukaan. Pada saat yang sama, indikator ADX menilai kekuatan tren dan hanya mengeluarkan sinyal perdagangan ketika tren cukup kuat.
Secara khusus, Pivot Points pertama mendapatkan dukungan dan resistensi terbaru, dan kemudian membentuk harga tengah dinamis dengan rata-rata aritmatika dua hari sebelumnya. Kemudian ATR dihitung dan dikalikan dengan faktor ATR, dan kemudian ditambahkan atau dikurangi dari harga tengah dinamis untuk mendapatkan rel atas dan bawah. Ketika harga menembus rel atas, itu bullish. Ketika menembus rel bawah, itu bearish. Indikator ADX menilai kekuatan tren, dan hanya berpartisipasi dalam perdagangan ketika tren cukup kuat.
Garis stop loss akan disesuaikan secara dinamis sesuai dengan harga terbaru dan nilai ATR, yang dapat melacak tren dengan sangat baik.
Strategi ini memiliki keuntungan berikut:
Gunakan indikator Super Trend untuk melacak arah tren yang berjalan untuk menghindari penguncian keuntungan oleh pasar yang berosilasi.
Dengan bantuan indikator ADX untuk menilai kekuatan tren, hindari kesalahan dalam perdagangan selama konsolidasi.
Garis stop loss diatur secara dinamis untuk memaksimalkan keuntungan lock-in.
Gabungkan RSI untuk menghindari overbuy dan oversell.
Secara keseluruhan, pengaturan parameter strategi wajar. Pilihan dframe mempertimbangkan kontinuitas. Pengaturan mengambil keuntungan dan stop loss juga baik.
Strategi ini juga memiliki beberapa risiko:
Indikator Super Trend dan MA dapat mengeluarkan sinyal yang bertentangan.
Indikator ADX diatur untuk 14 siklus, yang tidak cukup sensitif terhadap kejadian tiba-tiba.
Parameter RSI ditetapkan sebagai default, yang mungkin gagal untuk sepenuhnya menghindari overbought dan oversold.
Dampak dari peristiwa tiba-tiba tidak dipertimbangkan, seperti berita buruk / baik besar.
Solusi yang sesuai:
Sesuaikan siklus MA agar sesuai dengan indikator Super Trend.
Cobalah untuk memperpendek siklus ADX untuk meningkatkan sensitivitas terhadap kejadian mendadak.
Optimalkan parameter RSI untuk menemukan nilai optimal.
Tambahkan modul filter berita untuk menghindari rilis berita utama.
Strategi ini juga dapat dioptimalkan dalam aspek berikut:
Tambahkan model pembelajaran mesin untuk menilai tren, membuat keputusan perdagangan lebih cerdas.
Cobalah untuk memperkenalkan indikator emosional alternatif alih-alih ADX untuk menilai kekuatan tren.
Meningkatkan modul stop loss adaptif untuk membuat stop loss lebih dinamis dan akurat.
Ekstrak lebih banyak fitur dengan teknologi pembelajaran mendalam untuk mengoptimalkan keseluruhan strategi.
Gunakan bahasa canggih seperti Python untuk pengembangan strategi untuk meningkatkan skalabilitas strategi.
Secara keseluruhan, strategi ini sangat praktis. Inti adalah untuk melacak arah trend berjalan dan berpartisipasi ketika tren cukup kuat. Pengaturan stop loss dan take profit juga sangat tepat untuk memaksimalkan penguncian keuntungan sambil menghindari kerugian. Tentu saja, masih ada banyak ruang untuk optimasi. Menambahkan teknologi pembelajaran mesin dan pembelajaran mendalam akan membuat strategi lebih efektif dan dapat diperluas.
/*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")