Strategi SuperTrend

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

Ringkasan

Strategi SuperTrend adalah strategi trend berikut berdasarkan pengiraan Julat Benar Purata. Ia menggunakan ATR untuk menetapkan garis stop loss dan menentukan arah trend dengan menilai sama ada harga memecahkan garis stop loss, dengan itu menjana isyarat perdagangan.

Logika Strategi

Strategi ini mula-mula mengira Julat Benar Purata (ATR) dalam tempoh tertentu. Kemudian ia menggunakan nilai ATR didarabkan dengan faktor skala untuk mengira garis stop loss panjang dan garis stop loss pendek. Pengiraan khusus adalah seperti berikut:

atr = mult * atr(length)

longStop = hl2 - atr 

shortStop = hl2 + atr

Di mana panjang adalah tempoh untuk mengira ATR, dan mult adalah faktor skala untuk ATR.

Selepas mengira garis stop loss, strategi terus menilai sama ada harga memecahkan garis stop loss bar sebelumnya untuk menentukan arah trend:

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

Apabila garis stop loss panjang dipatahkan, trend dianggap bullish. Apabila garis stop loss pendek dipatahkan, trend dianggap bearish.

Mengikut perubahan arah trend, isyarat beli dan jual dihasilkan:

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

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

Akhirnya, tindakan dagangan yang sepadan diambil apabila isyarat beli atau jual muncul.

Kelebihan

  1. Menggunakan ATR untuk mengira garis stop loss dapat menapis bunyi pasaran dengan berkesan dan menangkap isyarat trend yang lebih boleh dipercayai.

  2. Strategi ini mempunyai beberapa parameter yang mudah difahami dan beroperasi. Tempoh ATR dan pengganda boleh disesuaikan untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.

  3. Menggunakan garis stop loss untuk menentukan perubahan arah trend dapat mengawal risiko dengan berkesan dan menghentikan kerugian tepat pada masanya.

  4. Boleh dikonfigurasikan untuk perdagangan panjang sahaja atau dua arah untuk memenuhi gaya perdagangan yang berbeza.

  5. Boleh digunakan pada mana-mana jangka masa dan untuk pelbagai instrumen perdagangan.

Risiko

  1. Dalam pasaran pelbagai, ATR boleh ditarik lebih tinggi yang membawa kepada kerugian berhenti yang lebih luas dan lebih banyak isyarat palsu.

  2. Gabungan parameter yang optimum tidak pasti. Tempoh ATR dan pengganda memerlukan pengoptimuman berdasarkan keadaan pasaran.

  3. Jangka masa optimum untuk setiap instrumen dagangan tidak diketahui dan perlu diuji.

  4. Masa masuk yang terbaik tidak jelas dan ada sedikit kelewatan.

  5. Ada risiko tidak berada di pasaran apabila trend lemah.

  6. Terdapat risiko kehilangan berhenti yang dipukul.

Peningkatan

  1. Indikator lain seperti MACD, RSI boleh dimasukkan untuk penapisan untuk mengelakkan isyarat yang salah dalam pasaran berkisar.

  2. Pembelajaran mesin atau algoritma genetik boleh digunakan untuk mencari set parameter yang optimum.

  3. Pengoptimuman parameter boleh dilakukan untuk setiap instrumen untuk mencari tempoh dan pengganda ATR terbaik.

  4. Penunjuk jumlah boleh digunakan untuk menentukan masa kemasukan yang lebih baik dan mengelakkan kemasukan awal.

  5. Pertimbangkan untuk menggunakan strategi kunci untuk memegang kedudukan apabila tidak berada di pasaran.

  6. Lebar stop loss boleh santai dan dioptimumkan dengan penunjuk kekuatan trend.

Kesimpulan

Strategi SuperTrend menggunakan garis stop loss dinamik yang dikira dari ATR untuk mengesan perubahan trend apabila harga pecah berlaku. Ini adalah sistem trend yang agak boleh dipercayai dan terkawal risiko. Strategi ini mudah digunakan dan boleh digunakan untuk pelbagai instrumen, tetapi parameter dan peraturan memerlukan pengoptimuman untuk prestasi yang lebih baik di pasaran yang berbeza. Menggabungkan dengan penunjuk dan strategi teknikal lain dapat meningkatkan hasil perdagangan.


/*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 lanjut