Aliran dinamik mengikut strategi

ATR
Tarikh penciptaan: 2024-06-03 16:57:51 Akhirnya diubah suai: 2024-06-03 16:57:51
Salin: 4 Bilangan klik: 628
1
fokus pada
1617
Pengikut

Aliran dinamik mengikut strategi

Gambaran keseluruhan

Strategi ini menggunakan indikator Supertrend untuk menangkap trend pasaran. Indikator Supertrend menggabungkan harga dan kadar turun naik, menunjukkan trend naik apabila garis indikator berwarna hijau dan turun apabila merah. Strategi ini menghasilkan isyarat beli dan jual dengan mengesan perubahan warna garis indikator, sambil menggunakan garis indikator sebagai stop loss dinamik.

Prinsip Strategi

  1. Hitung rantaian atas (up) dan rantaian bawah (dn) dalam indikator Supertrend, dan menilai arah trend semasa (trend) berdasarkan hubungan harga penutupan dengan rantaian atas dan bawah.
  2. Apabila trend bertukar dari turun ((-1) ke naik ((1), menghasilkan isyarat beli ((buySignal); apabila trend bertukar dari naik ((1) ke turun ((-1), menghasilkan isyarat jual ((sellSignal) 。
  3. Apabila menghasilkan isyarat beli, buka kedudukan lebih banyak, dan tetapkan downtrend ((dn) sebagai titik berhenti; apabila menghasilkan isyarat jual, buka kedudukan kosong, dan tetapkan uptrend ((up) sebagai titik berhenti.
  4. Memperkenalkan logik hentian bergerak, apabila harga naik / turun beberapa mata (trailingValue), hentian akan bergerak ke atas / ke bawah, untuk mencapai perlindungan hentian.
  5. Memperkenalkan logik stop-loss yang tetap, apabila trend berubah, kedudukan terendah akan mendapat keuntungan.

Kelebihan Strategik

  1. Kebolehan beradaptasi: Indikator Supertrend menggabungkan harga dan kadar turun naik untuk menyesuaikan diri dengan keadaan pasaran dan jenis perdagangan yang berbeza.
  2. Hentian dinamik: Menggunakan garis penunjuk sebagai titik hentian dinamik, anda boleh mengawal risiko dengan berkesan dan mengurangkan kerugian.
  3. Hentian bergerak: Pengenalan logik hentian bergerak dapat melindungi keuntungan dan meningkatkan keuntungan strategi apabila trend berterusan.
  4. Isyarat jelas: isyarat beli dan jual yang dihasilkan oleh strategi jelas, mudah dikendalikan dan dilaksanakan.
  5. Fleksibiliti parameter: parameter strategi (seperti kitaran ATR, pengganda ATR, dan lain-lain) boleh disesuaikan dengan ciri-ciri pasaran dan gaya perdagangan untuk meningkatkan daya serap.

Risiko Strategik

  1. Risiko parameter: Pengaturan parameter yang berbeza boleh menyebabkan perbezaan besar dalam prestasi strategi, yang memerlukan pengukuran dan pengoptimuman parameter yang mencukupi.
  2. Risiko pasaran goyah: Dalam pasaran goyah, perubahan trend yang kerap boleh menyebabkan strategi menghasilkan lebih banyak isyarat perdagangan, meningkatkan kos perdagangan dan risiko slippage.
  3. Risiko perubahan trend: Apabila trend pasaran berubah secara tiba-tiba, strategi mungkin tidak dapat menyesuaikan kedudukan tepat pada masanya, menyebabkan kerugian meningkat.
  4. Risiko pengoptimuman berlebihan: pengoptimuman berlebihan terhadap strategi boleh menyebabkan kecocokan kurva dan tidak berfungsi dengan baik di pasaran masa depan.

Arah pengoptimuman strategi

  1. Memperkenalkan analisis pelbagai kerangka masa, mengesahkan trend yang stabil, dan mengurangkan perdagangan yang kerap berlaku di pasaran yang bergolak.
  2. Meningkatkan ketepatan penghakiman trend, jika dikombinasikan dengan petunjuk teknikal atau faktor asas yang lain.
  3. Mengoptimumkan stop loss dan logik hentian, seperti memperkenalkan hentian dinamik atau nisbah keuntungan risiko, meningkatkan nisbah keuntungan dan kerugian strategi.
  4. Ujian kestabilan parameter, memilih kombinasi parameter yang dapat mengekalkan prestasi yang baik dalam keadaan pasaran yang berbeza.
  5. Memperkenalkan peraturan pengurusan kedudukan dan pengurusan wang untuk mengawal risiko perdagangan tunggal dan risiko keseluruhan.

ringkaskan

Strategi pengesanan trend dinamik menggunakan indikator Supertrend untuk menangkap trend pasaran, mengawal risiko dengan berhenti secara dinamik dan berhenti bergerak, dan mengunci keuntungan dengan menggunakan berhenti tetap. Strategi ini sangat fleksibel, isyarat jelas, dan mudah dikendalikan. Tetapi dalam aplikasi praktikal, perhatian perlu diberikan kepada pengoptimuman parameter, risiko pasaran yang bergolak dan risiko perubahan trend.

Kod 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)