Strategi perdagangan kombinasi multi-indikator ADX, RSI, SMA


Tanggal Pembuatan: 2023-09-14 16:19:46 Akhirnya memodifikasi: 2023-09-14 16:19:46
menyalin: 3 Jumlah klik: 1004
1
fokus pada
1617
Pengikut

Prinsip Strategi

Strategi ini menggabungkan beberapa indikator teknis untuk mengidentifikasi arah tren dan area overbought dan oversold untuk menghasilkan sinyal perdagangan.

Indikator utama meliputi:

  1. Indeks arah rata-rata ((ADX): menilai kekuatan tren

  2. Indikator Relatif Lemah (RSI): Pertimbangan Terlalu Beli Terlalu Jual

  3. Rata-rata Pivot (SMA): menilai tren jangka pendek

  4. Indikator SAR Ekstrim: Mengukur Tren Jangka Panjang dan Jangka Pendek

  5. Penembusan Jalur: Menembus Tren

Logika transaksi:

  1. ADX menilai tren ada dan cukup kuat

  2. SAR menilai tren jangka pendek dan panjang konsisten

  3. RSI mengidentifikasi zona overbought dan oversold

  4. Masuk saat harga menembus SMA rata-rata

  5. Masuk saat harga menembus saluran

Berbagai indikator saling memverifikasi untuk meningkatkan akurasi penilaian, kombinasi strategi yang berbeda membentuk sistem perdagangan.

Keunggulan Strategis

  • Kombinasi multi-indikator untuk meningkatkan kualitas sinyal

  • Kombinasi strategi, masuk secara sistematis

  • ADX mengidentifikasi tren, RSI menilai overbought dan oversold

  • SAR menangkap tren, SMA dan Channel terobosan masuk

Risiko Strategis

  • Pengaturan multi-parameter yang membutuhkan pengoptimalan pengujian berulang

  • Kondisi kombinasi yang kurang sering terjadi

  • Indikator yang sulit untuk dikelola saat sinyal konflik muncul

Meringkaskan

Strategi ini memanfaatkan berbagai indikator untuk membangun sistem perdagangan yang kuat. Namun, parameter yang harus dioptimalkan harus ditetapkan untuk memastikan frekuensi perdagangan yang wajar. Secara keseluruhan, strategi ini menggabungkan identifikasi tren yang kuat dengan masuk yang efisien.

Kode Sumber Strategi
/*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")