Strategi Pengesanan Trend Berganda

Penulis:ChaoZhang, Tarikh: 2024-01-16 15:03:55
Tag:

img

Ringkasan

Dual Trend Tracking Strategy adalah strategi komposit yang menggabungkan penunjuk Supertrend, Double Exponential Moving Average (DEMA) dan Bollinger Bands. Ia bertujuan untuk menangkap isyarat beli dan jual tepat pada masanya apabila trend berbalik dengan memanfaatkan kelebihan pelbagai penunjuk teknikal.

Logika Strategi

Strategi ini terdiri daripada tiga bahagian utama:

  1. Indikator Supertrend: Mengira garis pecah ke atas dan garis pecah ke bawah untuk menentukan arah trend semasa. Ia menghasilkan isyarat beli apabila harga pecah ke atas dari garis supertrend, dan isyarat jual apabila harga pecah ke bawah.

  2. Rata-rata Bergerak Eksponensial Berganda (DEMA): Penunjuk penjejakan trend yang menggabungkan ciri-ciri purata bergerak mudah dan purata bergerak eksponensial, yang dapat bertindak balas terhadap perubahan harga dengan lebih cepat. Strategi menetapkan DEMA 200 hari untuk menilai arah trend jangka panjang.

  3. Bollinger Bands: Mewakili julat turun naik harga. Penyusutan atau pengembangan Bollinger Bands yang tidak normal menandakan pembalikan trend yang berpotensi.

Apabila penunjuk Supertrend dan DEMA kedua-duanya mengeluarkan isyarat beli / jual, strategi memasuki kedudukan yang sepadan.

Kelebihan

  1. Gabungan beberapa penunjuk mengurangkan isyarat palsu.

  2. Penunjuk Supertrend tidak sensitif terhadap perubahan harga kecil dan hanya menghasilkan isyarat pada titik perubahan trend, mengelakkan kekerapan perdagangan yang berlebihan.

  3. DEMA melengkung halus dengan tepat dan boleh dipercayai menilai trend jangka panjang.

  4. Bollinger Bands membantu menentukan titik pembalikan trend.

Risiko dan Penyelesaian

  1. Parameter supertrend yang terlalu sensitif boleh menghasilkan lebih banyak bunyi bising. Mengoptimumkan tempoh ATR dan parameter pengganda dapat memperbaikinya.

  2. Tempoh DEMA yang panjang menyebabkan kebolehan mengikuti trend yang lemah.

  3. Isyarat yang tidak konsisten apabila menggabungkan penilaian beberapa penunjuk. Dalam kes ini, penunjuk supertrend boleh dianggap sebagai isyarat utama.

Arahan pengoptimuman

  1. Uji tempoh ATR yang berbeza dan parameter pengganda untuk mencari kombinasi optimum untuk penunjuk supertrend.

  2. Mengoptimumkan parameter tempoh DEMA.

  3. Tambah penunjuk tambahan lain seperti KDJ, MACD dll.

  4. Memperkenalkan strategi stop loss.

Ringkasan

Strategi Pengesanan Trend Dual menggabungkan kekuatan Supertrend, DEMA dan Bollinger Bands dengan menggunakan pelbagai penunjuk, meningkatkan kualiti isyarat sambil menangkap trend. Penambahbaikan prestasi yang lebih lanjut dapat dijangkakan melalui pengoptimuman parameter dan menambah mekanisme stop loss.


/*backtest
start: 2023-01-09 00:00:00
end: 2024-01-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Supertrend + DEMA + Bollinger Bands", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10, precision=2)

// Input parameters for Supertrend
atrLength = input(title="ATR Period", type=input.integer, defval=12)
src = input(hl2, title="Source")
multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR = input(title="Change ATR Calculation Method?", type=input.bool, defval=true)
showSupertrend = input(title="Show Supertrend Indicator?", type=input.bool, defval=true)

// Input parameters for DEMA
demaLength = input(200, title="DEMA Period")
showDEMA = input(title="Show DEMA Indicator?", type=input.bool, defval=true)

// Calculate ATR for Supertrend
atr2 = sma(tr, atrLength)
atr = changeATR ? atr(atrLength) : atr2

// Calculate Supertrend
up = src - (multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? max(up, up1) : up

dn = src + (multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn

trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Plot Supertrend
upPlot = plot(showSupertrend ? (trend == 1 ? up : na) : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(buySignal ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))

dnPlot = plot(showSupertrend ? (trend == 1 ? na : dn) : na, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(sellSignal ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))

mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)

longFillColor = (trend == 1 ? color.new(color.green, 80) : color.new(color.white, 0))
shortFillColor = (trend == -1 ? color.new(color.red, 80) : color.new(color.white, 0))

fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor)

// Alert conditions
alertcondition(buySignal, title="Custom Supertrend Buy", message="Custom Supertrend Buy!")
alertcondition(sellSignal, title="Custom Supertrend Sell", message="Custom Supertrend Sell!")

// Calculate DEMA
ema1 = ema(close, demaLength)
dema = 2 * ema1 - ema(ema1, demaLength)

// Plot DEMA with white color
plot(showDEMA ? dema : na, color=color.new(color.white, 0), title="DEMA", linewidth=2)

// Add push notification on mobile if buy and sell occurred
if (buySignal)
    strategy.entry("Buy", strategy.long)
    strategy.exit("Sell")
    alert("Buy Signal - Supertrend")

if (sellSignal)
    strategy.entry("Sell", strategy.short)
    strategy.exit("Cover")
    alert("Sell Signal - Supertrend")


Lebih lanjut