Sumber daya yang dimuat... Pemuatan...

Multi-Timeframe Bollinger Momentum Breakout Strategy dengan Hull Moving Average

Penulis:ChaoZhang, Tanggal: 2024-11-29 17:00:00
Tag:VWMAHMABBMTFRSI

img

Gambaran umum

Strategi ini adalah sistem perdagangan berdasarkan analisis multi-frame waktu, menggabungkan Bollinger Bands, Hull Moving Average, dan Weighted Moving Average untuk menghasilkan sinyal perdagangan. Strategi ini beroperasi terutama pada jangka waktu 1 jam sambil mengintegrasikan data pasar dari periode 5 menit, 1 jam, dan 3 jam. Ini menggunakan beberapa indikator teknis untuk mengkonfirmasi peluang perdagangan dan menerapkan mekanisme stop-loss dan take-profit dinamis, secara otomatis menyesuaikan ukuran posisi berdasarkan ekuitas akun untuk pengendalian risiko yang efektif.

Prinsip Strategi

Logika inti didasarkan pada konfirmasi silang dari beberapa indikator teknis. Strategi ini memantau hubungan harga dengan berbagai moving average di beberapa kerangka waktu, termasuk VWMA 5 menit, VWMA 1 jam, dan HMA 3 jam. Sinyal panjang dihasilkan ketika harga melanggar ambang atas sementara berada di atas semua indikator kerangka waktu; sebaliknya, sinyal pendek terjadi ketika harga melanggar ambang bawah sementara berada di bawah semua indikator. Strategi ini menggabungkan perhitungan penyimpangan untuk menetapkan ambang masuk dan keluar yang dinamis, meningkatkan fleksibilitas perdagangan.

Keuntungan Strategi

  1. Analisis multi-timeframe mengurangi risiko pecah palsu dan meningkatkan keandalan sinyal
  2. Pengaturan stop loss dan take profit yang dinamis beradaptasi dengan kondisi pasar yang berbeda
  3. Ukuran posisi berdasarkan ekuitas akun memastikan pemanfaatan modal yang rasional
  4. Mekanisme keluar ganda memberikan kemampuan adaptasi strategi
  5. Antarmuka grafis menawarkan visualisasi sinyal perdagangan yang jelas untuk analisis
  6. Integrasi dari beberapa indikator teknis yang matang meningkatkan keakuratan keputusan perdagangan

Risiko Strategi

  1. Beberapa indikator dapat menyebabkan sinyal perdagangan tertunda
  2. Kemungkinan kegagalan yang sering terjadi di berbagai pasar
  3. Rasio stop loss dan take profit tetap mungkin tidak sesuai dengan semua kondisi pasar
  4. Pemrosesan data multi-frame waktu dapat meningkatkan kompleksitas strategi
  5. Risiko tergelincir tinggi di pasar volatile

Arahan Optimasi

  1. Memperkenalkan indikator volatilitas untuk penyesuaian stop loss dan take profit yang dinamis
  2. Tambahkan pengenalan kondisi pasar untuk adaptasi parameter
  3. Mengoptimalkan penyaringan sinyal untuk mengurangi kerugian pecah palsu
  4. Masukkan analisis volume untuk meningkatkan keandalan sinyal pecah
  5. Mengembangkan mekanisme optimasi parameter adaptif untuk meningkatkan stabilitas

Ringkasan

Strategi ini membangun sistem perdagangan yang relatif lengkap melalui analisis multi-frame waktu dan beberapa indikator teknis. Kekuatannya terletak pada keandalan sinyal dan manajemen risiko yang efektif, meskipun menghadapi tantangan dengan lag sinyal dan optimasi parameter. Melalui perbaikan dan optimalisasi terus-menerus, strategi menunjukkan potensi untuk mempertahankan kinerja yang stabil di berbagai kondisi pasar.


/*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)


Berkaitan

Lebih banyak