Strategi ini menggabungkan titik-titik pusingan SuperTrend dan penunjuk ADX untuk perdagangan frekuensi tinggi. Garis SuperTrend secara dinamik mengira tahap sokongan dan rintangan terkini untuk menentukan trend harga dan menjana isyarat perdagangan.
Mengira garis sokongan dan rintangan pivot. Ambil harga penutupan dan tambah / tolak julat ATR di atas dan di bawah. Pecahan garis ini menandakan pembalikan trend.
ADX menentukan kekuatan trend. Nilai ADX yang tinggi menunjukkan trend yang kuat.
Gabungkan kedua-duanya untuk isyarat perdagangan. pergi panjang / pendek hanya pada rehat pivot dan ADX tinggi.
Kelebihan strategi ini:
Garis SuperTrend Dinamis dengan cepat mengenal pasti penembusan.
Penapis ADX mengelakkan isyarat palsu semasa pasaran terhad julat.
Nisbah risiko-balasan yang baik dan kawalan pengeluaran.
Risiko strategi ini:
Pergerakan jurang boleh membatalkan garis SuperTrend.
Tetapan ambang ADX yang buruk memberi kesan kepada prestasi.
Frekuensi perdagangan yang tinggi meningkatkan kos transaksi.
Penyelesaian:
Mengoptimumkan parameter untuk membolehkan julat pecah yang lebih luas.
Uji untuk nilai ADX yang lebih baik.
Kurangkan kekerapan perdagangan.
Bidang yang perlu diperbaiki:
Mengoptimumkan pengganda ATR untuk garis yang lebih kukuh.
Uji parameter ADX yang berbeza.
Tambah stop-loss untuk hadkan kerugian.
Strategi ini menggabungkan kekuatan SuperTrend dan ADX untuk mengenal pasti titik pembalikan trend yang berkemungkinan tinggi, disaring oleh ADX untuk kualiti.
/*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)