Strategi Pengesanan Trend berasaskan SuperTrend

Penulis:ChaoZhang, Tarikh: 2023-12-08 17:07:53
Tag:

img

Ringkasan

Strategi ini dibina berdasarkan penunjuk Julat Benar Purata (ATR) untuk membina garis SuperTrend untuk menilai arah trend pasaran dan menjana isyarat perdagangan.

Logika Strategi

Strategi ini mengira ATR dalam jangka masa tertentu dan membandingkannya dengan harga untuk menentukan sama ada harga berada dalam saluran uptrend. Khususnya, ia mula-mula mengira ATR, kemudian menggunakan nilai ATR dikalikan dengan faktor untuk merangka jalur atas dan bawah. Apabila harga lebih tinggi daripada jalur atas, trend naik dikenal pasti. Apabila harga berada di bawah jalur bawah, trend menurun dikenal pasti. Dalam trend naik, jika harga berubah dari trend turun ke trend naik, isyarat beli dihasilkan. Dalam trend turun, jika harga berubah dari trend naik ke trend turun, isyarat jual dicetuskan.

Kuncinya terletak pada pembinaan penanda aras penilaian trend - garis SuperTrend. Garis SuperTrend berdasarkan pada ATR yang berubah secara dinamik, yang dapat menapis bunyi pasaran dengan berkesan dan menentukan arah trend utama. Sementara itu, garis SuperTrend mempunyai kesan kelewatan tertentu, yang membantu mengesahkan titik pembalikan trend dan mengelakkan menghasilkan isyarat perdagangan yang salah.

Kelebihan

Kelebihan terbesar strategi ini adalah gabungan pengesanan trend dan keupayaan penjejakan:

  1. Baris SuperTrend berasaskan ATR dapat mengenal pasti trend pasaran dengan berkesan dan menapis bunyi bising.
  2. Kesan ketinggalan garis SuperTrend membantu mengurangkan isyarat yang salah.
  3. Ia boleh memberikan penilaian trend dan isyarat perdagangan untuk operasi yang mudah.
  4. Parameter boleh dioptimumkan untuk sesuai dengan pasaran yang lebih pelbagai.
  5. Penunjuk visual membolehkan penilaian trend intuitif.

Analisis Risiko

Risiko utama strategi ini termasuk:

  1. Tetapan parameter ATR yang tidak betul boleh menyebabkan garis SuperTrend yang terlalu sensitif atau tertinggal.
  2. Ia tidak boleh mengelakkan sepenuhnya kesan bunyi bising, yang kadang-kadang boleh mencetuskan isyarat yang salah.
  3. Ketepatan menurun semasa turun naik pasaran yang ganas.
  4. Ia tidak boleh meramalkan titik pembalikan trend tetapi hanya boleh mengesan trend yang ada.

Penyelesaian yang mungkin termasuk mengoptimumkan parameter seperti tempoh ATR dan faktor SuperTrend, menggabungkan dengan penunjuk lain untuk pengesahan, dan mengurangkan kebarangkalian isyarat yang salah.

Arahan pengoptimuman

Ruang pengoptimuman lanjut wujud di bidang seperti:

  1. Menggunakan pembelajaran mesin untuk pengoptimuman parameter automatik.
  2. Menambah penunjuk seperti purata bergerak eksponensial untuk pengesahan.
  3. Menetapkan strategi stop loss / mengambil keuntungan untuk pengurusan wang yang halus.
  4. Menggabungkan penunjuk sentimen dan analisis berita untuk meramalkan kemungkinan perubahan trend.
  5. Memanfaatkan pembelajaran mendalam untuk menganalisis lebih banyak data sejarah dan meningkatkan ketepatan.

Pengoptimuman mendalam menjanjikan untuk meningkatkan lagi kestabilan, kesesuaian dan keuntungan strategi.

Kesimpulan

Strategi ini menunjukkan kestabilan, kebolehpercayaan dan keuntungan yang besar secara keseluruhan. Membina garis SuperTrend untuk penghakiman trend utama dan isyarat perdagangan adalah kemuncak terbesarnya. Tetapi beberapa tahap kesan ketinggalan dan risiko salah menilai wujud. Pengoptimuman parameter dan model menjanjikan prestasi strategi yang lebih baik. Ringkasnya, sebagai strategi berasaskan trend biasa, adalah berbaloi untuk mengesahkan dan menggunakannya dalam perdagangan langsung.


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

//@version=4
strategy("Supertrend Strategy", overlay = true)

Periods = input(10, title="ATR Period")
src = input(hl2, title="Source")
Multiplier = input(3.0, title="ATR Multiplier", step=0.1)
changeATR = input(true, title="Change ATR Calculation Method?")
showsignals = input(true, title="Show Buy/Sell Signals?")
highlighting = input(true, title="Highlighter On/Off?")

atr2 = sma(tr, Periods)
atr = changeATR ? atr(Periods) : atr2

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

upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
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.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)

dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
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.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)

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

longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white

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

strategy.entry("Buy", strategy.long, when=buySignal)
strategy.entry("Sell", strategy.short, when=sellSignal)

alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")


Lebih lanjut