Strategi perdagangan trend lanjutan berdasarkan Bollinger Bands dan corak candlestick

BB ATR RR PSR MA SD WBR
Tarikh penciptaan: 2024-11-27 14:18:33 Akhirnya diubah suai: 2024-11-27 14:18:33
Salin: 1 Bilangan klik: 413
1
fokus pada
1617
Pengikut

Strategi perdagangan trend lanjutan berdasarkan Bollinger Bands dan corak candlestick

Gambaran keseluruhan

Ini adalah strategi pengesanan trend berdasarkan analisis Bollinger Bands dan Pivot Chart Patterns. Strategi ini digunakan untuk menilai kemungkinan pembalikan pasaran dengan mengamati ciri-ciri Pivot Chart apabila harga menyentuh Bollinger Bands, digabungkan dengan nisbah hubungan antara penunjuk ke atas dan ke bawah dengan entiti. Strategi ini juga menggunakan model risiko tetap untuk mengawal risiko setiap perdagangan dan meningkatkan ketepatan perdagangan melalui analisis pelbagai kitaran masa.

Prinsip Strategi

Logik teras strategi ini didasarkan pada beberapa elemen penting berikut: pertama, untuk menentukan ruang lingkup pergerakan harga dengan mengira Bollinger selama 20 kitaran; kedua, untuk menganalisis nisbah petunjuk ke atas dan ke bawah dalam grafik untuk entiti apabila harga menyentuh Bollinger Band, yang dianggap sebagai isyarat reversal yang berpotensi apabila nisbah melebihi had yang ditetapkan; ketiga, untuk menetapkan titik stop loss dengan mengira kedudukan sokongan dan rintangan utama; dan terakhir, untuk mengira jumlah pegangan setiap perdagangan berdasarkan peratusan tetap jumlah akaun (%) untuk pengurusan dinamik risiko.

Kelebihan Strategik

  1. Kawalan risiko yang tepat: menggunakan model pengurusan risiko peratusan tetap untuk memastikan setiap perdagangan mempunyai risiko yang boleh dikawal
  2. Fleksibiliti titik masuk: menawarkan pelbagai pilihan harga masuk untuk menyesuaikan diri dengan gaya dagangan yang berbeza
  3. Gabungan penunjuk teknikal: Gabungan pita Bollinger dengan analisis bentuk grafik untuk meningkatkan kebolehpercayaan isyarat
  4. Tetapan hentian yang munasabah: melalui tetapan hentian yang sesuai dengan peraturan pasaran
  5. Pengurusan urus niaga yang sempurna: termasuk mekanisme kedaluwarsa pesanan, mengelakkan kesalahan yang disebabkan oleh isyarat kedaluwarsa

Risiko Strategik

  1. Risiko turun naik pasaran dengan cepat: Rasio penunjuk boleh memberi isyarat palsu dalam pasaran yang bergolak
  2. Risiko pengurusan wang: model risiko peratusan tetap boleh menyebabkan kedudukan terlalu kecil dalam kes kerugian berturut-turut
  3. Risiko tetapan stop loss: Pengiraan tahap rintangan sokongan mungkin tidak tepat dalam keadaan pasaran tertentu
  4. Ketergantungan kitaran masa: strategi berdasarkan tahap garis matahari, mungkin kehilangan peluang dalam jangka masa yang lebih kecil

Arah pengoptimuman strategi

  1. Memperkenalkan penunjuk jumlah trafik: dapat meningkatkan kebolehpercayaan isyarat dengan menambah analisis jumlah trafik semasa pengesahan isyarat
  2. Mekanisme penangguhan yang dioptimumkan: pertimbangkan untuk memperkenalkan penangguhan dinamik, menyesuaikan jarak penangguhan secara automatik mengikut turun naik pasaran
  3. Menambah penapis keadaan pasaran: menambah penunjuk kekuatan trend, menyesuaikan parameter strategi dalam keadaan pasaran yang berbeza
  4. Pengurusan kedudukan yang lebih baik: pertimbangkan untuk memperkenalkan mekanisme pengurusan kedudukan yang dinamik, menyesuaikan celah risiko mengikut turun naik pasaran
  5. Menambah penapis masa: penapis masa boleh ditambah untuk mengelakkan dagangan pada masa pasaran yang bergolak

ringkaskan

Strategi ini membina sistem perdagangan yang agak sempurna dengan menggabungkan alat analisis teknikal klasik dengan kaedah pengurusan risiko moden. Kelebihan utama strategi ini adalah kawalan risiko yang ketat dan mekanisme kemasukan yang fleksibel, tetapi juga memerlukan perhatian terhadap perubahan persekitaran pasaran dan pengesahan kebolehpercayaan isyarat dalam aplikasi praktikal. Dengan arah pengoptimuman yang dicadangkan, strategi ini mempunyai ruang untuk peningkatan lebih lanjut, terutama dalam penapisan isyarat dan pengurusan risiko.

Kod sumber strategi
/*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")