Strategi perdagangan gabungan berbilang penunjuk ADX, RSI, SMA


Tarikh penciptaan: 2023-09-14 16:19:46 Akhirnya diubah suai: 2023-09-14 16:19:46
Salin: 3 Bilangan klik: 1004
1
fokus pada
1617
Pengikut

Prinsip Strategi

Strategi ini menggunakan pelbagai petunjuk teknikal untuk mengenal pasti arah trend dan kawasan overbought dan oversold untuk menghasilkan isyarat dagangan.

Indikator utama termasuk:

  1. Indeks arah purata ((ADX): menilai kekuatan trend

  2. Indeks RSI yang agak lemah: menilai kelebihan beli dan kelebihan jual

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

  4. Indeks SAR Ekstrim: Menentukan Trend Jangka Panjang dan Jangka Pendek

  5. Penembusan laluan: Trend penembusan masuk

Logik urus niaga:

  1. ADX menilai trend wujud dan cukup kuat

  2. SAR menilai trend jangka pendek dan panjang adalah selaras

  3. RSI mengenalpasti selang jual beli

  4. Masuk apabila harga melepasi garis rata-rata SMA

  5. Masuk apabila harga menembusi saluran

Pelbagai penunjuk saling mengesahkan untuk meningkatkan ketepatan penghakiman, kombinasi strategi yang berbeza membentuk sistem perdagangan sistematik.

Kelebihan Strategik

  • Kombinasi pelbagai penunjuk untuk meningkatkan kualiti isyarat

  • Kombinasi strategi, kemasukan secara sistematik

  • ADX mengenal pasti trend, RSI menilai terlalu beli dan terlalu jual

  • SAR merampas trend, SMA dan saluran masuk

Risiko Strategik

  • Tetapan berbilang parameter yang memerlukan pengoptimuman ujian berulang

  • Keadaan gabungan yang kurang kerap

  • Penunjuk sukar untuk dikendalikan apabila ia menghasilkan isyarat konflik

ringkaskan

Strategi ini memanfaatkan kelebihan pelbagai indikator untuk membina sistem perdagangan yang mantap. Tetapi perlu menetapkan parameter yang dioptimumkan untuk memastikan frekuensi perdagangan yang wajar. Secara keseluruhan, strategi ini menggabungkan pengenalan trend yang kuat dengan kemasukan yang cekap.

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