Strategi ini menggabungkan pelbagai penunjuk teknikal untuk mengenal pasti arah trend dan tahap overbought / oversold untuk isyarat perdagangan.
Penunjuk utama yang digunakan ialah:
Indeks Arah Purata (ADX): Kekuatan Trend
Indeks Kekuatan Relatif (RSI): Overbought/Oversold
Purata Bergerak Sederhana (SMA): Trend Jangka Pendek
SuperTrend: Trend jangka panjang/pendek
Penembusan Saluran: Penembusan aliran masuk
Logik perdagangan adalah:
ADX menunjukkan kehadiran trend dan kekuatan
SuperTrend mengesahkan penyelarasan trend jangka pendek / jangka panjang
RSI mengenal pasti rantau yang terlalu banyak dibeli/terlalu banyak dijual
Masukkan pada SMA crossover
Masukkan saluran pecah
Kombinasi pelbagai penunjuk meningkatkan ketepatan isyarat. Strategi yang berbeza digabungkan menjadi pendekatan sistematik.
Pelbagai penunjuk meningkatkan kualiti
Strategi menggabungkan untuk kemasukan sistematik
ADX mengenal pasti trend, RSI overbought/oversold
SuperTrend menangkap trend, SMA & saluran masuk
Penyesuaian pelbagai parameter memerlukan pengoptimuman
Keadaan gabungan berlaku kurang kerap
Isyarat penunjuk yang bertentangan yang sukar diselesaikan
Strategi ini sepenuhnya menggunakan kekuatan pelbagai penunjuk untuk membina sistem yang kukuh. Tetapi pengoptimuman parameter adalah kunci untuk kekerapan perdagangan yang ideal. Secara keseluruhan ia menggabungkan pengenalan trend yang kuat dengan entri yang cekap.
/*backtest start: 2023-09-12 00:00:00 end: 2023-09-13 00:00:00 period: 45m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 // strategy("Combined Strategy", overlay=true, default_qty_value=100, initial_capital=1000, margin_long=0.1) adxlen = input(7, title="ADX Smoothing") dilen = input(7, title="DI Length") dirmov(len) => up = ta.change(high) down = -ta.change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = ta.rma(ta.tr, len) plus = fixnan(100 * ta.rma(plusDM, len) / truerange) minus = fixnan(100 * ta.rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) sig = adx(dilen, adxlen) // The same on Pine Scriptâ„¢ pine_supertrend(factor, atrPeriod) => src = hl2 atr = ta.atr(atrPeriod) upperBand = src + factor * atr lowerBand = src - factor * atr prevLowerBand = nz(lowerBand[1]) prevUpperBand = nz(upperBand[1]) lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand int direction = na float superTrend = na prevSuperTrend = superTrend[1] if na(atr[1]) and ta.rsi(close, 21) < 66 and ta.rsi(close,3) > 80 and ta.rsi(close, 28) > 49 and sig > 20 direction := 1 else if prevSuperTrend == prevUpperBand direction := close > upperBand ? -1 : 1 else direction := close < lowerBand ? 1 : -1 superTrend := direction == -1 ? lowerBand : upperBand [superTrend, direction] [pineSupertrend, pineDirection] = pine_supertrend(3, 10) upTrend = pineDirection < 0 downTrend = pineDirection > 0 // Define the 20-period SMA sma20 = ta.sma(close, 20) a = ta.rsi(close,14) OB = input(70) OS = input(30) os = a > OB ob = a < OS if upTrend and close > pineSupertrend and close > sma20 and os strategy.entry("Buy", strategy.long) if ta.crossunder(close, sma20) or ob strategy.close_all() //define when to breakout of channel //("ChannelBreakOutStrategy", overlay=true) length = input.int(title="Length", minval=1, maxval=1000, defval=5) upBound = ta.highest(high, length) downBound = ta.lowest(low, length) if (not na(close[length])) strategy.entry("ChBrkLE", strategy.long, stop=upBound + syminfo.mintick, comment="ChBrkLE") strategy.entry("ChBrkSE", strategy.short, stop=downBound - syminfo.mintick, comment="ChBrkSE")