Strategi mengikuti tren dinamis

ATR
Tanggal Pembuatan: 2024-06-03 16:57:51 Akhirnya memodifikasi: 2024-06-03 16:57:51
menyalin: 4 Jumlah klik: 628
1
fokus pada
1617
Pengikut

Strategi mengikuti tren dinamis

Ringkasan

Strategi ini menggunakan indikator Supertrend untuk menangkap tren pasar. Indikator Supertrend menggabungkan harga dan volatilitas, menunjukkan tren naik ketika garis indikator berwarna hijau dan tren turun ketika merah. Strategi ini menghasilkan sinyal jual beli dengan mendeteksi perubahan warna garis indikator, sambil menggunakan garis indikator sebagai stop loss yang dinamis.

Prinsip Strategi

  1. Perhitungan indikator Supertrend atas (up) dan bawah (dn) dan menilai arah tren saat ini berdasarkan hubungan harga close out dengan atas dan bawah (trend)
  2. Ketika tren berubah dari turun (-1) ke naik (-1), menghasilkan sinyal beli (- buySignal); ketika tren berubah dari naik (-1) ke turun (- 1), menghasilkan sinyal jual (- sellSignal) 。
  3. Pada saat menghasilkan sinyal beli, bukalah posisi berlebih dan aturlah posisi downtrend ((dn) sebagai stop loss; pada saat menghasilkan sinyal sell, bukalah posisi berkurang dan aturlah posisi uptrend ((up) sebagai stop loss。
  4. Memperkenalkan logika stop loss bergerak, ketika harga naik / turun beberapa poin (trailingValue), stop loss akan bergerak ke atas / ke bawah, untuk mencapai perlindungan stop loss.
  5. Memperkenalkan logika stop-loss yang tetap, dimana posisi terdepan akan menghasilkan keuntungan ketika tren berubah.

Keunggulan Strategis

  1. Adaptif: Indikator Supertrend menggabungkan harga dan volatilitas, dapat beradaptasi dengan berbagai kondisi pasar dan varietas perdagangan.
  2. Stop loss dinamis: Menggunakan garis indikator sebagai stop loss dinamis, dapat secara efektif mengendalikan risiko dan mengurangi kerugian.
  3. Stop loss bergerak: Menggunakan logika stop loss bergerak dapat melindungi keuntungan dan meningkatkan profitabilitas strategi jika tren berlanjut.
  4. Sinyal yang jelas: Sinyal jual beli yang dihasilkan oleh strategi jelas dan mudah dioperasikan dan dieksekusi.
  5. Fleksibilitas parameter: parameter strategi (seperti siklus ATR, perkalian ATR, dll.) dapat disesuaikan sesuai dengan karakteristik pasar dan gaya perdagangan, meningkatkan fleksibilitas.

Risiko Strategis

  1. Risiko parameter: pengaturan parameter yang berbeda dapat menyebabkan perbedaan besar dalam kinerja strategi, yang memerlukan pengujian dan pengoptimalan parameter yang memadai.
  2. Risiko pasar goyah: Dalam pasar goyah, perubahan tren yang sering dapat menyebabkan strategi menghasilkan lebih banyak sinyal perdagangan, meningkatkan biaya perdagangan dan risiko slippage.
  3. Risiko perubahan tren: Ketika tren pasar berubah secara tiba-tiba, strategi mungkin tidak tepat waktu untuk menyesuaikan posisi, menyebabkan peningkatan kerugian.
  4. Risiko over-optimisasi: Strategi yang dioptimalkan secara berlebihan dapat menyebabkan kurva fit dan tidak berkinerja baik di pasar di masa depan.

Arah optimasi strategi

  1. Memperkenalkan analisis multi-frame waktu untuk mengkonfirmasi stabilitas tren dan mengurangi seringnya transaksi di pasar yang bergolak.
  2. Dengan kombinasi indikator teknis atau faktor fundamental lainnya, meningkatkan akurasi penilaian tren.
  3. Mengoptimalkan stop loss dan stop-loss logika, seperti memperkenalkan stop-loss dinamis atau rasio keuntungan risiko, meningkatkan rasio untung rugi dari strategi.
  4. Uji stabilitas terhadap parameter, pilih kombinasi parameter yang dapat mempertahankan kinerja yang baik dalam berbagai kondisi pasar.
  5. Memperkenalkan aturan manajemen posisi dan pengelolaan dana untuk mengontrol risiko transaksi tunggal dan risiko agregat.

Meringkaskan

Strategi pelacakan tren dinamis memanfaatkan indikator Supertrend untuk menangkap tren pasar, mengendalikan risiko dengan menghentikan kerugian secara dinamis dan bergerak, dan mengunci keuntungan dengan menggunakan stop loss tetap. Strategi ini sangat fleksibel, sinyalnya jelas, dan mudah dioperasikan. Namun, dalam aplikasi praktis, perlu diperhatikan masalah seperti pengoptimalan parameter, risiko pasar yang bergoyang, dan risiko perubahan tren.

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