Strategi ini menggabungkan berbagai indikator teknis untuk mengidentifikasi arah tren dan tingkat overbought / oversold untuk sinyal perdagangan.
Indikator utama yang digunakan adalah:
Indeks Arah Rata-rata (ADX): Kekuatan Tren
Indeks Kekuatan Relatif (RSI): Overbought/Oversold
Simple Moving Average (SMA): Tren jangka pendek
SuperTrend: Tren jangka panjang/pendek
Penembusan Saluran: Penembusan tren masuk
Logika perdagangan adalah:
ADX menunjukkan kehadiran dan kekuatan tren
SuperTrend mengkonfirmasi keselarasan tren jangka panjang/pendek
RSI mengidentifikasi wilayah yang terlalu banyak dibeli/terlalu banyak dijual
Masukkan pada SMA crossover
Masukkan pada saluran istirahat
Kombinasi multi-indikator meningkatkan akurasi sinyal. Strategi yang berbeda digabungkan menjadi pendekatan sistematis.
Berbagai indikator meningkatkan kualitas
Strategi menggabungkan untuk masuk sistematis
ADX mengidentifikasi tren, RSI overbought/oversold
SuperTrend menangkap tren, SMA & entri saluran
Multi-parameter tuning membutuhkan optimasi
Kondisi kombinasi terjadi lebih jarang
Sinyal indikator yang bertentangan sulit untuk diselesaikan
Strategi ini sepenuhnya memanfaatkan kekuatan dari berbagai indikator untuk membangun sistem yang kuat. tetapi optimasi parameter adalah kunci untuk frekuensi perdagangan yang ideal. secara keseluruhan menggabungkan identifikasi tren yang kuat dengan entri yang efisien.
/*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")