Strategi SuperTrend

Penulis:ChaoZhang, Tanggal: 2023-10-13 17:03:55
Tag:

Gambaran umum

Strategi SuperTrend adalah strategi mengikuti tren berdasarkan perhitungan Average True Range. Strategi ini menggunakan ATR untuk menetapkan garis stop loss dan menentukan arah tren dengan menilai apakah harga menerobos garis stop loss, sehingga menghasilkan sinyal perdagangan.

Logika Strategi

Strategi ini pertama-tama menghitung Average True Range (ATR) selama periode tertentu. Kemudian menggunakan nilai ATR dikalikan dengan faktor skala untuk menghitung garis stop loss panjang dan garis stop loss pendek. Perhitungan spesifik adalah sebagai berikut:

atr = mult * atr(length)

longStop = hl2 - atr 

shortStop = hl2 + atr

Dimana panjang adalah periode untuk menghitung ATR, dan mult adalah faktor skala untuk ATR.

Setelah menghitung garis stop loss, strategi terus menilai apakah harga menembus garis stop loss dari bar sebelumnya untuk menentukan arah tren:

dir := dir == -1 and close > shortStopPrev ? 1 :  
         dir == 1 and close < longStopPrev ? -1 : dir

Ketika garis stop loss panjang dipecahkan, tren dianggap bullish. Ketika garis stop loss pendek dipecahkan, tren dianggap bearish.

Sesuai dengan perubahan arah tren, sinyal beli dan jual dihasilkan:

buySignal = dir == 1 and dir[1] == -1

sellSignal = dir == -1 and dir[1] == 1 

Akhirnya, tindakan perdagangan yang sesuai diambil ketika sinyal beli atau jual muncul.

Keuntungan

  1. Menggunakan ATR untuk menghitung garis stop loss dapat secara efektif menyaring kebisingan pasar dan menangkap sinyal tren yang lebih andal.

  2. Strategi ini memiliki beberapa parameter yang mudah dimengerti dan dioperasikan.

  3. Menggunakan stop loss line breakout untuk menentukan perubahan arah tren dapat secara efektif mengendalikan risiko dan menghentikan kerugian tepat waktu.

  4. Dapat dikonfigurasi untuk perdagangan hanya panjang atau dua arah agar sesuai dengan gaya perdagangan yang berbeda.

  5. Dapat digunakan pada setiap kerangka waktu dan untuk berbagai instrumen perdagangan.

Risiko

  1. Dalam pasar yang berkisar, ATR dapat ditarik lebih tinggi yang mengarah pada stop loss yang lebih luas dan lebih banyak sinyal palsu.

  2. Kombinasi parameter yang optimal tidak pasti. periode ATR dan pengganda perlu dioptimalkan berdasarkan kondisi pasar.

  3. Kerangka waktu optimal untuk setiap instrumen perdagangan tidak diketahui dan perlu diuji.

  4. Waktu masuk yang terbaik tidak jelas dan ada beberapa keterlambatan.

  5. Ada risiko tidak berada di pasar ketika tren lemah.

  6. Ada risiko stop loss yang akan tertular.

Peningkatan

  1. Indikator lain seperti MACD, RSI dapat dimasukkan untuk penyaringan untuk menghindari sinyal yang salah di pasar berkisar.

  2. Pembelajaran mesin atau algoritma genetik dapat digunakan untuk menemukan set parameter optimal.

  3. Optimasi parameter dapat dilakukan untuk setiap instrumen untuk menemukan periode ATR terbaik dan pengganda.

  4. Indikator volume dapat digunakan untuk menentukan waktu masuk yang lebih baik dan menghindari masuk dini.

  5. Pertimbangkan untuk menggunakan strategi penguncian untuk memegang posisi ketika tidak di pasar.

  6. Jangkauan stop loss dapat rileks dan dioptimalkan dengan indikator kekuatan tren.

Kesimpulan

Strategi SuperTrend menggunakan garis stop loss dinamis yang dihitung dari ATR untuk mendeteksi perubahan tren ketika harga pecah terjadi. Ini adalah sistem trend berikut yang relatif dapat diandalkan dan dikendalikan risiko. Strategi ini sederhana untuk digunakan dan berlaku untuk berbagai instrumen, tetapi parameter dan aturan perlu dioptimalkan untuk kinerja yang lebih baik di berbagai pasar. Menggabungkan dengan indikator dan strategi teknis lainnya dapat lebih meningkatkan hasil perdagangan. Secara umum, SuperTrend didasarkan pada konsep ilmiah yang kuat dan layak penelitian lebih lanjut dan penerapan oleh pedagang.


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

//@version=4
// strategy("SuperTrend Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000)

LongOnly = input(title="Long Only ?", type=input.bool, defval=true)
length = input(title="ATR Period", type=input.integer, defval=22)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=true)

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE

// From Date Inputs
fromDay = input(defval=1, title="From Day", minval=1, maxval=31)
fromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
fromYear = input(defval=2019, title="From Year", minval=1970)

// To Date Inputs
toDay = input(defval=1, title="To Day", minval=1, maxval=31)
toMonth = input(defval=1, title="To Month", minval=1, maxval=12)
toYear = input(defval=2020, title="To Year", minval=1970)

// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

////////////////////////////////////////////////////////////////////////////////


atr = mult * atr(length)

longStop = hl2 - atr
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = hl2 + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and close > shortStopPrev ? 1 : 
   dir == 1 and close < longStopPrev ? -1 : dir

longColor = color.green
shortColor = color.red


plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor)
buySignal = dir == 1 and dir[1] == -1
plotshape(buySignal ? longStop : na, title="Long Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0)
plotshape(buySignal and showLabels ? longStop : na, title="Buy Label", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white, transp=0)

plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor)
sellSignal = dir == -1 and dir[1] == 1
plotshape(sellSignal ? shortStop : na, title="Short Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0)
plotshape(sellSignal and showLabels ? shortStop : na, title="Sell Label", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white, transp=0)

if LongOnly
    if buySignal and time_cond
        strategy.entry("Long", strategy.long, comment="Long")
    
    if(sellSignal and time_cond)
        strategy.close("Long")
else
    if buySignal and time_cond
        strategy.entry("Long", strategy.long, comment="Long")
    else
        strategy.cancel("Long")
    
    
    if sellSignal and time_cond
        strategy.entry("Short", strategy.short, comment="Short")
    else
        strategy.cancel("Short")

if not time_cond
    strategy.close_all()


Lebih banyak