Sumber dimuat naik... memuat...

Strategi Dagangan Trend Lanjutan Berdasarkan Bollinger Bands dan Corak Candlestick

Penulis:ChaoZhang, Tarikh: 2024-11-27 14:18:33
Tag:BBATRRRPSRMASDWBR

img

Ringkasan

Ini adalah strategi yang mengikuti trend berdasarkan Bollinger Bands dan analisis corak lilin. Strategi ini terutamanya mengenal pasti titik pembalikan pasaran yang berpotensi dengan memerhatikan corak lilin apabila harga menyentuh Bollinger Bands, digabungkan dengan hubungan nisbah antara wicks dan badan. Di samping itu, strategi ini menggunakan model risiko tetap untuk mengawal pendedahan setiap perdagangan dan menggunakan analisis jangka masa berbilang untuk meningkatkan ketepatan perdagangan.

Prinsip Strategi

Logik teras strategi ini berdasarkan beberapa elemen utama: Pertama, ia mengira Bollinger Bands lebih dari 20 tempoh untuk menentukan julat turun naik harga; Kedua, apabila harga menyentuh Bollinger Bands, ia menganalisis nisbah antara wicks atas/bawah dan badan lilin, menganggapnya sebagai isyarat pembalikan yang berpotensi apabila nisbah melebihi ambang yang ditetapkan; Ketiga, ia mengira tahap sokongan dan rintangan utama untuk penempatan stop-loss; Akhirnya, ia mengira saiz kedudukan untuk setiap perdagangan berdasarkan peratusan tetap (1%) baki akaun, melaksanakan pengurusan risiko dinamik. Strategi ini juga menawarkan pelbagai pilihan masa, termasuk harga penutupan, harga pembukaan, harga masuk harian tinggi, dan rendah.

Kelebihan Strategi

  1. Kawalan risiko yang tepat: Menggunakan model pengurusan risiko peratusan tetap, memastikan pendedahan risiko terkawal setiap perdagangan
  2. Titik kemasukan yang fleksibel: Menyediakan pelbagai pilihan harga kemasukan untuk menampung gaya perdagangan yang berbeza
  3. Gabungan penunjuk teknikal: Menggabungkan Bollinger Bands dengan analisis corak candlestick untuk meningkatkan kebolehpercayaan isyarat
  4. Penempatan stop-loss yang rasional: menetapkan stop-loss berdasarkan tahap sokongan dan rintangan utama, selaras dengan dinamik pasaran
  5. Pengurusan perdagangan yang komprehensif: Termasuk mekanisme tamat tempoh pesanan untuk mengelakkan isyarat palsu

Risiko Strategi

  1. Risiko turun naik pasaran yang cepat: nisbah Wick boleh menghasilkan isyarat palsu di pasaran yang tidak menentu
  2. Risiko pengurusan wang: Model risiko peratusan tetap boleh membawa kepada kedudukan yang kurang besar selepas kerugian berturut-turut
  3. Risiko penempatan stop-loss: Pengiraan sokongan dan rintangan mungkin tidak tepat dalam keadaan pasaran tertentu
  4. Kebergantungan jangka masa: Strategi yang terutamanya berdasarkan jangka masa harian mungkin terlepas peluang dalam jangka masa yang lebih kecil

Arahan Pengoptimuman Strategi

  1. Masukkan penunjuk jumlah: Tambah analisis jumlah untuk pengesahan isyarat untuk meningkatkan kebolehpercayaan
  2. Mengoptimumkan mekanisme stop-loss: Pertimbangkan untuk melaksanakan stop-loss dinamik yang disesuaikan berdasarkan turun naik pasaran
  3. Tambah penapis persekitaran pasaran: Sertakan penunjuk kekuatan trend untuk menyesuaikan parameter strategi dalam keadaan pasaran yang berbeza
  4. Meningkatkan pengurusan kedudukan: Pertimbangkan untuk melaksanakan saiz kedudukan dinamik berdasarkan turun naik pasaran
  5. Tambah penapis masa: Sertakan penapis masa untuk mengelakkan perdagangan semasa sesi pasaran yang sangat tidak menentu

Ringkasan

Strategi ini menggabungkan alat analisis teknikal klasik dengan kaedah pengurusan risiko moden untuk membina sistem perdagangan yang agak komprehensif. Kelebihan utamanya terletak pada kawalan risiko yang ketat dan mekanisme kemasukan yang fleksibel, sementara perhatian perlu diberikan kepada perubahan persekitaran pasaran dan pengesahan kebolehpercayaan isyarat dalam aplikasi praktikal. Melalui arah pengoptimuman yang dicadangkan, terdapat ruang untuk penambahbaikan lanjut, terutamanya dalam penapisan isyarat dan aspek pengurusan 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 lanjut