Sumber daya yang dimuat... Pemuatan...

Strategi Trading Trend Lanjutan Berdasarkan Bollinger Bands dan Pola Candlestick

Penulis:ChaoZhangTanggal: 2024-11-27 14:18:33
Tag:BBATRRRPSRMASDWBR

img

Gambaran umum

Ini adalah strategi mengikuti tren berdasarkan Bollinger Bands dan analisis pola lilin. Strategi ini terutama mengidentifikasi titik pembalikan pasar potensial dengan mengamati pola lilin ketika harga menyentuh Bollinger Bands, dikombinasikan dengan hubungan rasio antara wicks dan body. Selain itu, strategi ini menggunakan model risiko tetap untuk mengontrol eksposur per perdagangan dan memanfaatkan analisis jangka waktu ganda untuk meningkatkan akurasi perdagangan.

Prinsip Strategi

Logika inti dari strategi ini didasarkan pada beberapa elemen kunci: Pertama, ini menghitung Bollinger Bands selama 20 periode untuk menentukan rentang volatilitas harga; Kedua, ketika harga menyentuh Bollinger Bands, ini menganalisis rasio antara wicks atas/bawah dan tubuh lilin, menganggapnya sebagai sinyal pembalikan potensial ketika rasio melebihi ambang batas yang ditetapkan; Ketiga, ini menghitung tingkat dukungan dan resistensi kunci untuk penempatan stop-loss; Akhirnya, ini menghitung ukuran posisi untuk setiap perdagangan berdasarkan persentase tetap (1%) dari saldo akun, menerapkan manajemen risiko dinamis. Strategi ini juga menawarkan berbagai pilihan waktu, termasuk harga penutupan, harga pembukaan, harga masuk harian tinggi, dan rendah.

Keuntungan Strategi

  1. Pengendalian risiko yang tepat: Menggunakan model manajemen risiko persentase tetap, memastikan eksposur risiko yang terkontrol per perdagangan
  2. Fleksibel titik masuk: Menyediakan beberapa pilihan harga masuk untuk mengakomodasi gaya perdagangan yang berbeda
  3. Kombinasi indikator teknis: Menggabungkan Bollinger Bands dengan analisis pola candlestick untuk meningkatkan keandalan sinyal
  4. Penempatan stop-loss rasional: Menetapkan stop-loss berdasarkan tingkat dukungan dan resistensi utama, selaras dengan dinamika pasar
  5. Manajemen perdagangan yang komprehensif: Termasuk mekanisme kadaluarsa order untuk menghindari sinyal palsu

Risiko Strategi

  1. Risiko fluktuasi pasar yang cepat: Wick ratio dapat menghasilkan sinyal palsu di pasar yang volatile
  2. Risiko pengelolaan uang: Model risiko persentase tetap dapat menyebabkan posisi yang terlalu kecil setelah kerugian berturut-turut
  3. Risiko penempatan stop-loss: Perhitungan support dan resistance mungkin tidak akurat dalam kondisi pasar tertentu
  4. Ketergantungan jangka waktu: Strategi yang terutama didasarkan pada jangka waktu harian dapat melewatkan peluang dalam jangka waktu yang lebih kecil

Arah Optimasi Strategi

  1. Masukkan indikator volume: Tambahkan analisis volume untuk konfirmasi sinyal untuk meningkatkan keandalan
  2. Mengoptimalkan mekanisme stop loss: Pertimbangkan untuk menerapkan stop loss dinamis yang disesuaikan berdasarkan volatilitas pasar
  3. Tambahkan filter lingkungan pasar: Sertakan indikator kekuatan tren untuk menyesuaikan parameter strategi dalam kondisi pasar yang berbeda
  4. Meningkatkan manajemen posisi: Pertimbangkan untuk menerapkan ukuran posisi dinamis berdasarkan volatilitas pasar
  5. Tambahkan filter waktu: Sertakan filter waktu untuk menghindari perdagangan selama sesi pasar yang sangat volatile

Ringkasan

Strategi ini menggabungkan alat analisis teknis klasik dengan metode manajemen risiko modern untuk membangun sistem perdagangan yang relatif komprehensif. Keuntungan utamanya terletak pada kontrol risiko yang ketat dan mekanisme masuk yang fleksibel, sementara perhatian perlu diberikan pada perubahan lingkungan pasar dan verifikasi keandalan sinyal dalam aplikasi praktis. Melalui arah optimasi yang disarankan, ada ruang untuk perbaikan lebih lanjut, terutama dalam penyaringan sinyal dan aspek manajemen risiko.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-11-26 00:00:00
period: 12h
basePeriod: 12h
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")


Berkaitan

Lebih banyak