Strategi SuperTrend

Penulis:ChaoZhang, Tanggal: 2024-02-02 11:11:48
Tag:

img

Gambaran umum

Strategi ini menggunakan indikator Supertrend untuk menentukan tren harga dan memasuki posisi panjang atau pendek ketika tren berubah. Strategi ini memungkinkan penyesuaian periode ATR dan pengganda untuk mengoptimalkan parameter.

Strategi ini memiliki built-in backtesting range tanggal dan kemampuan untuk trading hanya dalam waktu tertentu dari hari dan menutup semua perdagangan di akhir jangka waktu itu. Ini sangat berguna untuk saham perdagangan hari. Ketika opsi timeframe diaktifkan, Anda dapat memilih untuk memasuki posisi saat ini segera ketika jangka waktu dimulai, atau menunggu perubahan tren untuk memasuki posisi pertama.

Strategi ini juga memungkinkan Anda untuk menentukan tingkat stop loss dan take profit berdasarkan persentase. Dalam kebanyakan kasus, stop based ATR yang disediakan oleh Supertrend sendiri membuat stop loss tambahan tidak perlu. Jadi Anda dapat mengaktifkan hanya take profit untuk mengoptimalkan mekanisme keluar.

Akhirnya, ada bidang peringatan khusus untuk pesan masuk dan keluar yang akan digunakan dengan layanan perdagangan otomatis.

Logika Strategi

Strategi Supertrend didasarkan pada prinsip-prinsip utama berikut:

  1. Menghitung nilai ATR: Dapat memilih antara perhitungan SMA atau indikator ATR bawaan. Rumus SMA:

    atr2 = sma(tr, Periods)
    
  2. Hitung band atas dan bawah. Band atas adalah dekat dikurangi ATR multiplier kali ATR. Band bawah adalah dekat ditambah multiplier kali ATR.

    up = close - (Multiplier * atr) 
    dn = close + (Multiplier * atr)
    
  3. Tentukan arah tren dengan membandingkan harga dengan band. Uptrend ketika harga melintasi band bawah. Downtrend ketika harga melintasi band atas.

    trend := trend == -1 and close > dn ? 1 : trend == 1 and close < up ? -1 : trend
    
  4. Menghasilkan sinyal perdagangan pada perubahan tren, misalnya sinyal jual saat berubah dari tren naik ke tren turun:

    sellSignal = trend == -1 and trend[1] == 1 
    
  5. Filter entri berdasarkan sinyal dan kondisi tambahan.

  6. Gunakan stop loss dan take profit untuk mengunci keuntungan atau membatasi risiko.

Ini adalah prinsip kerja utama di balik strategi Supertrend. Dikombinasikan dengan optimasi parameter, dapat menghasilkan hasil perdagangan yang baik.

Keuntungan

Strategi Supertrend memiliki beberapa keuntungan:

  1. Supertrend sendiri secara efektif mengidentifikasi tren dan biasanya digunakan untuk trailing stop.

  2. Parameter ATR yang dapat disesuaikan dapat dioptimalkan di seluruh produk untuk kecocokan terbaik. Perhitungan SMA menyediakan opsi lain.

  3. Backtest yang dapat dikonfigurasi dan rentang waktu perdagangan langsung sesuai dengan sesi perdagangan yang berbeda.

  4. Pilihan untuk memasuki perdagangan pertama segera atau menunggu sinyal melayani produk yang berbeda.

  5. Dilengkapi stop loss dan mengambil keuntungan membantu meningkatkan manajemen risiko atau mengunci lebih banyak keuntungan.

  6. Peringatan perdagangan yang dapat disesuaikan untuk integrasi dengan sistem perdagangan otomatis dan bot.

Risiko

Ada juga beberapa risiko yang harus dipertimbangkan:

  1. Supertrend dapat menghasilkan sinyal palsu yang perlu disaring dengan kondisi tambahan.

  2. Parameter ATR yang tidak tepat dapat menyebabkan over-trading atau hilangnya tren.

  3. Stop loss yang terlalu dekat dapat menyebabkan keluarnya perdagangan yang menguntungkan secara prematur.

  4. Konfigurasi jangka waktu yang buruk dapat melewatkan sesi perdagangan atau mengikat margin tanpa perlu.

Risiko ini dapat ditangani dengan penyesuaian parameter yang tepat atau filter tambahan untuk meningkatkan ketahanan.

Peluang Optimalisasi

Beberapa cara strategi dapat dioptimalkan lebih lanjut:

  1. Uji periode ATR yang berbeda untuk menemukan keseimbangan yang tepat, biasanya 10-20 berhasil.

  2. Cobalah nilai perkalian ATR yang berbeda, umumnya 2-5 sesuai, sesuaikan untuk menemukan yang optimal.

  3. Tambahkan filter seperti MACD, RSI dll untuk mengurangi sinyal palsu.

  4. Mengoptimalkan stop loss dan mengambil tingkat keuntungan untuk hasil terbaik.

  5. Uji rentang waktu perdagangan yang berbeda. Durasi yang lebih pendek sesuai dengan strategi intraday dan frekuensi tinggi.

  6. Mengimplementasikan pilihan simbol otomatis untuk melacak momentum tinggi atau volatilitas.

Kesimpulan

Secara keseluruhan ini adalah strategi tren yang cukup umum dan praktis. Ini secara efisien melacak tren dengan parameter yang dapat disesuaikan, tetapi juga memiliki risiko yang melekat untuk dikelola. Dengan optimasi dan kondisi tambahan, ini dapat disempurnakan menjadi sistem perdagangan kuantitatif yang kuat dengan alfa yang konsisten.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
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/
// © REV0LUTI0N

//@version=4

// Strategy
strategy("Supertrend Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)
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)
enableentry = input(true, title="Enter First Trade ASAP")
waitentry = input(false, title="Wait To Enter First Trade")

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)
Long = (trend == 1 ? up : na)
buySignal = trend == 1 and trend[1] == -1

dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
Short = (trend == 1 ? na : dn)
sellSignal = trend == -1 and trend[1] == 1

// Strategy Backtesting
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true

//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = (time(timeframe.period, startendtime))
timetoclose = na(time(timeframe.period, startendtime))

// Stop Loss & Take Profit % Based
enablesl = input(false, title='Enable Stop Loss')
enabletp = input(false, title='Enable Take Profit')
stopTick = input(5.0, title='Stop Loss %', type=input.float, step=0.1) / 100
takeTick = input(10.0, title='Take Profit %', type=input.float, step=0.1) / 100

longStop = strategy.position_avg_price * (1 - stopTick)
shortStop = strategy.position_avg_price * (1 + stopTick)
shortTake = strategy.position_avg_price * (1 - takeTick)
longTake = strategy.position_avg_price * (1 + takeTick)

plot(strategy.position_size > 0 and enablesl ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesl ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enabletp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enabletp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")

// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")

// Strategy Execution
if Long and time_cond and timetobuy and enableentry
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if Short and time_cond and timetobuy and enableentry
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if buySignal and time_cond and timetobuy and waitentry
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if sellSignal and time_cond and timetobuy and waitentry
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if strategy.position_size > 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closeshort)
    
if strategy.position_size > 0 and enablesl and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enablesl and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)
    
if strategy.position_size > 0 and enabletp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enabletp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)






Lebih banyak