Strategi kombinasi beberapa indikator dinamis

ATR BB ST MA VWMA
Tanggal Pembuatan: 2025-04-01 10:12:19 Akhirnya memodifikasi: 2025-04-01 10:12:19
menyalin: 4 Jumlah klik: 294
2
fokus pada
319
Pengikut

Strategi kombinasi beberapa indikator dinamis Strategi kombinasi beberapa indikator dinamis

Ringkasan

Artikel ini membahas strategi perdagangan komposit yang menggabungkan indikator Bollinger Bands dan SuperTrend. Strategi ini mengintegrasikan beberapa alat analisis teknis untuk memberikan sinyal masuk dan keluar pasar yang lebih akurat, sekaligus mengurangi risiko perdagangan.

Prinsip Strategi

Strategi ini terdiri dari dua bagian utama: Bollinger Bands dan indikator SuperTrend.

  1. Bagian dari perhitungan Brin Belt:
  • Garis acuan yang digunakan adalah Moving Average Configurable (MA)
  • Orbit naik turun berdasarkan perkalian standar
  • Mendukung berbagai jenis moving average: Simple Moving Average (SMA), Index Moving Average (EMA), Smooth Moving Average (SMMA), Weighted Moving Average (WMA) dan Trading Volume Weighted Moving Average (VWMA)
  1. Di bawah ini adalah bagian dari SuperTrend:
  • Stop loss menggunakan rentang rata-rata fluktuasi nyata (ATR)
  • Dinamika menilai arah tren pasar
  • Generasi sinyal jual beli berdasarkan perubahan tren

Keunggulan Strategis

  1. Kombinasi multi-indikator: meningkatkan akurasi sinyal dengan menggabungkan Brinks dan Supertrends
  2. Konfigurasi yang fleksibel: jenis rata-rata bergerak yang dapat disesuaikan, parameter dan metode perhitungan
  3. Stop loss dinamis: mekanisme stop loss berbasis ATR dapat mengontrol risiko secara efektif
  4. Penguatan visual: memberikan status trend filling dan label sinyal
  5. Manajemen risiko: Peraturan untuk manajemen posisi persentase dan pembatasan perdagangan piramida

Risiko Strategis

  1. Sensitivitas parameter: Parameter mungkin perlu disesuaikan secara teratur dalam berbagai kondisi pasar
  2. Keterbatasan Retrospektif: Pertunjukan Data Sejarah Tidak Menunjukkan Pertunjukan Pasar di Masa Depan
  3. Risiko switching multi-posisi: perubahan posisi yang sering dapat meningkatkan biaya transaksi
  4. Tekanan indikator: Tekanan indikator menunjukkan adanya keterlambatan sinyal

Arah optimasi strategi

  1. Masukkan parameter optimasi dinamis algoritma pembelajaran mesin
  2. Menambahkan kondisi penyaringan tambahan, seperti konfirmasi pengiriman
  3. Mengembangkan mekanisme verifikasi multi-time frame
  4. Mengoptimalkan modul manajemen risiko, memperkenalkan strategi pengendalian posisi yang lebih halus

Meringkaskan

Ini adalah strategi perdagangan yang menggabungkan beberapa indikator dinamis, yang menyediakan sistem sinyal perdagangan yang relatif komprehensif melalui kombinasi Bollinger Bands dan Supertrends. Inti dari strategi ini adalah menyeimbangkan akurasi sinyal dan manajemen risiko, tetapi masih perlu terus dioptimalkan dan disesuaikan sesuai dengan kondisi pasar yang berbeda.

Kode 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")