Strategi perdagangan gabungan multi-indikator ADX,RSI,SMA

Penulis:ChaoZhang, Tanggal: 2023-09-14 16:19:46
Tag:

Logika Strategi

Strategi ini menggabungkan berbagai indikator teknis untuk mengidentifikasi arah tren dan tingkat overbought / oversold untuk sinyal perdagangan.

Indikator utama yang digunakan adalah:

  1. Indeks Arah Rata-rata (ADX): Kekuatan Tren

  2. Indeks Kekuatan Relatif (RSI): Overbought/Oversold

  3. Simple Moving Average (SMA): Tren jangka pendek

  4. SuperTrend: Tren jangka panjang/pendek

  5. Penembusan Saluran: Penembusan tren masuk

Logika perdagangan adalah:

  1. ADX menunjukkan kehadiran dan kekuatan tren

  2. SuperTrend mengkonfirmasi keselarasan tren jangka panjang/pendek

  3. RSI mengidentifikasi wilayah yang terlalu banyak dibeli/terlalu banyak dijual

  4. Masukkan pada SMA crossover

  5. Masukkan pada saluran istirahat

Kombinasi multi-indikator meningkatkan akurasi sinyal. Strategi yang berbeda digabungkan menjadi pendekatan sistematis.

Keuntungan

  • Berbagai indikator meningkatkan kualitas

  • Strategi menggabungkan untuk masuk sistematis

  • ADX mengidentifikasi tren, RSI overbought/oversold

  • SuperTrend menangkap tren, SMA & entri saluran

Risiko

  • Multi-parameter tuning membutuhkan optimasi

  • Kondisi kombinasi terjadi lebih jarang

  • Sinyal indikator yang bertentangan sulit untuk diselesaikan

Ringkasan

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")


Lebih banyak