Strategi gabungan penunjuk dinamik berbilang

ATR BB ST MA VWMA
Tarikh penciptaan: 2025-04-01 10:12:19 Akhirnya diubah suai: 2025-04-01 10:12:19
Salin: 4 Bilangan klik: 294
2
fokus pada
319
Pengikut

Strategi gabungan penunjuk dinamik berbilang Strategi gabungan penunjuk dinamik berbilang

Gambaran keseluruhan

Artikel ini memperkenalkan strategi perdagangan komposit yang menggabungkan Bollinger Bands dan SuperTrend. Strategi ini bertujuan untuk menyediakan isyarat masuk dan keluar pasaran yang lebih tepat dengan mengintegrasikan beberapa alat analisis teknikal, sambil mengurangkan risiko perdagangan.

Prinsip Strategi

Strategi ini terdiri daripada dua bahagian utama: Bollinger Bands dan indikator SuperTrend.

  1. Bahagian pengiraan Brin Belt:
  • Pengiraan garis rujukan menggunakan purata bergerak yang boleh dikonfigurasi ((MA))
  • Penjanaan orbit atas dan bawah berdasarkan perkalian perbezaan piawai
  • Menyokong pelbagai jenis purata bergerak: purata bergerak sederhana (SMA), purata bergerak indeks (EMA), purata bergerak licin (SMMA), purata bergerak berat (WMA) dan purata bergerak berat (VWMA)
  1. Di bahagian SuperTrend:
  • Menggunakan Julat Fluktuasi Sebenar Purata (ATR) untuk mengira Stop Loss
  • Dinamika menilai arah trend pasaran
  • Menjana isyarat beli dan jual mengikut perubahan trend

Kelebihan Strategik

  1. Kombinasi pelbagai indikator: meningkatkan ketepatan isyarat dengan menggabungkan Brinband dan Supertrend
  2. Konfigurasi fleksibel: jenis purata bergerak, parameter dan kaedah pengiraan yang boleh disesuaikan
  3. Hentian dinamik: mekanisme hentian berasaskan ATR dapat mengawal risiko dengan berkesan
  4. Peningkatan visual: menyediakan status trend dan label isyarat
  5. Pengurusan risiko: Pengurusan kedudukan peratusan dan had perdagangan piramid

Risiko Strategik

  1. Sensitiviti parameter: parameter mungkin memerlukan penyesuaian yang kerap dalam keadaan pasaran yang berbeza
  2. Batasan Retrospektif: Prestasi data sejarah tidak mewakili prestasi pasaran masa depan
  3. Risiko bertukar-tukar: perubahan kedudukan yang kerap boleh meningkatkan kos dagangan
  4. Ketinggalan penunjuk: penunjuk teknikal mempunyai kelewatan isyarat tertentu

Arah pengoptimuman strategi

  1. Masukkan parameter pengoptimuman dinamik algoritma pembelajaran mesin
  2. Menambah syarat penapisan tambahan, seperti pengesahan kuantiti
  3. Membangunkan mekanisme pengesahan pelbagai kerangka masa
  4. Mengoptimumkan modul pengurusan risiko, memperkenalkan strategi kawalan kedudukan yang lebih halus

ringkaskan

Ini adalah strategi perdagangan yang menggabungkan pelbagai indikator dinamik, yang menyediakan sistem isyarat perdagangan yang agak komprehensif melalui kombinasi Brinband dan Supertrend. Strategi ini berpusat pada keseimbangan antara ketepatan isyarat dan pengurusan risiko, tetapi masih perlu terus dioptimumkan dan disesuaikan dengan keadaan pasaran yang berbeza.

Kod sumber strategi
/*backtest
start: 2024-04-01 00:00:00
end: 2025-03-31 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Combined BB & New SuperTrend Strategy", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, pyramiding=0)

//============================
// Bollinger Bands Parameters
//============================
lengthBB   = input.int(20, minval=1, title="BB Length")
maType     = input.string("SMA", "BB Basis MA Type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
srcBB      = input(close, title="BB Source")
multBB     = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev Multiplier")
offsetBB   = input.int(0, title="BB Offset", minval=-500, maxval=500)

// Moving average function based on chosen type
ma(source, length, _type) =>
    switch _type
        "SMA"         => ta.sma(source, length)
        "EMA"         => ta.ema(source, length)
        "SMMA (RMA)"  => ta.rma(source, length)
        "WMA"         => ta.wma(source, length)
        "VWMA"        => ta.vwma(source, length)

// Bollinger Bands calculations
basis   = ma(srcBB, lengthBB, maType)
dev     = multBB * ta.stdev(srcBB, lengthBB)
upperBB = basis + dev
lowerBB = basis - dev

// Plot Bollinger Bands
plot(basis, title="BB Basis", color=color.blue, offset=offsetBB)
p1 = plot(upperBB, title="BB Upper", color=color.red, offset=offsetBB)
p2 = plot(lowerBB, title="BB Lower", color=color.green, offset=offsetBB)
fill(p1, p2, title="BB Fill", color=color.new(color.blue, 90))

//============================
// New SuperTrend Parameters & Calculations
// (Based on the new script you provided)
//============================
st_length         = input.int(title="ATR Period", defval=22)
st_mult           = input.float(title="ATR Multiplier", step=0.1, defval=3)
st_src            = input.source(title="SuperTrend Source", defval=hl2)
st_wicks          = input.bool(title="Take Wicks into Account?", defval=true)
st_showLabels     = input.bool(title="Show Buy/Sell Labels?", defval=true)
st_highlightState = input.bool(title="Highlight State?", defval=true)

// Calculate ATR component for SuperTrend
st_atr = st_mult * ta.atr(st_length)

// Price selection based on wicks option
st_highPrice = st_wicks ? high : close
st_lowPrice  = st_wicks ? low  : close
st_doji4price = (open == close and open == low and open == high)

// Calculate SuperTrend stop levels
st_longStop = st_src - st_atr
st_longStopPrev = nz(st_longStop[1], st_longStop)
if st_longStop > 0
    if st_doji4price
        st_longStop := st_longStopPrev
    else
        st_longStop := (st_lowPrice[1] > st_longStopPrev ? math.max(st_longStop, st_longStopPrev) : st_longStop)
else
    st_longStop := st_longStopPrev

st_shortStop = st_src + st_atr
st_shortStopPrev = nz(st_shortStop[1], st_shortStop)
if st_shortStop > 0
    if st_doji4price
        st_shortStop := st_shortStopPrev
    else
        st_shortStop := (st_highPrice[1] < st_shortStopPrev ? math.min(st_shortStop, st_shortStopPrev) : st_shortStop)
else
    st_shortStop := st_shortStopPrev

// Determine trend direction: 1 for bullish, -1 for bearish
var int st_dir = 1
st_dir := st_dir == -1 and st_highPrice > st_shortStopPrev ? 1 : st_dir == 1 and st_lowPrice < st_longStopPrev ? -1 : st_dir

// Define colors for SuperTrend
st_longColor  = color.green
st_shortColor = color.red

// Plot SuperTrend stops
st_longStopPlot  = plot(st_dir == 1 ? st_longStop : na, title="Long Stop", style=plot.style_line, linewidth=2, color=st_longColor)
st_shortStopPlot = plot(st_dir == -1 ? st_shortStop : na, title="Short Stop", style=plot.style_line, linewidth=2, color=st_shortColor)

// Generate SuperTrend signals based on direction change
st_buySignal  = st_dir == 1 and st_dir[1] == -1
st_sellSignal = st_dir == -1 and st_dir[1] == 1

// Optionally plot labels for buy/sell signals
if st_buySignal and st_showLabels
    label.new(bar_index, st_longStop, "Buy", style=label.style_label_up, color=st_longColor, textcolor=color.white, size=size.tiny)
if st_sellSignal and st_showLabels
    label.new(bar_index, st_shortStop, "Sell", style=label.style_label_down, color=st_shortColor, textcolor=color.white, size=size.tiny)

// Fill the state area (optional visual enhancement)
st_midPricePlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=1, display=display.none)
st_longFillColor  = st_highlightState ? (st_dir == 1 ? st_longColor : na) : na
st_shortFillColor = st_highlightState ? (st_dir == -1 ? st_shortColor : na) : na
fill(st_midPricePlot, st_longStopPlot, title="Long State Filling", color=st_longFillColor)
fill(st_midPricePlot, st_shortStopPlot, title="Short State Filling", color=st_shortFillColor)

//============================
// Trading Logic
//============================

// When a bullish reversal occurs, close any short position before entering long.
if st_buySignal
    strategy.close("Short")
    strategy.entry("Long", strategy.long)

// When a bearish reversal occurs, close any long position before entering short.
if st_sellSignal
    strategy.close("Long")
    strategy.entry("Short", strategy.short)

// Exit conditions using Bollinger Bands:
// - For a long position: exit if price reaches (or exceeds) the upper Bollinger Band.
// - For a short position: exit if price reaches (or falls below) the lower Bollinger Band.
if strategy.position_size > 0 and close >= upperBB
    strategy.close("Long", comment="Exit Long via BB Upper")
if strategy.position_size < 0 and close <= lowerBB
    strategy.close("Short", comment="Exit Short via BB Lower")