Strategi Supertrend ATR

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

img

Ringkasan

Ini adalah strategi berdasarkan penunjuk Supertrend dan penunjuk ATR. Idea utama strategi ini adalah untuk menggunakan penunjuk Supertrend untuk menentukan arah trend pasaran semasa dan membuat perdagangan apabila penunjuk Supertrend berubah. Pada masa yang sama, strategi ini menggunakan penunjuk ATR untuk mengira harga stop loss dan mengambil keuntungan, dan mengira saiz kedudukan berdasarkan peratusan tertentu baki akaun untuk mengawal risiko.

Prinsip Strategi

Prinsip-prinsip strategi ini adalah seperti berikut:

  1. Mengira nilai penunjuk Supertrend, dan menjana isyarat beli atau jual apabila penunjuk Supertrend berubah.
  2. Gunakan penunjuk ATR untuk mengira harga stop loss dan mengambil keuntungan. Harga stop loss adalah harga semasa ditambah atau dikurangkan nilai ATR dikalikan dengan kelipatan, dan harga mengambil keuntungan adalah harga stop loss dikalikan dengan nisbah risiko-balasan.
  3. Mengira saiz kedudukan berdasarkan peratusan tertentu baki akaun dan harga stop loss untuk mengawal risiko setiap perdagangan.
  4. Apabila isyarat beli dihasilkan, buka kedudukan panjang, dengan harga stop loss adalah harga di mana isyarat dihasilkan dikurangkan nilai ATR dikalikan dengan kelipatan, dan harga mengambil keuntungan adalah harga di mana isyarat dihasilkan ditambah nilai ATR dikalikan dengan kelipatan dan kemudian dikalikan dengan nisbah risiko-balasan.
  5. Apabila isyarat jual dihasilkan, buka kedudukan pendek, dengan harga stop loss adalah harga di mana isyarat dihasilkan ditambah nilai ATR dikalikan dengan kelipatan, dan harga mengambil keuntungan adalah harga di mana isyarat dihasilkan dikurangkan nilai ATR dikalikan dengan kelipatan dan kemudian dikalikan dengan nisbah risiko-balasan.

Kelebihan Strategi

Kelebihan strategi ini adalah seperti berikut:

  1. Ia menggabungkan trend-mengikuti dan penunjuk turun naik untuk menangkap trend dengan berkesan sambil mengawal risiko.
  2. Saiz kedudukan dikira secara automatik berdasarkan baki akaun dan tahap risiko, tanpa keperluan penyesuaian manual, menjadikannya mudah dilaksanakan.
  3. Parameter boleh disesuaikan dengan fleksibel untuk memenuhi pasaran dan produk yang berbeza.

Risiko Strategi

Risiko strategi ini adalah seperti berikut:

  1. Dalam pasaran yang tidak menentu, isyarat beli dan jual yang kerap boleh membawa kepada kos urus niaga yang tinggi dan tergelincir.
  2. Nisbah stop loss dan mengambil keuntungan tetap mungkin tidak dapat menyesuaikan diri dengan perubahan pasaran, yang mengakibatkan stop loss atau keuntungan yang kecil.
  3. Pengiraan saiz kedudukan bergantung kepada turun naik sejarah, yang boleh membawa kepada pengeluaran besar apabila turun naik tiba-tiba meningkat.

Untuk menangani risiko di atas, langkah-langkah berikut boleh diambil:

  1. Tambah lebih banyak keadaan penapisan isyarat untuk mengurangkan kekerapan perdagangan.
  2. Mengoptimumkan kaedah pengiraan stop loss dan mengambil keuntungan, seperti menggunakan trailing stop loss atau mengambil keuntungan dinamik.
  3. Memperkenalkan faktor kawalan risiko dalam pengiraan kedudukan, seperti mengurangkan kedudukan apabila turun naik berlaku.

Arah Pengoptimuman Strategi

Strategi ini boleh dioptimumkan dalam bidang berikut:

  1. Memperkenalkan lebih banyak penunjuk teknikal, seperti MACD, RSI, dan lain-lain, sebagai syarat tambahan untuk penilaian trend dan penapisan isyarat untuk meningkatkan ketepatan isyarat.
  2. Mengoptimumkan parameter penunjuk Supertrend dan penunjuk ATR untuk pasaran dan produk yang berbeza untuk mencari kombinasi parameter yang terbaik.
  3. Memperkenalkan lebih banyak faktor kawalan risiko dalam pengiraan kedudukan, seperti pengeluaran maksimum akaun, risiko maksimum setiap perdagangan, dll., untuk meningkatkan ketahanan strategi.
  4. Tambah strategi mengambil keuntungan, seperti mengambil keuntungan separa, mengambil keuntungan, dan lain-lain, untuk membolehkan keuntungan terus berkembang.

Pengoptimuman di atas boleh meningkatkan keuntungan dan kestabilan strategi sambil mengurangkan risikonya, menjadikannya lebih mudah disesuaikan dengan persekitaran pasaran yang berbeza.

Ringkasan

Strategi ini menggabungkan penunjuk Supertrend dan penunjuk ATR untuk menangkap trend dengan berkesan sambil mengawal risiko. Dengan mengira saiz kedudukan optimum, risiko setiap perdagangan boleh dikawal. Walau bagaimanapun, strategi ini boleh menghasilkan kos transaksi dan penarikan yang tinggi di pasaran yang tidak menentu. Dengan memperkenalkan lebih banyak penunjuk teknikal, mengoptimumkan parameter, menambah faktor kawalan risiko, dan meningkatkan strategi mengambil keuntungan, prestasi strategi ini dapat ditingkatkan lagi. Secara keseluruhan, strategi ini adalah strategi trend yang mudah dan berkesan yang sesuai untuk digunakan di pasaran trend.


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