Strategi perdagangan volatilitas dinamis berdasarkan Bollinger Bands dan pola candlestick

BB SMA ATR RSI ROC MTF
Tanggal Pembuatan: 2024-11-29 16:29:01 Akhirnya memodifikasi: 2024-11-29 16:29:01
menyalin: 0 Jumlah klik: 497
1
fokus pada
1617
Pengikut

Strategi perdagangan volatilitas dinamis berdasarkan Bollinger Bands dan pola candlestick

Ringkasan

Strategi ini adalah sistem perdagangan yang didasarkan pada analisa morphologi Bollinger Bands dan Pivot Chart untuk menangkap peluang reversal pasar dengan menganalisis fluktuasi harga dan karakteristik Pivot di tingkat garis matahari. Inti dari strategi ini adalah hubungan rasio antara saluran fluktuasi Bollinger Bands dan garis bayangan bawah dengan entitas di grafik untuk mencari sinyal reversal potensial ketika harga menyentuh batas Bollinger Bands. Sistem ini mendukung analisis multi-siklus waktu dan dapat melakukan perdagangan pada periode waktu yang lebih kecil sambil mempertahankan analisis tingkat garis matahari.

Prinsip Strategi

Strategi ini menggunakan 20 siklus Brin Belt sebagai indikator teknis utama, dengan standar deviasi sebesar 2,0. Dengan menghitung rasio garis atas dan bawah dari grafik yang digarisbawahi dengan entitas, sistem akan mengirimkan sinyal perdagangan ketika rasio tersebut melebihi set threshold (default 1.0) dan harga menyentuh batas Brin Belt. Waktu masuk dapat secara fleksibel memilih untuk mengambil harga di hari, harga bukaan hari berikutnya, tinggi atau rendah dalam sehari.

Keunggulan Strategis

  1. Analisis multi-dimensi: menggabungkan indikator teknis dan analisis pola harga, meningkatkan keandalan sinyal.
  2. Fleksibilitas mekanisme masuk: menawarkan berbagai pilihan waktu masuk untuk menyesuaikan dengan gaya perdagangan yang berbeda.
  3. Manajemen risiko yang baik: Mengontrol risiko dengan skala posisi yang dinamis dan stop loss otomatis.
  4. Kompatibilitas multi-siklus waktu: dapat melakukan transaksi pada periode waktu yang lebih kecil sambil mempertahankan analisis garis waktu.
  5. Tingkat otomatisasi yang tinggi: otomatisasi mulai dari pengenalan sinyal hingga manajemen posisi.

Risiko Strategis

  1. Risiko Volatilitas Pasar: Dapat menghasilkan sinyal palsu dalam pasar yang sangat bergejolak.
  2. Risiko keterlambatan: Mungkin tidak cukup responsif dalam pasar yang cepat karena menggunakan data garis matahari.
  3. Sensitivitas parameter: Pilihan parameter Brin dan nilai terendah rasio garis bayangan secara signifikan mempengaruhi kinerja strategi.
  4. Risiko likuiditas: Di pasar yang kurang likuid, mungkin sulit untuk bertransaksi dengan harga yang diharapkan.

Arah optimasi strategi

  1. Memperkenalkan analisis volume: menggabungkan data volume untuk memverifikasi efektivitas reversal harga.
  2. Menambahkan filter kondisi pasar: Menambahkan indikator intensitas tren untuk menyaring kondisi pasar yang tidak menguntungkan.
  3. Parameter optimasi beradaptasi sendiri: Beradaptasi dengan dinamika fluktuasi pasar untuk parameter Brin dan nilai terendah rasio garis bayangan.
  4. Meningkatkan kontrol risiko: Meningkatkan kontrol penarikan dan mekanisme pemantauan kurva kepentingan.
  5. Penguatan konfirmasi sinyal: memperkenalkan indikator teknis lainnya sebagai alat konfirmasi tambahan.

Meringkaskan

Ini adalah sistem perdagangan lengkap yang menggabungkan analisis Brinks dan Pivot Chart untuk menangkap peluang reversal pasar melalui analisis multi-dimensi. Keunggulan strategi terletak pada kerangka analisis yang komprehensif dan sistem manajemen risiko yang baik, tetapi juga perlu memperhatikan dampak lingkungan pasar dan pilihan parameter pada kinerja strategi. Dengan arah optimasi yang direkomendasikan, stabilitas dan keandalan strategi diharapkan ditingkatkan lebih lanjut.

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

//@version=5
strategy("Trade Entry Detector, based on Wick to Body Ratio when price tests Bollinger Bands", overlay=true, default_qty_type=strategy.fixed)

// Input for primary analysis time frame
timeFrame = "D"  // Daily time frame

// Bollinger Band settings
length = input.int(20, title="Bollinger Band Length", minval=1)
mult = input.float(2.0, title="Standard Deviation Multiplier", minval=0.1)
source = input(close, title="Source")

// Entry ratio settings
wickToBodyRatio = input.float(1.0, title="Minimum Wick-to-Body Ratio", minval=0)

// Order Fill Timing Option
fillOption = input.string("Daily Close", title="Order Fill Timing", options=["Daily Close", "Daily Open", "HOD", "LOD"])

// Account and risk settings
accountBalance = 100000  // Account balance in dollars
riskPercentage = 1.0     // Risk percentage per trade
riskAmount = (riskPercentage / 100) * accountBalance // Fixed 1% risk amount

// Request daily data for calculations
dailyHigh = request.security(syminfo.tickerid, timeFrame, high)
dailyLow = request.security(syminfo.tickerid, timeFrame, low)
dailyClose = request.security(syminfo.tickerid, timeFrame, close)
dailyOpen = request.security(syminfo.tickerid, timeFrame, open)

// Calculate Bollinger Bands on the daily time frame
dailyBasis = request.security(syminfo.tickerid, timeFrame, ta.sma(source, length))
dailyDev = mult * request.security(syminfo.tickerid, timeFrame, ta.stdev(source, length))
dailyUpperBand = dailyBasis + dailyDev
dailyLowerBand = dailyBasis - dailyDev

// Calculate the body and wick sizes on the daily time frame
dailyBodySize = math.abs(dailyOpen - dailyClose)
dailyUpperWickSize = dailyHigh - math.max(dailyOpen, dailyClose)
dailyLowerWickSize = math.min(dailyOpen, dailyClose) - dailyLow

// Conditions for a candle with an upper wick or lower wick that touches the Bollinger Bands
upperWickCondition = (dailyUpperWickSize / dailyBodySize >= wickToBodyRatio) and (dailyHigh > dailyUpperBand)
lowerWickCondition = (dailyLowerWickSize / dailyBodySize >= wickToBodyRatio) and (dailyLow < dailyLowerBand)

// Define the swing high and swing low for stop loss placement
var float swingLow = na
var float swingHigh = na

if (ta.pivothigh(dailyHigh, 5, 5))
    swingHigh := dailyHigh[5]

if (ta.pivotlow(dailyLow, 5, 5))
    swingLow := dailyLow[5]

// Determine entry price based on chosen fill option
var float longEntryPrice = na
var float shortEntryPrice = na

if lowerWickCondition
    longEntryPrice := fillOption == "Daily Close" ? dailyClose :
                      fillOption == "Daily Open" ? dailyOpen :
                      fillOption == "HOD" ? dailyHigh : dailyLow

if upperWickCondition
    shortEntryPrice := fillOption == "Daily Close" ? dailyClose :
                       fillOption == "Daily Open" ? dailyOpen :
                       fillOption == "HOD" ? dailyHigh : dailyLow

// Execute the long and short entries with expiration
var int longOrderExpiry = na
var int shortOrderExpiry = na

if not na(longEntryPrice)
    longOrderExpiry := bar_index + 2  // Order expires after 2 days

if not na(shortEntryPrice)
    shortOrderExpiry := bar_index + 2  // Order expires after 2 days

// Check expiration and execute orders
if (longEntryPrice and bar_index <= longOrderExpiry and high >= longEntryPrice)
    longStopDistance = close - nz(swingLow, close)
    longPositionSize = longStopDistance > 0 ? riskAmount / longStopDistance : na
    if (not na(longPositionSize))
        strategy.entry("Long", strategy.long, qty=longPositionSize)
    longEntryPrice := na  // Reset after entry

if (shortEntryPrice and bar_index <= shortOrderExpiry and low <= shortEntryPrice)
    shortStopDistance = nz(swingHigh, close) - close
    shortPositionSize = shortStopDistance > 0 ? riskAmount / shortStopDistance : na
    if (not na(shortPositionSize))
        strategy.entry("Short", strategy.short, qty=shortPositionSize)
    shortEntryPrice := na  // Reset after entry

// Exit logic: hit the opposing Bollinger Band
if (strategy.position_size > 0) // Long position
    strategy.exit("Exit Long", "Long", limit=dailyUpperBand)
else if (strategy.position_size < 0) // Short position
    strategy.exit("Exit Short", "Short", limit=dailyLowerBand)

if (strategy.position_size > 0) // Long position
    strategy.exit("Stop Loss Long", "Long", stop=swingLow)
else if (strategy.position_size < 0) // Short position
    strategy.exit("Stop Loss Short", "Short", stop=swingHigh)

// Plot daily Bollinger Bands and levels on the chosen time frame
plot(dailyUpperBand, color=color.blue, linewidth=1, title="Daily Upper Bollinger Band")
plot(dailyLowerBand, color=color.blue, linewidth=1, title="Daily Lower Bollinger Band")
plot(dailyBasis, color=color.gray, linewidth=1, title="Daily Middle Bollinger Band")