Strategi perdagangan tren lanjutan berdasarkan Bollinger Bands dan pola candlestick

BB ATR RR PSR MA SD WBR
Tanggal Pembuatan: 2024-11-27 14:18:33 Akhirnya memodifikasi: 2024-11-27 14:18:33
menyalin: 1 Jumlah klik: 413
1
fokus pada
1617
Pengikut

Strategi perdagangan tren lanjutan berdasarkan Bollinger Bands dan pola candlestick

Ringkasan

Ini adalah strategi pelacakan tren yang didasarkan pada analisis pola Bollinger Bands dan Trailing Chart. Strategi ini didasarkan pada analisis pola Bollinger Bands dan Trailing Chart. Strategi ini didasarkan pada analisis pola Bollinger Bands dan Trailing Chart. Strategi ini didasarkan pada analisis pola Bollinger Bands dan Trailing Chart.

Prinsip Strategi

Logika inti dari strategi ini didasarkan pada beberapa elemen kunci berikut: pertama, menentukan ruang lingkup pergerakan harga dengan menghitung Bollinger Bands selama 20 siklus; kedua, menganalisis rasio antara arah atas dan bawah dari chart chart saat harga menyentuh Bollinger Bands, yang dianggap sebagai sinyal reversal potensial ketika rasio melebihi set threshold; ketiga, mengatur titik stop loss dengan menghitung key support and resistance levels; dan terakhir, menghitung jumlah posisi yang dipegang untuk setiap transaksi berdasarkan rasio tetap dari total akun (%) untuk mengelola dinamika risiko. Strategi ini juga menyediakan berbagai opsi opsi waktu masuk, termasuk harga penutupan, harga buka, harga tertinggi dan terendah dalam sehari, dll.

Keunggulan Strategis

  1. Kendali risiko yang tepat: Model manajemen risiko proporsi tetap untuk memastikan bahwa setiap transaksi memiliki risiko yang terkendali
  2. Fleksibilitas entry point: menawarkan berbagai pilihan harga entry yang dapat disesuaikan dengan gaya perdagangan yang berbeda
  3. Kombinasi indikator teknis: menggabungkan Bollinger Bands dengan analisis graph morphologi untuk meningkatkan keandalan sinyal
  4. Penetapan Stop Loss yang Rasional: Stop loss yang sesuai dengan hukum operasi pasar melalui penetapan titik resistensi pendukung utama
  5. Pengelolaan transaksi yang sempurna: termasuk mekanisme kedaluwarsa pesanan, menghindari kesalahan yang disebabkan oleh sinyal kedaluwarsa

Risiko Strategis

  1. Risiko pasar yang cepat berfluktuasi: Rasio pivot dapat menghasilkan sinyal palsu dalam pasar yang sangat berfluktuasi
  2. Manajemen risiko dana: model risiko proporsi tetap dapat menyebabkan posisi terlalu kecil dalam kasus kerugian berkelanjutan
  3. Stop loss setup risk: perhitungan resistance level support mungkin tidak cukup akurat dalam kondisi pasar tertentu
  4. Ketergantungan siklus waktu: strategi didasarkan pada tingkat garis matahari, kemungkinan kehilangan kesempatan dalam kerangka waktu yang lebih kecil

Arah optimasi strategi

  1. Pengenalan indikator volume transaksi: dapat meningkatkan keandalan sinyal dengan menambahkan analisis volume transaksi pada saat konfirmasi sinyal
  2. Optimalkan mekanisme stop loss: pertimbangkan untuk memperkenalkan stop loss dinamis, yang secara otomatis menyesuaikan jarak stop loss sesuai dengan fluktuasi pasar
  3. Menambahkan filter kondisi pasar: Menambahkan indikator kekuatan tren, menyesuaikan parameter strategi dalam kondisi pasar yang berbeda
  4. Perbaikan manajemen posisi: pertimbangkan untuk memperkenalkan mekanisme manajemen posisi dinamis, menyesuaikan risiko terbuka sesuai dengan volatilitas pasar
  5. Tambahkan filter waktu: Anda dapat menambahkan filter waktu untuk menghindari perdagangan pada saat pasar bergejolak

Meringkaskan

Strategi ini membangun sistem perdagangan yang relatif sempurna dengan menggabungkan alat analisis teknis klasik dengan metode manajemen risiko modern. Keunggulan inti dari strategi ini adalah kontrol risiko yang ketat dan mekanisme masuk yang fleksibel, tetapi juga memerlukan perhatian terhadap perubahan lingkungan pasar dan validasi keandalan sinyal dalam aplikasi praktis. Dengan arah optimasi yang disarankan, strategi ini memiliki ruang untuk peningkatan lebih lanjut, terutama dalam hal penyaringan sinyal dan manajemen risiko.

Kode 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")