Sumber dimuat naik... memuat...

Trend Dinamis Mengikut Strategi

Penulis:ChaoZhang, Tarikh: 2024-06-03 16:57:51
Tag:ATR

img

Ringkasan

Strategi ini menggunakan penunjuk Supertrend untuk menangkap trend pasaran. Indikator Supertrend menggabungkan harga dan turun naik, dengan garis hijau yang menunjukkan trend menaik dan garis merah yang menunjukkan trend menurun. Strategi ini menghasilkan isyarat beli dan jual dengan mengesan perubahan warna garis indikator, sambil menggunakan garis indikator sebagai tahap stop-loss dinamik. Strategi ini juga menggabungkan logik stop-loss dan mengambil keuntungan tetap untuk mengoptimumkan prestasi.

Prinsip Strategi

  1. Mengira rentang atas (atas) dan bawah (dn) penunjuk Supertrend dan menentukan arah trend semasa (trend) berdasarkan hubungan antara harga penutupan dan rentang atas dan bawah.
  2. Menghasilkan isyarat beli (buySignal) apabila trend berubah dari ke bawah (-1) ke atas (1), dan menghasilkan isyarat jual (sellSignal) apabila trend berubah dari ke atas (1) ke bawah (-1).
  3. Apabila isyarat beli dihasilkan, buka kedudukan panjang dan tetapkan band bawah (dn) sebagai tahap stop-loss; apabila isyarat jual dihasilkan, buka kedudukan pendek dan tetapkan band atas (up) sebagai tahap stop-loss.
  4. Memperkenalkan logik stop-loss, di mana tahap stop-loss dipindahkan ke atas / ke bawah apabila harga naik / jatuh oleh beberapa mata (trailingValue), menyediakan perlindungan stop-loss.
  5. Memperkenalkan logik mengambil keuntungan tetap, menutup kedudukan untuk keuntungan apabila trend berubah.

Kelebihan Strategi

  1. Kebolehsesuaian: Indikator Supertrend menggabungkan harga dan turun naik, yang membolehkannya menyesuaikan diri dengan keadaan pasaran dan instrumen perdagangan yang berbeza.
  2. Stop-loss dinamik: Menggunakan garis penunjuk sebagai tahap stop-loss dinamik dapat mengawal risiko dengan berkesan dan mengurangkan kerugian.
  3. Stop-loss: Memperkenalkan logik stop-loss boleh melindungi keuntungan apabila trend berterusan, meningkatkan keuntungan strategi.
  4. Isyarat yang jelas: Isyarat beli dan jual yang dihasilkan oleh strategi adalah jelas dan mudah dikendalikan dan dilaksanakan.
  5. Parameter fleksibel: Parameter strategi (seperti tempoh ATR, pengganda ATR, dll.) boleh diselaraskan berdasarkan ciri pasaran dan gaya perdagangan, meningkatkan kesesuaian.

Risiko Strategi

  1. Risiko parameter: Tetapan parameter yang berbeza boleh membawa kepada perbezaan yang ketara dalam prestasi strategi, yang memerlukan pengujian balik dan pengoptimuman parameter yang menyeluruh.
  2. Risiko pasaran yang bergolak: Dalam pasaran yang bergolak, perubahan trend yang kerap boleh menyebabkan strategi menghasilkan isyarat perdagangan yang berlebihan, meningkatkan kos transaksi dan risiko tergelincir.
  3. Risiko perubahan trend tiba-tiba: Apabila trend pasaran tiba-tiba berubah, strategi mungkin tidak dapat menyesuaikan kedudukan dengan tepat pada masanya, yang membawa kepada peningkatan kerugian.
  4. Risiko pengoptimuman yang berlebihan: Mengoptimumkan strategi yang berlebihan boleh menyebabkan pemasangan lengkung, yang mengakibatkan prestasi yang buruk di pasaran masa depan.

Arahan Pengoptimuman Strategi

  1. Menggabungkan analisis pelbagai jangka masa untuk mengesahkan kestabilan trend dan mengurangkan perdagangan yang kerap di pasaran yang bergelora.
  2. Menggabungkan penunjuk teknikal atau faktor asas lain untuk meningkatkan ketepatan penentuan trend.
  3. Mengoptimumkan logik stop-loss dan mengambil keuntungan, seperti memperkenalkan nisbah mengambil keuntungan dinamik atau nisbah risiko-balasan, untuk meningkatkan nisbah keuntungan-kerugian strategi.
  4. Melakukan ujian ketahanan pada parameter untuk memilih kombinasi parameter yang mengekalkan prestasi yang baik dalam keadaan pasaran yang berbeza.
  5. Memperkenalkan ukuran kedudukan dan peraturan pengurusan wang untuk mengawal risiko perdagangan individu dan risiko keseluruhan.

Ringkasan

Strategi Pengikut Trend Dinamik menggunakan penunjuk Supertrend untuk menangkap trend pasaran, mengawal risiko melalui stop-loss dinamik dan trailing stop-loss, sambil mengunci keuntungan dengan mengambil keuntungan tetap. Strategi ini dapat disesuaikan, mempunyai isyarat yang jelas, dan mudah dikendalikan. Walau bagaimanapun, dalam penerapan praktikal, perhatian harus diberikan kepada pengoptimuman parameter, risiko pasaran bergolak, dan risiko perubahan trend tiba-tiba. Dengan memperkenalkan analisis pelbagai jangka masa, mengoptimumkan logik stop-loss dan mengambil keuntungan, menjalankan ujian ketahanan parameter, dan melaksanakan langkah-langkah lain, prestasi dan kestabilan strategi dapat ditingkatkan lagi.


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

//@version=5
strategy('Supertrend Strategy', overlay=true, format=format.price, precision=2)
Periods = input.int(title='ATR Period', defval=10)
src = input.source(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
changeATR = input.bool(title='Change ATR Calculation Method ?', defval=true)
showsignals = input.bool(title='Show Buy/Sell Signals ?', defval=true)
highlighting = input.bool(title='Highlighter On/Off ?', defval=true)

// ATR calculation
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2

// Supertrend calculations
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 direction
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Plotting
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))

// Highlighting
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, transp=90)
fill(mPlot, dnPlot, title='DownTrend Highligter', color=shortFillColor, transp=90)

// Alerts
alertcondition(buySignal, title='SuperTrend Buy', message='SuperTrend Buy!')
alertcondition(sellSignal, title='SuperTrend Sell', message='SuperTrend Sell!')
changeCond = trend != trend[1]
alertcondition(changeCond, title='SuperTrend Direction Change', message='SuperTrend has changed direction!')

// Pip and trailing stop calculation
pips = 50
pipValue = syminfo.mintick * pips
trailingPips = 10
trailingValue = syminfo.mintick * trailingPips

// Strategy
if (buySignal)
    strategy.entry("Long", strategy.long, stop=dn, comment="SuperTrend Buy")
if (sellSignal)
    strategy.entry("Short", strategy.short, stop=up, comment="SuperTrend Sell")

// Take profit on trend change
if (changeCond and trend == -1)
    strategy.close("Long", comment="SuperTrend Direction Change")
if (changeCond and trend == 1)
    strategy.close("Short", comment="SuperTrend Direction Change")

// Initial Stop Loss
longStopLevel = up - pipValue
shortStopLevel = dn + pipValue

// Trailing Stop Loss
var float longTrailStop = na
var float shortTrailStop = na

if (strategy.opentrades > 0)
    if (strategy.position_size > 0)  // Long position
        if (longTrailStop == na or close > strategy.position_avg_price + trailingValue)
            longTrailStop := high - trailingValue
        strategy.exit("Stop Loss Long", from_entry="Long", stop=longTrailStop)
    if (strategy.position_size < 0)  // Short position
        if (shortTrailStop == na or close < strategy.position_avg_price - trailingValue)
            shortTrailStop := low + trailingValue
        strategy.exit("Stop Loss Short", from_entry="Short", stop=shortTrailStop)

// Initial Exit
strategy.exit("Initial Stop Loss Long", from_entry="Long", stop=longStopLevel)
strategy.exit("Initial Stop Loss Short", from_entry="Short", stop=shortStopLevel)

Berkaitan

Lebih lanjut