Strategi ATR Super Trend


Tanggal Pembuatan: 2024-03-29 11:29:15 Akhirnya memodifikasi: 2024-03-29 11:29:15
menyalin: 2 Jumlah klik: 707
1
fokus pada
1617
Pengikut

Strategi ATR Super Trend

Ringkasan

Ini adalah strategi yang didasarkan pada indikator supertrend dan indikator ATR. Gagasan utama dari strategi ini adalah: menggunakan indikator supertrend untuk menentukan arah tren pasar saat ini, melakukan perdagangan ketika indikator supertrend berubah. Strategi ini juga menggunakan indikator ATR untuk menghitung harga stop loss dan stop loss, dan menghitung ukuran posisi berdasarkan proporsi tertentu dari saldo akun untuk mengendalikan risiko.

Prinsip Strategi

Strategi ini berbunyi:

  1. Menghitung nilai indikator supertrend, menghasilkan sinyal beli atau jual ketika indikator supertrend berubah.
  2. Untuk menghitung stop loss dan harga stop dengan menggunakan indikator ATR, stop loss adalah harga saat ini ditambah nilai ATR dikurangi dengan satu kali lipat, dan stop loss adalah harga stop loss dikalikan dengan satu kali rasio keuntungan risiko.
  3. Ukuran posisi dihitung berdasarkan persentase dari saldo akun dan harga stop loss untuk mengendalikan risiko pada setiap transaksi.
  4. Ketika sinyal beli dihasilkan, posisi dibuka lebih banyak, harga stop loss dikurangi nilai ATR pada saat sinyal dihasilkan dengan kelipatan, harga stop loss dikurangi nilai ATR pada saat sinyal dihasilkan ditambah nilai ATR pada saat sinyal dihasilkan dengan kelipatan dikalikan dengan rasio keuntungan risiko.
  5. Ketika menghasilkan sinyal jual, buka posisi kosong, stop loss harga untuk harga ketika sinyal dihasilkan ditambah nilai ATR dikali satu kali lipat, stop stop harga untuk harga ketika sinyal dihasilkan dikurangi nilai ATR dikali satu kali lipat dikali risiko keuntungan rasio.

Keunggulan Strategis

Keuntungan dari strategi ini adalah sebagai berikut:

  1. Kombinasi pelacakan tren dan indikator volatilitas memungkinkan untuk menangkap tren secara efektif, sekaligus mengendalikan risiko.
  2. Ukuran posisi dihitung secara otomatis berdasarkan saldo akun dan tingkat risiko, tidak perlu disesuaikan secara manual, mudah diterapkan.
  3. Parameter dapat disesuaikan secara fleksibel untuk pasar dan varietas yang berbeda.

Risiko Strategis

Risiko dari strategi ini adalah sebagai berikut:

  1. Dalam pasar yang bergejolak, sinyal jual beli yang sering terjadi dapat menyebabkan biaya transaksi dan slippage yang lebih tinggi.
  2. Rasio stop loss dan stop loss tetap mungkin tidak dapat beradaptasi dengan perubahan pasar, menyebabkan stop loss terlalu dini atau keuntungan terlalu kecil.
  3. Perhitungan ukuran posisi bergantung pada volatilitas historis, yang dapat menyebabkan penarikan yang lebih besar jika volatilitas tiba-tiba meningkat.

Langkah-langkah yang dapat diambil untuk mengatasi risiko tersebut adalah sebagai berikut:

  1. Meningkatkan kondisi penyaringan sinyal dan mengurangi frekuensi transaksi.
  2. Metode penghitungan yang dioptimalkan untuk stop loss dan stop loss, misalnya menggunakan stop loss bergerak atau stop loss dinamis.
  3. Memperkenalkan faktor pengendalian risiko dalam perhitungan posisi, seperti mengurangi posisi ketika volatilitas terobosan.

Arah optimasi strategi

Strategi ini dapat dioptimalkan dengan cara:

  1. Masuknya lebih banyak indikator teknis, seperti MACD, RSI, dan lain-lain, sebagai kondisi tambahan untuk penilaian tren dan pemfilteran sinyal, meningkatkan akurasi sinyal.
  2. Untuk berbagai pasar dan varietas, mengoptimalkan parameter indikator tren super dan indikator ATR untuk menemukan kombinasi parameter optimal.
  3. Mengintegrasikan lebih banyak faktor pengendalian risiko dalam perhitungan posisi, seperti pengembalian akun maksimum, risiko maksimum dalam satu transaksi, dan lain-lain, meningkatkan kehandalan strategi.
  4. Menambahkan strategi stop-loss, seperti stop-loss parsial, stop-loss bergerak, dan lain-lain, untuk terus meningkatkan keuntungan.

Optimasi di atas dapat meningkatkan profitabilitas dan stabilitas strategi, sekaligus mengurangi risiko strategi, sehingga strategi lebih sesuai dengan lingkungan pasar yang berbeda.

Meringkaskan

Strategi ini menggabungkan indikator supertrend dan indikator ATR untuk menangkap tren secara efektif, sekaligus mengendalikan risiko. Dengan menghitung ukuran posisi optimal, risiko setiap perdagangan dapat dikendalikan. Namun, strategi ini dapat menghasilkan biaya perdagangan dan penarikan yang lebih tinggi di pasar yang bergoyang.

Kode Sumber Strategi
/*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)