Strategi breakout momentum Bollinger multi-periode dikombinasikan dengan strategi moving average Hull

VWMA HMA BB MTF RSI
Tanggal Pembuatan: 2024-11-29 17:00:00 Akhirnya memodifikasi: 2024-11-29 17:00:00
menyalin: 0 Jumlah klik: 507
1
fokus pada
1617
Pengikut

Strategi breakout momentum Bollinger multi-periode dikombinasikan dengan strategi moving average Hull

Ringkasan

Strategi ini adalah sistem perdagangan yang didasarkan pada analisis multi-frame waktu, yang menggabungkan Bollinger Bands, Hull Moving Averages, dan weighted moving averages untuk menghasilkan sinyal perdagangan. Strategi ini beroperasi pada kerangka waktu 1 jam, sementara mengintegrasikan data pasar dari tiga periode waktu 5 menit, 1 jam, dan 3 jam, untuk mengkonfirmasi peluang perdagangan melalui kombinasi dari beberapa indikator teknis.

Prinsip Strategi

Logika inti dari strategi ini didasarkan pada pengesahan silang dari beberapa indikator teknis. Strategi ini memonitor hubungan harga dengan berbagai jenis garis rata secara bersamaan pada beberapa periode waktu, termasuk rata-rata bergerak berbobot pada siklus 5 menit (VWMA), rata-rata bergerak berbobot pada siklus 1 jam, dan rata-rata bergerak berbobot pada siklus 3 jam (Hull moving average). Sistem ini menghasilkan sinyal ganda ketika harga berada di atas semua indikator periode waktu ketika harga berada di atas semua indikator; sebaliknya, sistem ini menghasilkan sinyal kosong ketika harga berada di bawah semua indikator ketika harga berada di bawah semua indikator.

Keunggulan Strategis

  1. Analisis siklus waktu ganda mengurangi risiko terobosan palsu dan meningkatkan keandalan sinyal perdagangan
  2. Pengaturan Stop Loss yang dinamis dapat beradaptasi dengan kondisi pasar yang berbeda
  3. Manajemen posisi berdasarkan kepentingan akun memastikan bahwa dana digunakan secara rasional
  4. Pemilihan berbagai mekanisme penarikan menambah fleksibilitas strategi.
  5. Antarmuka grafis memberikan tampilan sinyal perdagangan yang jelas untuk analisis dan penilaian yang mudah
  6. Mengintegrasikan beberapa indikator teknis yang sudah ada untuk meningkatkan akurasi keputusan perdagangan

Risiko Strategis

  1. Penggunaan beberapa indikator dapat menyebabkan sinyal trading yang tertunda
  2. Sinyal breakout palsu yang sering terjadi dapat terjadi di pasar yang bergejolak
  3. Rasio Stop Loss yang tetap mungkin tidak cocok untuk semua kondisi pasar
  4. Pemrosesan data dalam periode waktu yang panjang dapat meningkatkan kompleksitas dalam menjalankan strategi
  5. Risiko terjadinya slippage yang lebih besar di pasar yang sangat fluktuatif

Arah optimasi strategi

  1. Memperkenalkan indikator volatilitas untuk menyesuaikan level take-profit dan stop-loss secara dinamis
  2. Menambahkan kemampuan untuk mengenali kondisi pasar, menggunakan parameter yang berbeda dalam kondisi pasar yang berbeda
  3. Optimalkan mekanisme penyaringan sinyal untuk mengurangi kerugian akibat penembusan palsu
  4. Menambahkan analisis volume transaksi untuk meningkatkan keandalan sinyal terobosan
  5. Mengembangkan mekanisme optimasi parameter adaptif untuk meningkatkan stabilitas strategi

Meringkaskan

Strategi ini menggunakan kombinasi analisis siklus waktu dan beberapa indikator teknis untuk membangun sistem perdagangan yang relatif lengkap. Keunggulan strategi ini adalah keandalan sinyal dan efektivitas manajemen risiko, tetapi ada juga masalah seperti lag sinyal dan pengoptimalan parameter. Dengan optimasi dan perbaikan terus menerus, strategi ini diharapkan dapat mempertahankan kinerja yang stabil di berbagai lingkungan pasar.

Kode Sumber Strategi
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-28 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("1H- 280, 2.7", overlay=true)


// Fetch the indicator values from different timeframes
vwma5 = request.security(syminfo.tickerid, "5", ta.wma(close, 233), lookahead = barmerge.lookahead_off)
vwma_hourly = request.security(syminfo.tickerid, "60", ta.wma(close, 89), lookahead = barmerge.lookahead_off)
hullma155_3h = request.security(syminfo.tickerid, "180", ta.hma(close, 155), lookahead = barmerge.lookahead_off)


// Calculate the deviation value
deviation = close * 0.032


// Initialize the signal variables
var float signalLine = na
var color lineColor = na


// Long Entry Conditions
longCondition_5min = close > vwma5
longCondition_hourly = close > vwma_hourly
longCondition_3h = close > hullma155_3h


// Short Entry Conditions
shortCondition_5min = close < vwma5
shortCondition_hourly = close < vwma_hourly
shortCondition_3h = close < hullma155_3h


// Long Entry
if longCondition_5min and longCondition_hourly and longCondition_3h
    signalLine := close + deviation
    lineColor := color.rgb(0, 255, 0, 1)


// Short Entry
if shortCondition_5min and shortCondition_hourly and shortCondition_3h
    signalLine := close - deviation
    lineColor := color.rgb(255, 0, 0, 1)


// Plotting the connecting line
plot(signalLine, title="Signal Line", color=lineColor, linewidth=1, style=plot.style_line)


// Colorize the signal line
bgcolor(signalLine > close ? color.rgb(0, 255, 0, 99) : color.rgb(255, 0, 0, 99), transp=90)



// Strategy settings
useTPSL = input(true, "Use TP/SL for closing long positions?")
useDownbreakOutbreak = input(false, "Use Downbreak and Outbreak for closing positions?")
useM7FClosing = input(false, "Use M7F Signal for closing positions?")


length1 = input.int(280, minval=1)
src = input(close, title="Source")
mult = input.float(2.7, minval=0.001, maxval=50, title="StdDev")


basis = ta.vwma(src, length1)
dev = mult * ta.stdev(src, length1)
upper = basis + dev
lower = basis - dev


offset = input.int(0, "Offset", minval = -500, maxval = 500)


length2 = input.int(55, minval=1)
src2 = input(close, title="Source")
hullma = ta.wma(2 * ta.wma(src2, length2 / 2) - ta.wma(src2, length2), math.floor(math.sqrt(length2)))


hullmacrosslower = ta.crossover(hullma, lower)
hullmacrossupper = ta.crossunder(hullma, upper)


breakout = ta.crossover(ohlc4, upper)
breakdown = ta.crossunder(ohlc4, upper)
outbreak = ta.crossover(ohlc4, lower)
downbreak = ta.crossunder(ohlc4, lower)


// Calculate position size and leverage
margin_pct = 1
leverage = 1
position_size = strategy.equity * margin_pct
qty = position_size / close / leverage


// Define take profit and stop loss levels
take_profit = 0.14
stop_loss = 0.06


// Opening a long position
if breakout
    strategy.entry("Long", strategy.long, qty, limit=close*(1+take_profit), stop=close*(1-stop_loss))


// Opening a short position
if downbreak
    strategy.entry("Short", strategy.short, qty, limit=close*(1-take_profit), stop=close*(1+stop_loss))


// Closing positions based on chosen method
if useTPSL
    // Using TP/SL for closing long positions
    if strategy.position_size > 0 and breakdown
        strategy.close("Long", comment="Breakdown")
else if useDownbreakOutbreak
    // Using Downbreak and Outbreak for closing positions
    if strategy.position_size > 0 and (breakdown or downbreak)
        strategy.close("Long", comment="Breakdown")
    if strategy.position_size < 0 and (outbreak or downbreak)
        strategy.close("Short", comment="Outbreak")
else if useM7FClosing
    // Using M7F Signal for closing positions
    if strategy.position_size > 0 and (signalLine < close)
        strategy.close("Long", comment="M7F Signal")
    if strategy.position_size < 0 and (signalLine > close)
        strategy.close("Short", comment="M7F Signal")


// Plotting entry signals
plotshape(hullmacrosslower, title="High Bear Volatility", style=shape.arrowup, text="^^^^^", color=color.rgb(75, 202, 79), location=location.belowbar)
plotshape(hullmacrossupper, title="High Bull Volatility", style=shape.arrowdown, text="-----", color=color.rgb(215, 72, 72), location=location.abovebar)
plotshape(breakout ? 1 : na, title="Breakout", style=shape.arrowup, text="", color=color.rgb(75, 202, 79), location=location.belowbar, size=size.tiny)
plotshape(breakdown ? 1 : na, title="Breakdown", style=shape.arrowdown, text="", color=color.rgb(201, 71, 71), location=location.abovebar, size=size.tiny)
plotshape(outbreak ? 1 : na, title="Outbreak", style=shape.arrowup, text="", color=color.rgb(0, 110, 255), location=location.belowbar, size=size.tiny)
plotshape(downbreak ? 1 : na, title="Downbreak", style=shape.arrowdown, text="", color=color.rgb(255, 111, 0), location=location.abovebar, size=size.tiny)