Strategi ini menggabungkan titik pivot SuperTrend dan indikator ADX untuk perdagangan frekuensi tinggi. Garis SuperTrend secara dinamis menghitung level support dan resistance terbaru untuk menentukan tren harga dan menghasilkan sinyal perdagangan. Indikator ADX mengukur kekuatan tren dan bertindak sebagai filter, hanya mengambil perdagangan ketika tren cukup kuat.
Menghitung garis support dan resistance pivot. Ambil harga penutupan dan tambahkan/kurangi rentang ATR di atas dan di bawah. Patah garis ini menandakan pembalikan tren.
Nilai ADX yang tinggi menunjukkan tren yang kuat.
Menggabungkan keduanya untuk sinyal perdagangan. pergi panjang / pendek hanya pada pivot break dan tinggi ADX.
Keuntungan dari strategi ini:
Garis-garis SuperTrend Dinamis dengan cepat mengidentifikasi gangguan.
Filter ADX menghindari sinyal palsu selama pasar yang terikat jangkauan.
Rasio risiko-balasan yang baik dan pengendalian penarikan.
Risiko dari strategi ini:
Gerakan celah dapat membatalkan garis SuperTrend.
Pengaturan ambang ADX yang buruk mempengaruhi kinerja.
Frekuensi perdagangan yang tinggi meningkatkan biaya transaksi.
Solusi:
Optimalkan parameter untuk memungkinkan rentang breakout yang lebih luas.
Uji untuk nilai ADX yang lebih baik.
Kurangi frekuensi perdagangan.
Bidang yang perlu ditingkatkan:
Optimalkan pengganda ATR untuk garis yang lebih kuat.
Uji parameter ADX yang berbeda.
Tambahkan stop loss untuk membatasi kerugian.
Strategi ini menggabungkan kekuatan SuperTrend dan ADX untuk mengidentifikasi titik-titik pembalikan tren dengan probabilitas tinggi, disaring oleh ADX untuk kualitas.
/*backtest start: 2023-02-12 00:00:00 end: 2024-02-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("STPP20 + ADX", overlay = true) /////////////////////////// // SuperTrend + Pivot Point ////////////////////////// src = input(close, title="EMA Source") PPprd = input(defval = 2, title="Pivot Point Period", minval = 1, maxval = 50) AtrFactor=input(defval = 5, title = "ATR Factor", minval = 1, step = 0.1) AtrPd=input(defval = 20, title = "ATR Period", minval=1) float ph = na float pl = na ph := pivothigh(PPprd, PPprd) pl := pivotlow(PPprd, PPprd) float center = na center := center[1] float lastpp = ph ? ph : pl ? pl : na if lastpp if na(center) center := lastpp else center := (center * 2 + lastpp) / 3 Up = center - (AtrFactor * atr(AtrPd)) Dn = center + (AtrFactor * atr(AtrPd)) float TUp = na float TDown = na Trend = 0 TUp := close[1] > TUp[1] ? max(Up, TUp[1]) : Up TDown := close[1] < TDown[1] ? 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 = 25 TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1]))) DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0 DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? 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 = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100 ADX = sma(DX, lenADX) ////// // MA ///// lenMA = 21 srcMA = input(close, title="Source") offsetMA = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500) outMA = sma(srcMA, lenMA) // Buy - Sell Entries buy = bsignalSSPP and outMA < close and ADX > th sell = ssignalSSPP if (buy) // .order // Tuned version strategy.entry("Buy", strategy.long) if (sell) and (strategy.position_size > 0) strategy.order("Sell", false, when = sell)