Strategi ini menggunakan pelbagai petunjuk teknikal untuk mengenal pasti arah trend dan kawasan overbought dan oversold untuk menghasilkan isyarat dagangan.
Indikator utama termasuk:
Indeks arah purata ((ADX): menilai kekuatan trend
Indeks RSI yang agak lemah: menilai kelebihan beli dan kelebihan jual
Rata-rata Pivot (SMA): menilai trend jangka pendek
Indeks SAR Ekstrim: Menentukan Trend Jangka Panjang dan Jangka Pendek
Penembusan laluan: Trend penembusan masuk
Logik urus niaga:
ADX menilai trend wujud dan cukup kuat
SAR menilai trend jangka pendek dan panjang adalah selaras
RSI mengenalpasti selang jual beli
Masuk apabila harga melepasi garis rata-rata SMA
Masuk apabila harga menembusi saluran
Pelbagai penunjuk saling mengesahkan untuk meningkatkan ketepatan penghakiman, kombinasi strategi yang berbeza membentuk sistem perdagangan sistematik.
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
Tetapan berbilang parameter yang memerlukan pengoptimuman ujian berulang
Keadaan gabungan yang kurang kerap
Penunjuk sukar untuk dikendalikan apabila ia menghasilkan isyarat konflik
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.
/*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")