EMA Memperkuat Strategi SuperTrend

Penulis:ChaoZhang, Tanggal: 2023-10-07 10:07:15
Tag:

Gambaran umum

Strategi ini menilai arah tren harga dengan membandingkan ATR dan harga, dikombinasikan dengan penilaian asisten rata-rata bergerak.

Prinsip Strategi

Langkah-langkah utama dari strategi ini untuk menentukan tren harga adalah:

  1. Menghitung ATR dari N hari terakhir, menggunakan metode perhitungan ATR Wilder, yang dapat mencerminkan volatilitas pasar saat ini dengan lebih baik.

  2. Hitung band atas dan bawah berdasarkan ATR dan koefisien atk. Band atas = harga - (atk x ATR); band bawah = harga + (atk x ATR). atk biasanya ditetapkan antara 2-3.

  3. Bandingkan harga dengan band atas dan bawah untuk menentukan arah tren. price breakout band atas adalah sinyal bullish; price breakout band bawah adalah sinyal bearish.

  4. Ambil panjang atau pendek saat sinyal perdagangan terjadi. moving average digunakan di sini untuk menentukan kualitas sinyal.

  5. Tambahkan strategi stop loss untuk mengendalikan risiko.

  6. Gunakan tanda warna untuk status strategi untuk membantu penilaian.

Strategi ini memanfaatkan sepenuhnya keuntungan dari ATR untuk dengan cepat menangkap perubahan tren harga dan mencapai operasi penarikan rendah.

Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Tanggapan cepat terhadap perubahan harga. ATR dapat merespons dengan cepat terhadap pasar terbaru dan membantu menangkap perubahan tren tepat waktu.

  2. Zona penyangga antara band atas dan bawah dapat mengurangi probabilitas stop loss breakout dan penyangga yang lebih rendah.

  3. Sinyal perdagangan yang jelas. Penembusan rentang adalah sinyal berkualitas tinggi untuk arah panjang dan pendek.

  4. Periode ATR dan multiplier dapat disesuaikan untuk menyesuaikan diri dengan lingkungan pasar yang berbeda.

  5. Visualisasi yang kuat. alat grafis menampilkan status strategi secara intuitif.

  6. Modul seperti stop loss bergerak, filter dapat ditambahkan untuk optimasi lebih lanjut.

Secara umum, strategi ini memiliki keuntungan yang luar biasa seperti penarikan kecil, membuatnya sangat cocok untuk strategi mengikuti tren.

Risiko

Ada juga beberapa risiko:

  1. Risiko kesalahan penentuan tren. Sinyal yang salah mungkin terjadi selama konsolidasi harga.

  2. Risiko pemilihan titik keluar. titik stop loss harus diatur secara wajar untuk menghindari keluar prematur.

  3. Risiko optimasi parameter. periode ATR dan pengganda membutuhkan pengujian berulang dan optimasi, pengaturan yang tidak tepat akan mempengaruhi kinerja.

  4. Risiko frekuensi perdagangan yang tinggi. Frekuensi perdagangan mungkin terlalu tinggi selama volatilitas pasar yang ekstrim.

  5. Risiko kinerja sedang. Kinerja mungkin tidak memuaskan di beberapa pasar tanpa tren yang jelas.

  6. Penyesuaian untuk risiko perdagangan langsung. penyesuaian perlu dilakukan untuk slippage, komisi dalam perdagangan langsung.

  7. Risiko sistematis: Pengendalian risiko sistem secara keseluruhan harus dipertimbangkan, alih-alih hanya mengandalkan strategi ini.

Risiko dapat dikendalikan dengan:

  1. Mengoptimalkan parameter ATR untuk meningkatkan akurasi.

  2. Menggunakan analisis multi-frame waktu untuk menentukan tren.

  3. Mengadopsi stop loss bergerak untuk mengunci keuntungan dan mengurangi drawdowns.

  4. Menambahkan filter untuk mengontrol frekuensi perdagangan.

  5. Mengatur parameter untuk pasar yang berbeda.

  6. Mencoba produk yang berbeda untuk menemukan skenario aplikasi terbaik.

  7. Mempertimbangkan secara komprehensif semua risiko perdagangan dalam perdagangan langsung.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Menambahkan filter seperti moving average untuk mengurangi sinyal yang salah.

  2. Mengoptimalkan parameter ATR dengan menguji periode yang berbeda untuk menemukan nilai optimal.

  3. Mengoptimalkan parameter pengganda untuk menentukan sensitivitas generasi sinyal.

  4. Menambahkan strategi stop loss dinamis berdasarkan ATR atau volatilitas.

  5. Menggunakan indikator jangka waktu yang lebih tinggi untuk analisis untuk menyaring sinyal palsu sporadis.

  6. Mengadopsi model pembelajaran mesin seperti RNN untuk meningkatkan penilaian sinyal.

  7. Penyesuaian parameter berdasarkan karakteristik produk. misalnya, menggunakan periode ATR yang lebih pendek untuk saham volatile.

  8. Mengoptimalkan titik masuk dengan menggunakan pendekatan penarikan keluar untuk menemukan entri yang lebih baik.

  9. Menggabungkan indikator volume untuk menilai kekuatan sinyal.

  10. Menambahkan strategi mengambil keuntungan berdasarkan indikator momentum tren.

Kesimpulan

Secara umum, strategi supertrend ini sangat praktis dengan keuntungan seperti respon cepat dan penarikan kecil. Ini adalah sistem trend berikut yang khas. Tetapi risiko seperti kesalahan penilaian dan optimasi parameter harus diperhatikan dalam perdagangan langsung, dan manajemen risiko yang komprehensif harus diimplementasikan. Optimasi lebih lanjut dapat membuat strategi lebih kuat dan menguntungkan di lebih banyak pasar.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic


//@version=4
strategy("SuperTrend STRATEGY", overlay=true)
Periods = input(title="ATR Period", type=input.integer, defval=10)
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)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)
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 Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
window()  => true
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
    strategy.entry("SELL", strategy.short, when = window())
buy1= barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)

//@version=3
//study(title="3 Moving Average Exponential", shorttitle="3 EMA", overlay=true)
//len1 = input(17, minval=1, title="Fast")
//len2 = input(72, minval=1, title="Medium")
len3 = input(305, minval=1, title="Slow")
//src1 = input(close, title="Source Fast")
//src2 = input(close, title="Source Medium")
src3 = input(close, title="Source Slow")
//out1 = ema(src1, len1)
//out2 = ema(src2, len2)
out3 = ema(src3, len3)
//plot(out1, title="EMA1", color=fuchsia)
//plot(out2, title="EMA2", color=orange)
plot(out3, title="EMA3", color=color.blue)

Lebih banyak