Sumber daya yang dimuat... Pemuatan...

Strategi Supertrend ATR

Penulis:ChaoZhang, Tanggal: 2024-03-29 11:29:15
Tag:

img

Gambaran umum

Ini adalah strategi yang didasarkan pada indikator Supertrend dan indikator ATR. Ide utama dari strategi ini adalah menggunakan indikator Supertrend untuk menentukan arah tren pasar saat ini dan melakukan perdagangan ketika indikator Supertrend berubah. Pada saat yang sama, strategi ini menggunakan indikator ATR untuk menghitung harga stop loss dan take profit, dan menghitung ukuran posisi berdasarkan persentase tertentu dari saldo akun untuk mengendalikan risiko.

Prinsip Strategi

Prinsip-prinsip dari strategi ini adalah sebagai berikut:

  1. Menghitung nilai indikator Supertrend, dan menghasilkan sinyal beli atau jual ketika indikator Supertrend berubah.
  2. Gunakan indikator ATR untuk menghitung harga stop loss dan take profit. harga stop loss adalah harga saat ini ditambah atau dikurangi nilai ATR dikalikan dengan kelipatan, dan harga take profit adalah harga stop loss dikalikan dengan rasio risiko-manfaat.
  3. Menghitung ukuran posisi berdasarkan persentase tertentu dari saldo akun dan harga stop loss untuk mengontrol risiko setiap perdagangan.
  4. Ketika sinyal beli dihasilkan, buka posisi panjang, dengan harga stop loss adalah harga di mana sinyal dihasilkan dikurangi nilai ATR dikalikan dengan kelipatan, dan harga mengambil keuntungan adalah harga di mana sinyal dihasilkan ditambah nilai ATR dikalikan dengan kelipatan dan kemudian dikalikan dengan rasio risiko-manfaat.
  5. Ketika sinyal jual dihasilkan, buka posisi pendek, dengan harga stop loss adalah harga di mana sinyal dihasilkan ditambah nilai ATR dikalikan dengan kelipatan, dan harga mengambil keuntungan adalah harga di mana sinyal dihasilkan dikurangi nilai ATR dikalikan dengan kelipatan dan kemudian dikalikan dengan rasio risiko-manfaat.

Keuntungan Strategi

Keuntungan dari strategi ini adalah sebagai berikut:

  1. Ini menggabungkan indikator trend-mengikuti dan volatilitas untuk secara efektif menangkap tren sambil mengendalikan risiko.
  2. Ukuran posisi dihitung secara otomatis berdasarkan saldo rekening dan tingkat risiko, tanpa perlu penyesuaian manual, sehingga mudah diterapkan.
  3. Parameter dapat disesuaikan secara fleksibel agar sesuai dengan pasar dan produk yang berbeda.

Risiko Strategi

Risiko dari strategi ini adalah sebagai berikut:

  1. Di pasar yang tidak stabil, sinyal beli dan jual yang sering dapat menyebabkan biaya transaksi dan slippage yang tinggi.
  2. Rasio stop loss dan take profit yang tetap mungkin tidak dapat beradaptasi dengan perubahan pasar, yang mengakibatkan stop loss atau keuntungan yang terlalu dini.
  3. Perhitungan ukuran posisi tergantung pada volatilitas historis, yang dapat menyebabkan penarikan besar ketika volatilitas tiba-tiba meningkat.

Untuk mengatasi risiko di atas, langkah-langkah berikut dapat diambil:

  1. Tambahkan lebih banyak kondisi penyaringan sinyal untuk mengurangi frekuensi perdagangan.
  2. Optimalkan metode perhitungan stop loss dan take profit, seperti menggunakan trailing stop loss atau dynamic take profit.
  3. Memperkenalkan faktor pengendalian risiko dalam perhitungan posisi, seperti mengurangi posisi ketika volatilitas pecah.

Arah Optimasi Strategi

Strategi ini dapat dioptimalkan di bidang berikut:

  1. Memperkenalkan lebih banyak indikator teknis, seperti MACD, RSI, dll., Sebagai kondisi tambahan untuk penilaian tren dan penyaringan sinyal untuk meningkatkan akurasi sinyal.
  2. Mengoptimalkan parameter indikator Supertrend dan indikator ATR untuk pasar dan produk yang berbeda untuk menemukan kombinasi parameter terbaik.
  3. Memperkenalkan lebih banyak faktor pengendalian risiko dalam perhitungan posisi, seperti penarikan akun maksimum, risiko maksimum per perdagangan, dll., untuk meningkatkan ketahanan strategi.
  4. Tambahkan strategi mengambil keuntungan, seperti mengambil keuntungan parsial, mengambil keuntungan, dll, untuk memungkinkan keuntungan untuk terus tumbuh.

Optimalisasi di atas dapat meningkatkan profitabilitas dan stabilitas strategi sambil mengurangi risikonya, membuatnya lebih mudah beradaptasi dengan lingkungan pasar yang berbeda.

Ringkasan

Strategi ini menggabungkan indikator Supertrend dan indikator ATR untuk secara efektif menangkap tren sambil mengontrol risiko. Dengan menghitung ukuran posisi optimal, risiko setiap perdagangan dapat dikontrol. Namun, strategi ini dapat menghasilkan biaya transaksi dan penarikan yang tinggi di pasar yang tidak stabil. Dengan memperkenalkan lebih banyak indikator teknis, mengoptimalkan parameter, menambahkan faktor pengendalian risiko, dan meningkatkan strategi mengambil keuntungan, kinerja strategi ini dapat ditingkatkan lebih lanjut. Secara keseluruhan, strategi ini adalah strategi trend-mengikuti yang sederhana dan efektif yang cocok untuk digunakan di pasar tren.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Scriptâ„¢ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tradez99

//@version=5
strategy('Supertrend', overlay=true, format=format.price, precision=2)

Periods = input(title='ATR Period', defval=10)
src = input(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
changeATR = input(title='Change ATR Calculation Method ?', defval=true)
showsignals = input(title='Show Buy/Sell Signals ?', defval=true)
highlighting = input(title='Highlighter On/Off ?', defval=true)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.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.new(color.green, 0))
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.new(color.green, 0))
plotshape(buySignal and showsignals ? up : na, title='Buy', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
dnPlot = plot(trend == 1 ? na : dn, title='Down Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
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.new(color.red, 0))
plotshape(sellSignal and showsignals ? dn : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 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)

multiplier = input.float(title="ATR multiplier", defval = 1.5)
rr           = input.float(title="Risk:Reward", defval=1.0)
riskPerTrade = input.float(title="Risk Per Trade %", defval=1.0)
atr3 = ta.atr(14)

//calculate stops and targets 
longstop = close - (atr3 * multiplier)
shortstop = close + (atr3 * multiplier)
longStopDistance  = close - longstop
shortStopDistance = shortstop - close
longTarget  = close + (longStopDistance * rr)
shortTarget = close - (shortStopDistance * rr)

// Save stops & targets
var t_stop = 0.0
var t_target = 0.0

longCondition = buySignal 
if (longCondition)
    t_stop := longstop
    t_target := longTarget
    positionSize = math.floor((strategy.equity * (riskPerTrade/100)) / (close - t_stop))
    strategy.entry("Long", strategy.long, qty = positionSize)

shortCondition = sellSignal 
if (shortCondition)
    t_stop := shortstop
    t_target := shortTarget
    positionSize = math.floor((strategy.equity * (riskPerTrade/100)) / (t_stop - close))  
    strategy.entry("Short", strategy.short, qty = positionSize)

strategy.exit(id="Long Exit", from_entry="Long", limit=t_target, stop=t_stop)
strategy.exit(id="Short Exit", from_entry="Short", limit=t_target, stop=t_stop)


Lebih banyak